Our Logo
WebAsOne
Home
How To
Join US
Design
Design Block
Design Patterns
Animation
Themes
Fonts
Marketing
Hero
About
BIO
Contact
CTA
FAQ
Footer
Portfolio
Price
Service
Team
Testimonials
Pages
Apps
Vue3
OpenSource
Mini-Apps
Lessons
Basic
Blog
Position
oneColumn
twoColumn
twoColumnA
twoColumnB
threeColumn
ThreeColumnA
fourColumn
Quotes
QuoteA
QuoteB
Headings
Heading-StartMsg
BasicA
Card
Contact
Table
TableA
List
ListA
ListB
Images
Mixed
SVG-TinyMCE
Layout
Flexbox
FlexBox-1
Grid
SVG
A
Patterns
Background
Multi-Cols
Image-Text
Two Columns
TwoColumnA
ThreeColumnA
Three Columns
Six Column
FourColumn
ICON-Text
Pagination
Panel
image
ImageText
Youtube
Video-mp4
Slider
Bootstrap 5
Bootstrap 5-A
QwlCarousel
Slick
Swiper
Splide
Misc
Gallery
GalleryA
CategoryItems
DesignBlock
->
Slider
->
Bootstrap 5
Bootstrap 5-A
QwlCarousel
Slick
Swiper
Splide
s_slide/id13-33,Click to clipboard
ezIzOiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYicvKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIE1lZGlhIGNvbXBvbmVudC5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXHJcbiAqIEBzaW5jZSA0LjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIE1lZGlhQ29tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgLyoqIEBpbnRlcm5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgKi9cclxuICAgIHJlZHVjZShyZWR1Y2VkOiBib29sZWFuKTogdm9pZDtcclxuICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQob3B0aW9uczogT3B0aW9ucywgYmFzZT86IGJvb2xlYW4sIG5vdGlmeT86IGJvb2xlYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduKTogdm9pZDtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidEaXJlY3Rpb24gY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG5pbnRlcmZhY2UgRGlyZWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQge1xyXG4gICAgcmVzb2x2ZShwcm9wOiBzdHJpbmcsIGF4aXNPbmx5PzogYicKICAgICAgICAgICAgICAgICAgICAgICAgYiJvb2xlYW4sIGRpcmVjdGlvbj86IE9wdGlvbnNbJ2RpcmVjdGlvbiddKTogc3RyaW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInZztcclxuICAgIG9yaWVudCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyO1xyXG59XG5cbi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgZWxlbWVudHMgd2hpY2ggdGhlIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgY29uc2lzdHMgb2YuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZSBFbGVtZW50Q29sbGVjdGlvbiB7XHJcbiAgICByb290OiBIVE1MRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQ7XHJcbiAgICB0cmFjazogSFRNTEVsZW1lbnQ7XHJcbiAgICBsaXN0OiBIVE1MRWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQ7XHJcbiAgICBzbGlkZXM6IEhUTUxFbGVtZW50W107XHJcbiAgICBhcnJvd3M/OiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSFRNTEVsZW1lbnQ7XHJcbiAgICBwYWdpbmF0aW9uPzogSFRNTFVMaXN0RWxlbWVudDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICBwcmV2PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBuZXh0PzogSFRNTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCdXR0b25FbGVtZW50O1xyXG4gICAgYmFyPzogSFRNTEVsZW1lbnQ7XHJcbiAgICB0b2dnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlPzogSFRNTEVsZW1lbnQ7XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciB0aGUgRWxlbWVudHMgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAqL1xyXG5pbnRlcmZhY2UgRWxlbWVudHNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudCwgRWxlbWVudENvbGxlY3Rpb24ge1xyXG59XG5cbi8qKlxyXG4gKiBUaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGludGVyZmFjZSBmb3IgdGhlIFNsaWRlIHN1YiBjb21wb25lbnQuXHJcbiAqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBTbGlkZUNvbXBvbmVudCBleHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgICBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVJbmRleDogbnVtYmVyO1xyXG4gICAgc2xpZGU6IEhUTUxFbGVtZW50O1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRhaW5lcjogSFRNTEVsZW1lbnQ7XHJcbiAgICBpc0Nsb25lOiBib29sZWFuO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHVwZGF0ZSgpOiB2b2lkO1xyXG4gICAgc3R5bGUocHJvcDogc3RyaW5nLCB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWU6IHN0cmluZyB8IG51bWJlciwgdXNlQ29udGFpbmVyPzogYm9vbGVhbik6IHZvaWQ7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaXNXaXRoaW4oZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyKTogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW47XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBMYXlvdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIExheW91dENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxpc3RTaXplKCk6IG51bWJlcjtcclxuICAgIHNsaWRlU2l6ZShpbmRleDogbnVtYicKICAgICAgICAgICAgICAgICAgICAgICAgYidlciwgd2l0aG91dEdhcD86IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBzbGlkZXJTaScKICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSh3aXRob3V0R2FwPzogYm9vbGVhbik6IG51bWJlcjtcclxuICAgIHRvdGFsU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoaW5kZXg/OiBudW1iZXIsIHdpdGhvdXRHYXA/OiBib29sZWFuKTogbnVtYmVyO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGdldFBhZGRpbmcocmlnaHQ6IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidPdmVyZmxvdygpOiBib29sZWFuO1xyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc2l6ZShmb3JjZT86IGJvb2xlYW4pOiB2b2lkO1xyXG59XG5cbi8qKlxyXG4gKiBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGludGVyZmFjZSBmb3IgdGhlIENsb25lIGNvbXBvbmVudC5cclxuICpcclxuICogQHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIENsb25lc0NvbXBvbmVudCBleHRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyBCYXNlQ29tcG9uZW50IHtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIHRoZSBNb3ZlIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxyXG4gKi9cclxuaW50ZXJmYWNlIE1vdmVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudCB7XHJcbiAgICBtb3ZlKGRlc3Q6IG51bWJlciwgaW5kZXg6IG51bWJlciwgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXY6IG51bWJlciwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbik6IHZvaWQ7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicganVtcChpbmRleDogbnVtYmVyKTogdm9pZDtcclxuICAgIHRyYW5zbGF0ZShwb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb246IG51bWJlciwgcHJldmVudExvb3A/OiBib29sZWFuKTogdm9pZDtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzaGlmdChwb3NpdGlvbjogbnVtYmVyLCBiYWNrd2FyZHM6IGJvb2xlYW4pOiBudW1iZXI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgY2FuY2VsKCk6IHZvaWQ7XHJcbiAgICB0b0luZGV4KHBvc2l0aW9uOiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyKTogbnVtYmVyO1xyXG4gICAgdG9Qb3NpdGlvbihpbmRleDogbnVtYmVyLCB0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW1pbmc/OiBib29sZWFuKTogbnVtYmVyO1xyXG4gICAgZ2V0UG9zaXRpb24oKTogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlcjtcclxuICAgIGdldExpbWl0KG1heDogYm9vbGVhbik6IG51bWJlcjtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidleGNlZWRlZExpbWl0KG1heD86IGJvb2xlYW4gfCB1bmRlZmluZWQsIHBvc2l0aW9uPzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcik6IGJvb2xlYW47XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICByZXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbigpOiB2b2lkO1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgdGhlIENvbnRyb2xsZXIgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLicKICAgICAgICAgICAgICAgICAgICAgICAgYicwXHJcbiAqL1xyXG5pbnRlcmZhY2UgQ29udHJvbGxlckNvbXBvbmVudCBleHRlbmRzIEJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlQ29tcG9uZW50IHtcclxuICAgIGdvKGNvbnRyb2w6IG51bWJlciB8IHN0cmluZywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbG93U2FtZUluZGV4PzogYm9vbGVhbiwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbik6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkO1xyXG4gICAgc2Nyb2xsKGRlc3RpbmF0aW9uOiBudW1iZXIsIGR1cmF0aW9uPzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciwgc25hcD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQW55RnVuY3Rpb24pOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZDtcclxuICAgIGdldE5leHQoZGVzdGluYXRpb24/OiBib29sZWFuKTogbnVtYmVyOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIGdldFByZXYoZGVzdGluYXRpb24/OiBib29sZWFuKTogbnVtYmVyO1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGdldEVuZCgpOiBudW1iZXI7XHJcbiAgICBzZXRJbmRleChpbmRleDogbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQ7XHJcbiAgICBnZXRJbmRleChwcmV2PzogYm9vbGVhbik6IG51bWJlcjtccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0b0luZGV4KHBhZ2U6IG51bWJlcik6IG51bWJlcjtcclxuICAgIHRvUGFnZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXg6IG51bWJlcik6IG51bWJlcjtcclxuICAgIHRvRGVzdChwb3NpdGlvbjogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlcik6IG51bWJlcjtcclxuICAgIGhhc0ZvY3VzKCk6IGJvb2xlYW47XHJcbiAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidCdXN5KCk6IGJvb2xlYW47XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RqYWNlbnQocHJldjogYm9vbGVhbiwgZGVzdGluYXRpb24/OiBib29sZWFuKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEFycm93cyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UgQXJyb3dzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYXJyb3dzOiB7XHJcbiAgICAgICAgcHJldj86IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBuZXh0PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICB9O1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAaW50ZXJuYWwgKi9cclxuICAgIHVwZGF0ZSgpOiB2b2lkO1xyXG59XG5cbi8qKlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEF1dG9wbGF5IGNvbXBvbmVudC5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEF1dG9wbGF5QycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgcGxheSgpOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZDtcclxuICAgIHBhdXNlKCk6IHZvaWQ7XHJcbiAgICBpc1BhdXNlZCgpOiBib29sZWFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIENvdmVyIGNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBDb3ZlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG59XG5cbi8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFNjcm9sbCBjb21wb25lbnQuXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBTY3JvbGxDb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBzY3JvbGwocG9zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uOiBudW1iZXIsIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgY2FsbGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrPzogQW55RnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgY2FuY2VsKCk6IHZvaWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRHJhZyBjb21wb25lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBEcmFnQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgZGlzYWJsZShkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgaXNEcmFnZ2luZygpOiBib29sZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEtleWJvYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZSBLZXlib2FyZENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGRpc2FibGUoZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkO1xyXG59XG5cbi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIExhenlMb2FkIGNvbXBvbmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIExhenlMbycKICAgICAgICAgICAgICAgICAgICAgICAgYidhZENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgLyoqIEBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJuYWwgKi9cclxuICAgIGNoZWNrKCk6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaW50ZXJmYWNlIGZvciB0aGUgUGFnaW5hdGlvbiBjb21wb25lbnQuXHJcbiAqXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBQYWdpbmF0aW9uQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgaXRlbXM6IFBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduSXRlbVtdO1xyXG4gICAgZ2V0QXQoaW5kZXg6IG51bWJlcik6IFBhZ2luYXRpb25JdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbTtcclxuICAgIHVwZGF0ZSgpOiB2b2lkO1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgaW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZSBmb3IgZGF0YSBvZiB0aGUgcGFnaW5hdGlvbi5cclxuICpcclxuICogQHNpbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIFBhZ2luYXRpb25EYXRhIHtcclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBsaXN0OiBIVE1MVUxpc3RFbGVtZW50O1xyXG4gICAgaXRlbXM6IFBhZ2luYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSXRlbVtdO1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBlYWNoIHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdpbmF0aW9uIGl0ZW0uXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZSBQYWdpbmF0aW9uSXRlbSB7XHJcbiAgICBsaTogSFRNTExJRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICBidXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gICAgcGFnZTogbnVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JlcjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFN5bmMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlIFN5bmNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1vdW50KCk6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB0aGUgV2hlZWwgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAqL1xyXG5pbnRlcmZhY2UgV2hlZWxDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCB7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBMaXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSA0LjAuMFxyXG4gKi9cclxuaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZSBMaXZlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlzYWJsZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBUaGUgY29sbGVjdGlvbiBvZiBpMThuIHN0cmluZ3MuXHJcbiAqXHJcbiAqIEBzaW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QgSTE4Tjoge1xyXG4gICAgcHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Y6IHN0cmluZztcclxuICAgIG5leHQ6IHN0cmluZztcclxuICAgIGZpcnN0OiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgbGFzdDogc3RyaW5nO1xyXG4gICAgc2xpZGVYOiBzdHJpbmc7XHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcGFnZVg6IHN0cmluZztcclxuICAgIHBsYXk6IHN0cmluZztcclxuICAgIHBhdXNlOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xyXG4gICAgY2Fyb3VzZWw6IHN0cmluZztcclxuICAgIHNsaWRlOiBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nO1xyXG4gICAgc2VsZWN0OiBzdHJpbmc7XHJcbiAgICBzbGlkZUxhYmVsOiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG59O1xuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3Igb3B0aW9ucy5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIE9wdGlvbnMgZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgUmVzcG9uc2l2ZU9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiInR5cGUgb2YgdGhlIHNsaWRlci5cclxuICAgICAqIC0gJ3NsaWRlJzogQSBzbGlkZXIgIgogICAgICAgICAgICAgICAgICAgICAgICBiIndpdGggdGhlIHNsaWRlIHRyYW5zaXRpb25cclxuICAgICAqIC0gJ2xvb3AnIDogQSBjIgogICAgICAgICAgICAgICAgICAgICAgICBiImFyb3VzZWwgc2xpZGVyXHJcbiAgICAgKiAtICdmYWRlJyA6IEEgc2xpZGVyIHdpdGggIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBmYWRlIHRyYW5zaXRpb24uIFRoaXMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcGVyUGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2Ugb3B0aW9uLlxyXG4gICAgICovXHJcbiAgICB0eXBlPzogc3RyaW5nO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxyXG4gICAgICogVGhlIGByb2xlYCBhdHRyaWJ1dGUgZm9yIHRoZSByb290IGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50LlxyXG4gICAgICogSWYgdGhlIHRhZyBpcyBgPHNlY3Rpb24+YCwgdGhpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIidmFsdWUgd2lsbCBub3QgYmUgdXNlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYCdyZWdpbyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuJ2AuXHJcbiAgICAgKi9cclxuICAgIHJvbGU/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzYWJsZSBhbnkgYWN0aW9ucyB3aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGUgdGhlIHNsaWRlciBpcyB0cmFuc2l0aW9uaW5nLlxyXG4gICAgICogRXZlbiBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYGZhbHNlYCwgdGhlIHNsaWRlciBmb3JjaWJseSB3YWl0cyBmb3IgdHJhbnNpdGlvbiBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIGxvb3AgcG9pbnRzLlxyXG4gICAgICovXHJcbiAgICB3YWl0Rm9yVHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBgdHJ1ZWAsIHRoZSB3aWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGggb2Ygc2xpZGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZWlyIHdpZHRoLlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFRoZSBgcGVyUGFnZWAgYW5kIGBwZXJNb3ZlYCBvcHRpb25zIHNob3VsZCBiZSBgMScKICAgICAgICAgICAgICAgICAgICAgICAgYidgLlxyXG4gICAgICovXHJcbiAgICBhdXRvV2lkdGg/OiBib29sZWFuO1xyXG4gICAgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxyXG4gICAgICogSWYgYHRydWVgLCB0aGUgaGVpZ2h0IG9mIHNsaWRlcyBhcmUgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidldGVybWluZWQgYnkgdGhlaXIgaGVpZ2h0LlxyXG4gICAgICogVGhlIGBwZXJQYWdlYCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYW5kIGBwZXJNb3ZlYCBvcHRpb25zIHNob3VsZCBiZSBgMWAuXHJcbiAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBhdXRvSGVpZ2h0PzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydCBpbmRleC5cclxuICAgICAqL1xyXG4gICAgc3RhcnQ/OiBudW1iZXI7XHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBhcnJvdyBTVkcgcGF0aCwgbGlrZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ203LjYxIDAuODA3LTIuMTIuLi4nLlxyXG4gICAgICovXHJcbiAgICBhcnJvd1BhdGg/OiIKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGl2YXRlIGF1dG9wbGF5IG9yIG5vdC5cclxuICAgICAqIElmIGBwYXVzZWRgLCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgd2lsbCBub3QgYmVnaW4gd2hlbiB0aGUgc2xpZGVyIGJlY29tZXMgYWN0aXZlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIFlvdSBuZWVkIHRvIHByb3ZpZGVkIHBsYXkvcGF1c2UgYnV0dG9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IgbWFudWFsbHkgc3RhcnQgaXQgYnkgYEF1dG9wbGF5I3BsYXkoKWAuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICovXHJcbiAgICBhdXRvcGxheT86IGJvb2xlYW4gfCAncGF1c2UnO1xyXG4gICAgLyoqIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogVGhlIGF1dG9wbGF5IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIGludGVydmFsPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHBhdXNlIGF1dG9wbGF5IG9uIG1vdXNlbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXIuXHJcbiAgICAgKi9cclxuICAgIHBhdXNlT25Ib3Zlcj86IGJvb2xlYW47XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcGF1c2UgYXV0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGF5IHdoZW4gdGhlIHNsaWRlciBjb250YWlucyB0aGUgYWN0aXZlIGVsZW1lbnQgKGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1c2VkIGVsZW1lbnQpLlxyXG4gICAgICogVGhpcyBzaG91bGQgYmUgYHRydWVgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYWNjZXNzaWJpbGl0eS5cclxuICAgICAqL1xyXG4gICAgcGF1c2VPbkZvY3VzPzogYm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQgdGhlIGF1dG9wbGF5IHByb2dyZXNzIHdoZW4gaXQgaXMgcmVxdWVzdGVkIHRvIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FydCBhZ2Fpbi5cclxuICAgICAqL1xyXG4gICAgcmVzZXRQcm9ncmVzcz86IGJvb2xlYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIGxhenkgbG9hZGluZy5cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBQcm92aWRlIHRoZSBgc3JjYCBieSB0aGUgYGRhdGEtc3BsaWRlLWxhenlgIG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgYHNyY3NldGAgYnkgdGhlIGBkYXRhLXNwbGlkZS1sYXp5LXNyY3NldGAuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICogWW91IG1heSBhbHNvIHByb3ZpZGUgYHNyY2AgZm9yIHRoZSBwbGFjZWhvbGRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsIGJ1dCB0aGUgdmFsdWUgbXVzdCBiZSBkaWZmZXJlbnQgd2l0aCB0aGUgZGF0YScKICAgICAgICAgICAgICAgICAgICAgICAgYicuXHJcbiAgICAgKlxyXG4gICAgICogLSBgZmFsc2VgOiBEaXNhYmxlcyBsYXp5IGxvYWRpJwogICAgICAgICAgICAgICAgICAgICAgICBiIm5nXHJcbiAgICAgKiAtIGAnbmVhcmJ5J2A6IFN0YXJ0cyBsb2FkaW5nIG9ubHkgaW1hIgogICAgICAgICAgICAgICAgICAgICAgICBiImdlcyBhcm91bmQgdGhlIGFjdGl2ZSBzbGlkZSAocGFnZSlcclxuICAgICAqIC0gYCdzIgogICAgICAgICAgICAgICAgICAgICAgICBiImVxdWVudGlhbCdgOiBMb2FkcyBpbWFnZXMgc2VxdWVudGlhbGx5XHJcbiAgICAgKi9cciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcbiAgICBsYXp5TG9hZD86IGJvb2xlYW4gfCAnbmVhcmJ5JyB8ICdzZXF1ZW50aWFsIgogICAgICAgICAgICAgICAgICAgICAgICBiIic7XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZSBob3cgbWFueSBwYWdlcyAobm8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBzbGlkZXMpIGFyb3VuZCB0aGUgYWN0aXZlIHNsaWRlIHNob3VsZCBiZSBsb2FkZWQgYicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZm9yZWhhbmQuXHJcbiAgICAgKiBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgYGxheicKICAgICAgICAgICAgICAgICAgICAgICAgYiJ5TG9hZGAgb3B0aW9uIGlzIGAnbmVhcmJ5J2AuXHJcbiAgICAgKi9cclxuICAgIHByZWxvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2FkUGFnZXM/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZXMga2V5Ym8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJkIHNob3J0Y3V0cyBmb3IgdGhlIHNsaWRlciBjb250cm9sLlxyXG4gICAgICogLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYHRydWVgIG9yIGAnZ2xvYmFsJ2A6IExpc3RlbnMgdG8gdGhlIGBrZXlkb3duYCBldmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgb2YgdGhlIGRvY3VtZW50LlxyXG4gICAgICogLSAnZm9jdXNlZCc6IExpc3RlbnMgdCIKICAgICAgICAgICAgICAgICAgICAgICAgYidvIHRoZSBga2V5ZG93bmAgZXZlbnQgb2YgdGhlIHNsaWRlciByb290IGVsZW1lbnQgd2l0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ggYWRkaW5nIGB0YWJpbmRleD0iMCJgIHRvIGl0LlxyXG4gICAgICogLSBgZmFsc2VgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogRGlzYWJsZXMga2V5Ym9hcmQgc2hvcnRjdXRzIChkZWZhdWx0KS5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiIi9cclxuICAgIGtleWJvYXJkPzogYm9vbGVhbiB8ICdnbG9iYWwnIHwgJ2ZvY3VzZWQnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlcyBuYXZpZ2F0aW9uIGJ5IHRoZSBtb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2Ugd2hlZWwuXHJcbiAgICAgKiBTZXQgYHdhaXRGb3JUcmFuc2l0aW9uYCB0byBgdHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVgIG9yIHByb3ZpZGUgdGhlIGB3aGVlbFNsZWVwYCBkdXJhdGlvbi5cclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cclxuICAgIHdoZWVsPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0aHJlc2hvbGQgdG8gY3V0IG9mZiB0aGUgc21hbGwgZGVsdGEgcHJvZHVjZWQgYnkgaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJ0aWEgc2Nyb2xsLlxyXG4gICAgICovXHJcbiAgICB3aGVlbE1pblRocmVzaG9sZD86JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbGVlcCB0aW1lIGluIG1pbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlY29uZHMgdW50aWwgYWNjZXB0aW5nIG5leHQgd2hlZWwuXHJcbiAgICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRpbWVyIHN0YXJ0cyB3aGVuIHRoZSB0cmFuc2l0aW9uIGJlZ2lucy5cclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cclxuICAgIHdoZWVsU2xlZXA/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVsZWFzZSB0aGUgd2hlZWwgZXZlbnQgd2hlbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHNsaWRlciByZWFjaGVzIHRoZSBmaXJzdCBvciBsYXN0IHNsaWRlLlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xyXG4gICAgcmVsZWFzZVdoZWVsPzogYm9vbGVhbjtcclxuICAgIC8qKlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxuICAgICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHNsaWRlci5cclxuICAgICAqIC0gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJsdHInOiBMZWZ0IHRvIHJpZ2h0XHJcbiAgICAgKiAtICdydGwnOiBSaWdodCB0byBsZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJmdFxyXG4gICAgICogLSAndHRiJzogVG9wIHRvIGJvdHRvbVxyXG4gICAgICovXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgZGlyZWN0aW9uPzogJ2x0cicgfCAncnRsJyB8ICd0dGInO1xyXG4gICAgLyoqXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogQ29udmVydHMgdGhlIGltYWdlIGBzcmNgIHRvIHRoZSBjc3MgYGJhY2tncm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5kLWltYWdlYCBVUkwgb2YgdGhlIHBhcmVudCBlbGVtZW50LlxyXG4gICAgICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgcmVxdWlyZXMgYGZpeGVkSGVpZ2h0YCBvciBgaGVpZ2h0UmF0aW9gIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXHJcbiAgICAgKi9cclxuICAgIGNvdmVyPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBhZGQgYHRhYmluZGV4PSIwImAgdG8gdicKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2libGUgc2xpZGVzIG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgc2xpZGVGb2N1cz86JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBgdHJ1ZWAsIHRoZSBzbGlkZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1ha2VzIHNsaWRlcyBjbGlja2FibGUgdG8gbmF2aWdhdGUgYW5vdGhlciBzbGlkZXIuXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogVXNlIGBTcGxpZGUjc3luYygpYCB0byBzeW5jIG11bHRpcGxlIHNsaWRlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBpc05hdmlnYXRpb24/OiBib29sZWFuO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHRyaW0gc3BhY2VzIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZvcmUvYWZ0ZXIgdGhlIHNsaWRlciBpZiB0aGUgYGZvY3VzYCBvcHRpb24gaXMgYXZhaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsYWJsZS5cclxuICAgICAqIC0gYHRydWVgOiBUcmltcyBzcGFjZXMuIFRoZSBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIG1heSBzdGF5IG9uIHRoZSBzYW1lIGxvY2F0aW9uIGV2ZW4gd2hlbiByZXF1ZXN0ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiInRvIG1vdmUuXHJcbiAgICAgKiAtIGAnbW92ZSdgOiBUcmltcyBzcGFjZXMgYW5kIGZvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JjZXMgdG8gbW92ZSB0aGUgc2xpZGVyIHdoZW4gcmVxdWVzdGVkLlxyXG4gICAgICovJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxyXG4gICAgdHJpbVNwYWNlPzogYm9vbGVhbiB8ICdtb3ZlJztcclxuICAgIC8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIElmIGB0cnVlYCBhbmQgdGhlIGBmb2N1c2Agb3B0aW9uIGlzIGF2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbGFibGU6XHJcbiAgICAgKiAtIERpc2FibGVzIHRoZSBuZXh0IGFycm93IHdoZW4gYScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2Fyb3VzZWwgcmVhY2hlcyB0aGUgbGFzdCBwYWdlIGV2ZW4gaWYgdGhlIGFjdGl2ZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgaXMgbm90IHRoZSBsYXN0IHNsaWRlLlxyXG4gICAgICogLSBPbWl0cyByZWR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kYW50IHBhZ2luYXRpb24gZG90cyB3aGljaCBqdXN0IGNoYW5nZSB0aGUgYWN0aXZlIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSBhbmQgZG8gbm90IG1vdmUgYSBjYXJvdXNlbC5cclxuICAgICAqL1xyXG4gICAgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidtaXRFbmQ/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGVzIHRoZSBgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLWFjdGl2ZWAgc3RhdHVzIG9mIHNsaWRlcyBqdXN0IGJlZm9yZSBtb3ZpbmcgdGhlIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXIuXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZU9uTW92ZT86IGJvb2xlYW47JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBJZiBgbWluYCwgdGhlIG1lZGlhIHF1ZXJ5IGZvciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnJlYWtwb2ludHMgd2lsbCBiZSBgbWluLXdpZHRoYCwgb3Igb3RoZXJ3aXNlLCBgbWF4LScKICAgICAgICAgICAgICAgICAgICAgICAgYiJ3aWR0aGAuXHJcbiAgICAgKi9cclxuICAgIG1lZGlhUXVlcnk/OiAnbWluJyB8ICdtYXgnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNlbGVjdG9yIHRvIGZpbmQgZm9jdXNhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBlbGVtZW50c1xyXG4gICAgICogd2hlcmUgYHRhYmluZGV4PSItMSJgIHdpbGwgYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFzc2lnbmVkIHdoZW4gdGhlaXIgYXNjZW5kYW50IHNsaWRlIGlzIGhpZGRlbi5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIGZvY3VzYWJsZU5vZGVzPzogc3RyaW5nO1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gICAgICogVGhlIHNlbGVjdG9yIGZvciBub2RlcyB0aGF0IGNhbm5vdCBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgZHJhZ2dlZC5cclxuICAgICAqL1xyXG4gICAgbm9EcmFnPzogc3RyaW5nO1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC8qKlxyXG4gICAgICogRW5hYmxlcyB0aGUgbGl2ZSByZWdpb24gYnkgYGFyaWEtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpdmVgLlxyXG4gICAgICogSWYgYHRydWVgLCBzY3JlZW4gcmVhZGVycyB3aWxsIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FkIGEgY29udGVudCBvZiBlYWNoIHNsaWRlIHdoZW5ldmVyIHNsaWRlIGNoYW5nZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxyXG4gICAgICovXHJcbiAgICBsaXZlPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIERldGVybWluZXMgd2hldGhlciB0byB1c2UgdGhlIFRyYW5zaXRpb24gY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIHVzZVNjcm9sbD86IGJvb2xlYW47XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBPcHRpb25zIGZvciBzcGVjaWZpYyBicmVha3BvaW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXHJcbiAgICAgKlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGBgYHRzXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICoge1xyXG4gICAgICogICAxMDAwOiB7XHJcbiAgICAgKiAgICAgcGVyUGFnZTogMycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXHJcbiAgICAgKiAgICAgZ2FwICAgIDogMjBcclxuICAgICAqICAgfSxcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiAgIDYwMDoge1xyXG4gICAgICogICAgIHBlclBhZ2U6IDEsXHJcbiAgICAgKiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCAgICA6IDUsXHJcbiAgICAgKiAgIH0sXHJcbiAgICAgKiB9XHJcbiAgICAgKiBgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2BgXHJcbiAgICAgKi9cclxuICAgIGJyZWFrcG9pbnRzPzogUmVjb3JkPHN0cmluZyB8IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIFJlc3BvbnNpdmVPcHRpb25zPjtcclxuICAgIC8qKlxyXG4gICAgICogT3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMgdXNlZCB3aGVuIHRoZSBgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSlgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyBkZXRlY3RlZC5cclxuICAgICAqL1xyXG4gICAgcmVkdWNlZE1vdGlvbj86IE9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sbGVjdGlvbiBvZiBjbGFzcyBuYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZXMuXHJcbiAgICAgKi9cclxuICAgIGNsYXNzZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgaTE4biBzdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5ncy5cclxuICAgICAqL1xyXG4gICAgaTE4bj86IFJlY29yZDxrZXlvZiB0eXBlb2YgSScKICAgICAgICAgICAgICAgICAgICAgICAgYicxOE4gfCBzdHJpbmcsIHN0cmluZz47XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIGZvciBvcHRpb25zIHRoYXQgY2FuIGNvcnJlc3BvbmQgd2l0aCBicmVha3BvaW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIFJlc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zaXZlT3B0aW9ucyB7XHJcbiAgICAvKipcclxuICAgICAqIEFjY2VwdHMgYXJiaXRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiJyeSBwcm9wZXJ0aWVzIGZvciBleHRlbnNpb25zLCBhbHRob3VnaCBpdCdzIG5vdCBpZGVhIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgdHlwaW5nLlxyXG4gICAgICovXHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgZm9yIHRoZSByb290IGVsZW1lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogVXNlIGBsYWJlbGxlZGJ5YCBpbnN0ZWFkIGlmIHRoZXJlIGlzIGEgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Zpc2libGUgbGFiZWwuXHJcbiAgICAgKi9cclxuICAgIGxhYmVsPzogc3RyaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIC8qKlxyXG4gICAgICogVGhlIElEIGZvciB0aGUgZWxlbWVudCB0aGF0IHVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIGFzIHRoZSBsYWJlbCBvZiB0aGUgY2Fyb3VzZWwuXHJcbiAgICAgKi9cclxuICAgIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWJlbGxlZGJ5Pzogc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdHJhbnNpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc3BlZWQgaW4gbWlsbGlzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBzcGVlZD86JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV3aW5kIHRoZSBjYXJvdXNlbCBvciBub3QuXHJcbiAgICAgKiBUaGlzIGlzIGlnbm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIicmVkIHdoZW4gdGhlIGB0eXBlYCBvcHRpb24gaXMgYCdsb29wJ2AuXHJcbiAgICAgKi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICByZXdpbmQ/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyYW5zaXRpb24gc3BlZWQgb24gcmV3aW5kIGluIG1pbGxpc2Vjb25kcy5cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cclxuICAgIHJld2luZFNwZWVkPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogQWxsb3dzIHRvIHJld2luZCBhIGNhcm91c2VsIGJ5IGRyYWcgaWYgdGhlIGByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid3aW5kYCBvcHRpb24gaXMgZW5hYmxlZC5cclxuICAgICAqL1xyXG4gICAgcmV3aW5kQnlEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZz86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIERlZmluZXMgdGhlIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgbWF4IHdpZHRoLCBhY2NlcHRpbmcgdGhlIENTUyBmb3JtYXQgc3VjaCBhcyAxMGVtLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgODB2dy5cclxuICAgICAqL1xyXG4gICAgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBzbGlkZXIgaGVpZ2h0LCBhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidjZXB0aW5nIHRoZSBDU1MgZm9ybWF0LlxyXG4gICAgICovXHJcbiAgICBoZWlnaHQ/OiBuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyIHwgc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBGaXhlcyB3aWR0aCBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVzLCBhY2NlcHRpbmcgdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKiBUaGUgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlciB3aWxsIGlnbm9yZSB0aGUgYHBlclBhZ2VgIG9wdGlvbiBpZiB5b3UgcHJvdmlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcyB2YWx1ZS5cclxuICAgICAqL1xyXG4gICAgZml4ZWRXaWR0aD86IG51bWJlciB8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIEZpeGVzIGhlaWdodCBvZiBzbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhY2NlcHRpbmcgdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKiBUaGUgc2xpZGVyIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxsIGlnbm9yZSB0aGUgYGhlaWdodFJhdGlvYCBvcHRpb24gaWYgeW91IHByb3ZpZGUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIGZpeGVkSGVpZ2h0PzogbnVtYmVyIHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyBoZWlnaHQgb2Ygc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlcyBieSB0aGUgcmF0aW8gdG8gdGhlIHNsaWRlciB3aWR0aC5cclxuICAgICAqIEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgZXhhbXBsZSwgd2hlbiB0aGUgc2xpZGVyIHdpZHRoIGlzIGAxMDAwYCBhbmQgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRpbyBpcyBgMC41YCwgdGhlIGhlaWdodCB3aWxsIGJlIGA1MDBgLlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG4gICAgaGVpZ2h0UmF0aW8/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBEZXRlcm1pbmVzIHRoZSBudW1iZXIgb2Ygc2xpZGVzIHRvIGRpc3BsYXkgaW4gYSBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZS5cclxuICAgICAqL1xyXG4gICAgcGVyUGFnZT86IG51bWJlcjtcclxuICAgIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBzbGlkZXMgdG8gbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYXQgb25jZS5cclxuICAgICAqL1xyXG4gICAgcGVyTW92ZT86IG51bWJlcjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAvKipcclxuICAgICAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGNsb25lcyBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZWFjaCBzaWRlIG9mIHRoZSBzbGlkZXIuXHJcbiAgICAgKiBJbiBtb3N0IGNhc2VzJwogICAgICAgICAgICAgICAgICAgICAgICBiIiwgeW91IGRvbid0IG5lZWQgdG8gcHJvdmlkZSB0aGlzIHZhbHVlLlxyXG4gICAgICovIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgY2xvbmVzPzogbnVtYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JtaW5lcyB3aGV0aGVyIHRvIGNsb25lIHN0YXR1cyBjbGFzc2VzIGZvciBjbG9uZXMgb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5vdC5cclxuICAgICAqL1xyXG4gICAgY2xvbmVTdGF0dXM/OiBib29sZWFuO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGljaCBzbGlkZSBzaG91bGQgYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFjdGl2ZSBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgc2xpZGVzIGluIGEgcGFnZS5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYiJcbiAgICAgKiBOdW1iZXJzIGFuZCBgJ2NlbnRlcidgIGFyZSBhY2NlcHRhYmxlLlxyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAqL1xyXG4gICAgZm9jdXM/OiBudW1iZXIgfCAnY2VudGVyJztcclxuICAgIC8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIFRoZSBnYXAgYmV0d2VlbiBzbGlkZXMuIFRoZSBDU1MgZm9ybWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcyBhY2NlcHRhYmxlLCBzdWNoIGFzIGAxZW1gLlxyXG4gICAgICovXHJcbiAgICBnYXA/JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHBhZGRpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGxlZnQvcmlnaHQgb3IgdG9wL2JvdHRvbSBvZiB0aGUgc2xpZGVyLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFRoZSBDU1MgZm9ybWF0IGlzIGFjY2VwdGFibGUsIHN1Y2ggYXMgYDFlbWAuXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0c1xyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8vIEJ5IG51bWJlclxyXG4gICAgICogcGFkZGluZzogMTAsXHJcbiAgICAgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAqIC8vIEJ5IHRoZSBDU1MgZm9ybWF0XHJcbiAgICAgKiBwYWRkaW5nOiAnMXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZW0nLFxyXG4gICAgICpcclxuICAgICAqIC8vIFNwZWNpZmllcyBlYWNoIHZhbHVlIGZvciIKICAgICAgICAgICAgICAgICAgICAgICAgYicgYSBob3Jpem9udGFsIHNsaWRlclxyXG4gICAgICogcGFkZGluZzogeyBsZWZ0OiAxMCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIHJpZ2h0OiAyMCB9LFxyXG4gICAgICogcGFkZGluZzogeyBsZWZ0OiAnMXJlbScsICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyaWdodDogJzJyZW0nIH0sXHJcbiAgICAgKlxyXG4gICAgICogLy8gU3BlY2lmaWVkIGVhIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoIHZhbHVlIGZvciBhIHZlcnRpY2FsIHNsaWRlclxyXG4gICAgICogcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3sgdG9wOiAxMCwgYm90dG9tOiAyMCB9LFxyXG4gICAgICogYGBgXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICBwYWRkaW5nPzogbnVtYmVyIHwgc3RyaW5nIHwge1xyXG4gICAgICAgIGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgIHJpZ2h0PzogbnVtYmVyIHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcclxuICAgIH0gfCB7XHJcbiAgICAgICAgdG9wPzogbnVtYmVyIHwgc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZztcclxuICAgICAgICBib3R0b20/OiBudW1iZXIgfCBzdHJpbmc7XHJcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNyZWF0ZS8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmluZCBhcnJvd3Mgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBhcnJvd3M/OiBib29sZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhbjtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGNyZWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgcGFnaW5hdGlvbiAoaW5kaWNhdG9yIGRvdHMpIG9yIG5vdC5cclxuICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHBhZ2luYXRpb24/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidtaW5lcyB3aGV0aGVyIHRvIGVuYWJsZSBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIHBhZ2luJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uIHdoZW4gaXQgY29udGFpbnMgZm9jdXMuXHJcbiAgICAgKiBUaGUgZGVmYXVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgdmFsdWUgaXMgYHRydWVgLlxyXG4gICAgICovXHJcbiAgICBwYWdpbmF0aW9uS2V5Ym8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJkPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogRXhwbGljaXRseSBzZXRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgcGFnaW5hdGlvbiBkaXJlY3Rpb24gdGhhdCBkb2VzIG5vdCBvbmx5IGFmZmVjdCBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BwZWFyYW5jZSBidXQgYWxzbyBzaG9ydGN1dHMgYW5kIEFSSUEgYXR0cmlidXRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXHJcbiAgICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBzYW1lIHdpdGggdGhlIGNhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXNlbCBkaXJlY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHBhZ2luYXRpb25EaXJlY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9uPzogT3B0aW9uc1snZGlyZWN0aW9uJ107XHJcbiAgICAvKipcclxuICAgICAqIFRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGltaW5nIGZ1bmN0aW9uIGZvciB0aGUgQ1NTIHRyYW5zaXRpb24uIEZvciBleGFtcGxlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYGxpbmVhcmAsIGVhc2Ugb3IgYGN1YmljLWJlemllcigpYC5cclxuICAgICAqL1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVhc2luZz86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGVhc2luZyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZm9yIHRoZSBkcmFnIGZyZWUgbW9kZS5cclxuICAgICAqIFRoZSBkZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXVsdCBmdW5jdGlvbiBpcyB0aGUgYGVhc2VPdXRRdWFydGAgaW50ZXJwb2xhdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXHJcbiAgICAgKi9cclxuICAgIGVhc2luZ0Z1bmM/OiAodDogbnVtYmVyKSA9PiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyO1xyXG4gICAgLyoqXHJcbiAgICAgKiBBbGxvd3MgdG8gZHJhZyB0aGUgc2xpZGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidieSBhIG1vdXNlIG9yIHN3aXBlLlxyXG4gICAgICogSWYgYGZyZWVgLCB0aGUgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciBkb2VzIG5vdCBzbmFwIHRvIGEgc2xpZGUgYWZ0ZXIgZHJhZy5cclxuICAgICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYiJcclxuICAgIGRyYWc/OiBib29sZWFuIHwgJ2ZyZWUnO1xyXG4gICAgLyoqXHJcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogU25hcHMgdGhlIGNsb3Nlc3Qgc2xpZGUgaW4gdGhlIGRyYWctZnJlZSBtb2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cclxuICAgICAqL1xyXG4gICAgc25hcD86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBUaGUgcmVxdWlyZWQgZGlzdGFuY2UgdG8gc3RhcnQgbW92aW5nIHRoZSBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIGJ5IHRoZSB0b3VjaCBhY3Rpb24uXHJcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmaW5lIHRoZSB0aHJlc2hvbGQgZm9yIHRoZSBtb3VzZSwgcHJvdmlkZSBhbiBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBkcmFnTWluVGhyZXNob2xkPzogbnVtYmVyIHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcclxuICAgICAgICBtb3VzZTogbnVtYmVyO1xyXG4gICAgICAgIHRvdWNoOiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIHRoZSBwb3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgb2YgImZsaWNrIi4gVGhlIGxhcmdlciBudW1iZXIgdGhpcyBpcywgdGhlIGZhcnRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHRoZSBzbGlkZXIgcnVucy5cclxuICAgICAqIEFyb3VuZCA1MDAgaXMgcmVjb21tZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVkLlxyXG4gICAgICovXHJcbiAgICBmbGlja1Bvd2VyPzogbnVtYmVyO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogTGltaXRzIHRoZSBudW1iZXIgb2YgcGFnZXMgdG8gbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgYnkgImZsaWNrIi5cclxuICAgICAqL1xyXG4gICAgZmxpY2tNYXhQYWdlcz86IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I7XHJcbiAgICAvKipcclxuICAgICAqIERlc3Ryb3lzIHRoZSBzbGlkZXIuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICovXHJcbiAgICBkZXN0cm95PzogYm9vbGVhbiB8ICdjb21wbGV0ZWx5JztcclxufVxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuLyoqXHJcbiAqIFRoZSB0eXBlIGZvciBhbnkgZnVuY3Rpb24uXHJcbiAqXHJcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgdHlwZSBBbnlGdW5jdGlvbiA9ICguJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uYXJnczogYW55W10pID0+IGFueTtcclxuLyoqXHJcbiAqIFRoZSB0eXBlIGZvciBhIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZSBDb21wb25lbnRDb25zdHJ1Y3RvciA9IChTcGxpZGU6IFNwbGlkZSwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMpID0+IEJhc2VDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgYW55IGNvbXBvbmVudC5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEJhc2VDb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50IHtcclxuICAgIHNldHVwPygpOiB2b2lkO1xyXG4gICAgbW91bnQ/KCk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkO1xyXG4gICAgZGVzdHJveT8oY29tcGxldGVseT86IGJvb2xlYW4pOiB2b2lkO1xyXG59JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFRyYW5zaXRpb24gY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zaXRpb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzdGFydChpbmRleDogbnVtYmVyLCBkb25lOiAoKSA9PiB2b2lkKTogdm9pZDtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjYW5jZWwoKTogdm9pZDtcclxufVxyXG4vKipcclxuICogVGhlIGludGVyZmFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIGluZm8gb2YgYSBzcGxpZGUgaW5zdGFuY2UgdG8gc3luYyB3aXRoLlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICogQHNpbmNlIDMuMi44XHJcbiAqL1xyXG5pbnRlcmZhY2UgU3luY1RhcmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xyXG4gICAgc3BsaWRlOiBTcGxpZGU7XHJcbiAgICBpc1BhcmVudD86IGJvb2xlYW47JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBhbGwgY29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzIHtcclxuICAgIFtrZXk6IHN0cmluZ106IEJhc2VDb21wb25lbnQgfCB1bmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZpbmVkO1xyXG4gICAgTWVkaWE6IE1lZGlhQ29tcG9uZW50O1xyXG4gICAgRGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbjogRGlyZWN0aW9uQ29tcG9uZW50O1xyXG4gICAgRWxlbWVudHM6IEVsZW1lbnRzQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudDtcclxuICAgIFNsaWRlczogU2xpZGVzQ29tcG9uZW50O1xyXG4gICAgTGF5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ291dDogTGF5b3V0Q29tcG9uZW50O1xyXG4gICAgQ2xvbmVzOiBDbG9uZXNDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250O1xyXG4gICAgTW92ZTogTW92ZUNvbXBvbmVudDtcclxuICAgIENvbnRyb2xsZXI6IEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb250cm9sbGVyQ29tcG9uZW50O1xyXG4gICAgQXJyb3dzOiBBcnJvd3NDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgQXV0b3BsYXk6IEF1dG9wbGF5Q29tcG9uZW50O1xyXG4gICAgQ292ZXI6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb3ZlckNvbXBvbmVudDtcclxuICAgIFNjcm9sbDogU2Nyb2xsQ29tcG9uZW50O1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIERyYWc6IERyYWdDb21wb25lbnQ7XHJcbiAgICBLZXlib2FyZDogS2V5Ym9hcmRDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50O1xyXG4gICAgTGF6eUxvYWQ6IExhenlMb2FkQ29tcG9uZW50O1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFBhZ2luYXRpb246IFBhZ2luYXRpb25Db21wb25lbnQ7XHJcbiAgICBTeW5jOiBTeW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY0NvbXBvbmVudDtcclxuICAgIFdoZWVsOiBXaGVlbENvbXBvbmVudDtcclxuICAgIExpdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBMaXZlQ29tcG9uZW50O1xyXG4gICAgVHJhbnNpdGlvbjogVHJhbnNpdGlvbkNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIGFsbCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJuYWwgZXZlbnRzLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmluJwogICAgICAgICAgICAgICAgICAgICAgICBiInRlcmZhY2UgRXZlbnRNYXAge1xyXG4gICAgJ21vdW50ZWQnOiAoKSA9PiB2b2lkO1xyXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICdyZWFkeSc6ICgpID0+IHZvaWQ7XHJcbiAgICAnY2xpY2snOiAoU2xpZGU6IFMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGlkZUNvbXBvbmVudCwgZTogTW91c2VFdmVudCkgPT4gdm9pZDtcclxuICAgICdtb3YiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSc6IChpbmRleDogbnVtYmVyLCBwcmV2OiBudW1iZXIsIGRlc3Q6IG51bWJlcikgPT4gdiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvaWQ7XHJcbiAgICAnbW92ZWQnOiAoaW5kZXg6IG51bWJlciwgcHJldjogbnVtYmVyLCIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgZGVzdDogbnVtYmVyKSA9PiB2b2lkO1xyXG4gICAgJ2FjdGl2ZSc6IChTbGlkZTogUyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG4gICAgJ2luYWN0aXZlJzogKFNsaWRlOiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgU2xpZGVDb21wb25lbnQpID0+IHZvaWQ7XHJcbiAgICAndmlzaWJsZSc6IChTbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiI6IFNsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG4gICAgJ2hpZGRlbic6IChTbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiI6IFNsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG4gICAgJ3JlZnJlc2gnOiAoKSA9PiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgdm9pZDtcclxuICAgICd1cGRhdGVkJzogKG9wdGlvbnM6IE9wdGlvbnMpID0+IHZvaSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJkO1xyXG4gICAgJ3Jlc2l6ZSc6ICgpID0+IHZvaWQ7XHJcbiAgICAncmVzaXplZCc6ICgpIgogICAgICAgICAgICAgICAgICAgICAgICBiIiA9PiB2b2lkO1xyXG4gICAgJ2RyYWcnOiAoKSA9PiB2b2lkO1xyXG4gICAgJ2RyYWdnaW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZyc6ICgpID0+IHZvaWQ7XHJcbiAgICAnZHJhZ2dlZCc6ICgpID0+IHZvaWQ7XHJcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ3Njcm9sbCc6ICgpID0+IHZvaWQ7XHJcbiAgICAnc2Nyb2xsZWQnOiAoKSA9PiB2byIKICAgICAgICAgICAgICAgICAgICAgICAgYiJpZDtcclxuICAgICdvdmVyZmxvdyc6IChvdmVyZmxvdzogYm9vbGVhbikgPT4gdm9pZCIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XHJcbiAgICAnZGVzdHJveSc6ICgpID0+IHZvaWQ7XHJcbiAgICAnYXJyb3dzOm1vdW50IgogICAgICAgICAgICAgICAgICAgICAgICBiImVkJzogKHByZXY6IEhUTUxCdXR0b25FbGVtZW50LCBuZXh0OiBIVE1MQnV0dG9uRWxlbWUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnQpID0+IHZvaWQ7XHJcbiAgICAnYXJyb3dzOnVwZGF0ZWQnOiAocHJldjogSFRNTEIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXR0b25FbGVtZW50LCBuZXh0OiBIVE1MQnV0dG9uRWxlbWVudCwgcHJldkluZGV4OiBudScKICAgICAgICAgICAgICAgICAgICAgICAgYiJtYmVyLCBuZXh0SW5kZXg6IG51bWJlcikgPT4gdm9pZDtcclxuICAgICdwYWdpbmF0aSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbjptb3VudGVkJzogKGRhdGE6IFBhZ2luYXRpb25EYXRhLCBpdGVtOiBQYWdpbmF0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBiIkl0ZW0pID0+IHZvaWQ7XHJcbiAgICAncGFnaW5hdGlvbjp1cGRhdGVkJzogKGRhdGE6IgogICAgICAgICAgICAgICAgICAgICAgICBiJyBQYWdpbmF0aW9uRGF0YSwgcHJldjogUGFnaW5hdGlvbkl0ZW0sIGN1cnI6IFBhZ2luYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW9uSXRlbSkgPT4gdm9pZDtcclxuICAgICduYXZpZ2F0aW9uOm1vdW50ZWQnOiAoc3AiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGlkZXM6IFNwbGlkZVtdKSA9PiB2b2lkO1xyXG4gICAgJ2F1dG9wbGF5OnBsYXknOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCkgPT4gdm9pZDtcclxuICAgICdhdXRvcGxheTpwbGF5aW5nJzogKHJhdGU6IG51bWIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXIpID0+IHZvaWQ7XHJcbiAgICAnYXV0b3BsYXk6cGF1c2UnOiAoKSA9PiB2b2lkO1xyIgogICAgICAgICAgICAgICAgICAgICAgICBiIlxuICAgICdsYXp5bG9hZDpsb2FkZWQnOiAoaW1nOiBIVE1MSW1hZ2VFbGVtZW50LCBTbGlkIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IFNsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG59XG5cbi8qKlxyXG4gKiBDYXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgVCB0byBVLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmRlY2xhcmUgdHknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGUgQ2FzdDxULCBVPiA9IFQgZXh0ZW5kcyBVID8gVCA6IFU7XHJcbi8qKlxyXG4gKiBNYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrZXMgdGhlIFQgZWFzeSB0byByZWFkLlxyXG4gKi9cclxuZGVjbGFyZSB0eXBlIFJlc29sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlPFQ+ID0ge1xyXG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS107XHJcbn0gJiB1bmtub3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcclxuLyoqXHJcbiAqIFB1c2hlcyBVIHRvIHR1cGxlIFQuXHJcbiAqXHJcbiAqIEBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJuYWxcclxuICovXHJcbmRlY2xhcmUgdHlwZSBQdXNoPFQgZXh0ZW5kcyBhbnlbXSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1UgPSBhbnk+ID0gWy4uLlQsIFVdO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgZmlyc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHR5cGUgb2YgdGhlIHR1cGxlLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWNsYXJlIHR5cGUgSGVhZDxUIGV4dGVuZHMgYW55W10+ID0gKCguLi5hcmdzOiBUKSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJz4gYW55KSBleHRlbmRzIChhcmc6IGluZmVyIEEsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gQSA6IG5ldmVyO1xyXG4vKipcclxuICogUmVtb3ZlcyB0aGUgZmlyc3QgdHlwZSBmcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbSB0aGUgdHVwbGUgVC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSB0eXBlIFNoaWZ0PFQgZXh0ZW5kcyBhbnlbXT4gPSAoKC4uLmFyZ3M6IFQpID0+IGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnkpIGV4dGVuZHMgKGFyZzogYW55LCAuLi5hcmdzOiBpbmZlciBBKSA9PiBhbnkgPyBBICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IG5ldmVyO1xyXG4vKipcclxuICogUmVtb3ZlcyB0aGUgTiB0eXBlcyBmcm9tIHRoZSB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VwbGUgVC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5kZWNsYXJlIHR5cGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNoaWZ0TjxUIGV4dGVuZHMgYW55W10sIE4gZXh0ZW5kcyBudW1iZXIsIEMgZXh0ZW5kcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgYW55W10gPSBbXT4gPSB7XHJcbiAgICAwOiBUO1xyXG4gICAgMTogU2hpZnROPFNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiIjxUPiwgTiwgUHVzaDxDPj47XHJcbn1bQ1snbGVuZ3RoJ10gZXh0ZW5kcyBOID8gMCA6IgogICAgICAgICAgICAgICAgICAgICAgICBiJyAxXSBleHRlbmRzIGluZmVyIEEgPyBDYXN0PEEsIGFueVtdPiA6IG5ldmVyO1xuXG4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBTbGlkZXMgY29tcG9uZW50LlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgU2xpZGVzQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgdXBkYXRlKCk6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkO1xyXG4gICAgcmVnaXN0ZXIoc2xpZGU6IEhUTUxFbGVtZW50LCBpbmRleDogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciwgc2xpZGVJbmRleDogbnVtYmVyKTogdm9pZDtcclxuICAgIGdldChleGNsdWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUNsb25lcz86IGJvb2xlYW4pOiBTbGlkZUNvbXBvbmVudFtdO1xyXG4gICAgZ2V0SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHBhZ2U6IG51bWJlcik6IFNsaWRlQ29tcG9uZW50W107XHJcbiAgICBnZXRBdChpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXg6IG51bWJlcik6IFNsaWRlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZChzbGlkZTogc3RyaW5nIHwgRWxlbWVudCB8IEFycmF5PHN0cmluZyB8IEVsZW1lbnQ+LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXg/OiBudW1iZXIpOiB2b2lkO1xyXG4gICAgcmVtb3ZlKHNlbGVjdG9yOiBTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVNYXRjaGVyKTogdm9pZDtcclxuICAgIGZvckVhY2goaXRlcmF0ZWU6IFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYidJdGVyYXRlZSwgZXhjbHVkZUNsb25lcz86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihtYXRjaGVyOiBTbGlkZU1hdGNoZXIpOiBTbGlkZUNvbXBvbmVudFtdO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHN0eWxlKHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciwgdXNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbnRhaW5lcj86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgZ2V0TGVuZ3RoKGV4Y2x1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlQ2xvbmVzPzogYm9vbGVhbik6IG51bWJlcjtcclxuICAgIGlzRW5vdWdoKCk6IGJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29sZWFuO1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgaXRlcmF0ZWUgZnVuY3Rpb24gZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZXMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlwZSBTbGlkZXNJdGVyYXRlZSA9IChTbGlkZTogU2xpZGVDb21wb25lbnQsIGluZGV4OicKICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyLCBTbGlkZXM6IFNsaWRlQ29tcG9uZW50W10pID0+IHZvaWQ7XHJcbi8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICogVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBmb3IgU2xpZGVzLlxyXG4gKlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5kZWNsYXJlIHR5cGUgU2xpZGVzUHJlZGljJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSA9IChTbGlkZTogU2xpZGVDb21wb25lbnQsIGluZGV4OiBudW1iZXIsIFNsaWRlczonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlQ29tcG9uZW50W10pID0+IGFueTtcclxuLyoqXHJcbiAqIFRoZSB0eXBlIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZmlsdGVyaW5nIFNsaWRlQ29tcG9uZW50IG9iamVjdHMuXHJcbiAqXHJcbiAqIEBzaW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgdHlwZSBTbGlkZU1hdGNoZXIgPSBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgbnVtYmVyW10gfCBzdHJpbmcgfCBTbGlkZXNQcmVkaWNhdGU7XG5cbi8qKlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIHR5cGUgZm9yIGFuIEV2ZW50VGFyZ2V0IG9yIGFuIGFycmF5IHdpdGggRXZlbnRUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0IG9iamVjdHMuXHJcbiAqXHJcbiAqIEBzaW5jZSA0LjAuMFxyXG4gKi9cclxuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhcmUgdHlwZSBFdmVudFRhcmdldHMgPSBFdmVudFRhcmdldCB8IEV2ZW50VGFyZ2V0WycKICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEV2ZW50QmluZGVyIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEJpbmRlck9iamVjdCB7XHJcbiAgICBiaW5kKHRhcmdldDogRXZlbnRUYXJnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZDtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmJpbmQodGFyZ2V0OiBFdmVudFRhcmdldCB8IEV2ZW50VGFyZ2V0W10sIGV2ZW50czogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjaz86IEFueUZ1bmN0aW9uKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICBkaXNwYXRjaDxUPih0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudDogcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZywgZGV0YWlsPzogVCk6IHZvaWQ7XHJcbiAgICBkZXN0cm95KCk6IHZvaWQ7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XHJcbi8qKlxyXG4gKiBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gcHJvdmlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWV0aG9kcyB0byBzdWJzY3JpYmUgbmF0aXZlIGV2ZW50cy5cclxuICpcclxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSA0LjAuMFxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHJldHVybiBBbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRXZlbnRCaW5kZXIgb2JqZWN0LlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBFdmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RCaW5kZXIoKTogRXZlbnRCaW5kZXJPYmplY3Q7XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZSBmb3IgdGhlIEV2ZW50SW50ZXJmYWNlIG9iamVjdC5cclxuICpcclxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEV2ZW50SW50ZXJmYWNlT2JqZWN0IGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIEV2ZW50QmluZGVyT2JqZWN0IHtcclxuICAgIG9uPEsgZXh0ZW5kcyBrZXlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgRXZlbnRNYXA+KGV2ZW50OiBLLCBjYWxsYmFjazogRXZlbnRNYXBbS10pOiB2b2lkO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIG9uKGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24pOiB2b2lkO1xyXG4gICAgb2ZmPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50czogSyB8IEtbXSB8IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZDtcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oZXZlbnQ6IEssIC4uLmFyZ3M6IFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbWV0ZXJzPEV2ZW50TWFwW0tdPik6IHZvaWQ7XHJcbiAgICBlbWl0KGV2ZW50OiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XHJcbiAgICAvKiogQGludGVybmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCAqL1xyXG4gICAgYnVzOiBEb2N1bWVudEZyYWdtZW50O1xyXG59XHJcbi8qKlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgaW50ZXJmYWNlIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgaW50ZXJuYWwgYW5kIG5hdGl2ZSBldmVudHMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLjBcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSBTcGxpZGUgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSBTcGxpZGUgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEByZXR1cm4gQSBjb2xsZWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvZiBpbnRlcmZhY2UgZnVuY3Rpb25zLlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UoU3BsaWRlPzogU3BsaWRlKTogRXZlbnRJbnRlcmZhY2VPYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIHJldHVybmluZyB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2YgdGhlIFJlcXVlc3RJbnRlcnZhbC5cclxuICpcclxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxyXG4gKi9cclxuaW50ZXJmYWNlIFJlcXVlc3RJbnRlcnZhbEludGVyZmFjZSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgc3RhcnQocmVzdW1lPzogYm9vbGVhbik6IHZvaWQ7XHJcbiAgICBwYXVzZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZDtcclxuICAgIHJld2luZCgpOiB2b2lkO1xyXG4gICAgY2FuY2VsKCk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkO1xyXG4gICAgc2V0KGludGVydmFsOiBudW1iZXIpOiB2b2lkO1xyXG4gICAgaXNQYXVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKCk6IGJvb2xlYW47XHJcbn1cclxuLyoqXHJcbiAqIFJlcXVlc3RzIGludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBsaWtlIHRoZSBuYXRpdmUgYHNldEludGVydmFsKClgIHdpdGggdXNpbmcgYHJlcXVlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQW5pbWF0aW9uRnJhbWVgLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICpcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBpbnRlcnZhbCAgIC0gVGhlIGludGVydmFsIGR1cmF0aW9uIGluIG1pbGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlY29uZHMuXHJcbiAqIEBwYXJhbSBvbkludGVydmFsIC0gVGhlIGNhbGxiYWNrIGZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZCBvbiBldmVyeSBpbnRlcnZhbC5cclxuICogQHBhcmFtIG9uVXBkYXRlICAgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIENhbGxlZCBvbiBldmVyeSBhbmltYXRpb24gZnJhbWUsIHRha2luZyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb2dyZXNzIHJhdGUuXHJcbiAqIEBwYXJhbSBsaW1pdCAgICAgIC0gT3B0aW9uYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLiBMaW1pdHMgdGhlIG51bWJlciBvZiBpbnRlcnZhbC5cclxuICovXHJcbmRlY2xhcmUgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIFJlcXVlc3RJbnRlcnZhbChpbnRlcnZhbDogbnVtYmVyLCBvbkludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogKCkgPT4gdm9pZCwgb25VcGRhdGU/OiAocmF0ZTogbnVtYmVyKSA9PiB2b2lkLCBsaW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQ/OiBudW1iZXIpOiBSZXF1ZXN0SW50ZXJ2YWxJbnRlcmZhY2U7XG5cbi8qKlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGludGVyZmFjZSBmb3IgdGhlIFN0YXRlIG9iamVjdC5cclxuICpcclxuICogQHNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIFN0YXRlT2JqZWN0IHtcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXQoc3RhdGU6IG51bWJlcik6IHZvaWQ7XHJcbiAgICBpcyhzdGF0ZXM6IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgfCBudW1iZXJbXSk6IGJvb2xlYW47XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gcHJvdmlkaW5nIGEgc3VwZXIgc2ltcGxlIHN0YXRlIHN5c3RlbS5cclxuICpccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAqIEBwYXJhbSBpbml0aWFsU3RhdGUgLSBTcGVjaWZpZXMgdGhlIGluaXRpYWwgc3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBTdGF0ZShpbml0aWFsU3RhdGU6IG51JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21iZXIpOiBTdGF0ZU9iamVjdDtcblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgcmV0dXJuaW5nIHZhbHVlIG9mIHRoZSBSZXF1ZXN0SW50ZXJ2YWwuXHJcbiAqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBUaHJvdHRsZUluc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzxGIGV4dGVuZHMgQW55RnVuY3Rpb24+IGV4dGVuZHMgRnVuY3Rpb24ge1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyguLi5hcmdzOiBQYXJhbWV0ZXJzPEY+KTogdm9pZDtcclxufVxyXG4vKipcclxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JldHVybnMgdGhlIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICpcclxuICogQHBhcmFtIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jICAgICAtIEEgZnVuY3Rpb24gdG8gdGhyb3R0bGUuXHJcbiAqIEBwYXJhbSBkdXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24gLSBPcHRpb25hbC4gVGhyb3R0bGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICpcclxuICogQHJldHVybiBBIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICovXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5kZWNsYXJlIGZ1bmN0aW9uIFRocm90dGxlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmM6IEYsIGR1cmF0aW9uPzogbnVtYmVyKTogVGhyb3R0bGVJbnN0YW5jZTxGPjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbi8qKlxyXG4gKiBUaGUgZnJvbnRlbmQgY2xhc3MgZm9yIHRoZSBTcGxpZGUgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5kZWNsYXJlIGNsYXNzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBkZWZhdWx0IG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zIGZvciBhbGwgU3BsaWRlIGluc3RhbmNlcy5cclxuICAgICAqL1xyXG4gICAgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpYyBkZWZhdWx0czogT3B0aW9ucztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0aW9uIG9mIHN0YXRlIG51bWJlcnMuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VhZG9ubHkgU1RBVEVTOiB7XHJcbiAgICAgICAgQ1JFQVRFRDogbnVtYmVyO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBNT1VOVEVEOiBudW1iZXI7XHJcbiAgICAgICAgSURMRTogbnVtYmVyO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBNT1ZJTkc6IG51bWJlcjtcclxuICAgICAgICBTQ1JPTExJTkc6IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICAgICAgRFJBR0dJTkc6IG51bWJlcjtcclxuICAgICAgICBERVNUUk9ZRUQ6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XHJcbiAgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgcm9vdCBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudCB3aGVyZSB0aGUgU3BsaWRlIGlzIGFwcGxpZWQuXHJcbiAgICAgKi9cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZWFkb25seSByb290OiBIVE1MRWxlbWVudDtcclxuICAgIC8qKlxyXG4gICAgICogVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBFdmVudEJ1c09iamVjdCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlYWRvbmx5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBldmVudDogRXZlbnRJbnRlcmZhY2VPYmplY3Q7XHJcbiAgICAvKipcclxuICAgICAqIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgY29sbGVjdGlvbiBvZiBhbGwgY29tcG9uZW50IG9iamVjdHMuXHJcbiAgICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICByZWFkb25seSBDb21wb25lbnRzOiBDb21wb25lbnRzO1xyXG4gICAgLyoqXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogVGhlIFN0YXRlT2JqZWN0IG9iamVjdC5cclxuICAgICAqL1xyXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRvbmx5IHN0YXRlOiBTdGF0ZU9iamVjdDtcclxuICAgIC8qKlxyXG4gICAgICogQW4gYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5IHdpdGggU3luY1RhcmdldCBvYmplY3RzIGZvciBzcGxpZGUgaW5zdGFuY2VzIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzeW5jIHdpdGguXHJcbiAgICAgKi9cclxuICAgIHJlYWRvbmx5IHNwbGlkZXM6IFN5bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGFyZ2V0W107XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IG9wdGlvbnMuXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vO1xyXG4gICAgLyoqXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgYWxsIGNvbXBvbmVudHMuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbiAgICBwcml2YXRlIF9DO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3Rpb24gb2YgZXh0ZW5zaW9ucy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfRTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX1Q7XHJcbiAgICAvKipcclxuICAgICAqIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgU3BsaWRlIGNvbnN0cnVjdG9yLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0ICAtIFRoZSBzZWxlY3RvciBmb3IgdGhlIHRhcmdldCBlbGVtZW50LCBvciB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZW1lbnQgaXRzZWxmLlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wuIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rvcih0YXJnZXQ6IHN0cmluZyB8IEhUTUxFbGVtZW50LCBvcHRpb25zPzogT3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgaW5zdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBFeHRlbnNpb25zIC0gT3B0aW9uYWwuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbiBvYmplY3Qgd2l0aCBleHRlbnNpb25zLlxyXG4gICAgICogQHBhcmFtIFRyYW5zaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIC0gT3B0aW9uYWwuIEEgVHJhbnNpdGlvbiBjb21wb25lbnQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIG1vdW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFeHRlbnNpb25zPzogUmVjb3JkPHN0cmluZywgQ29tcG9uZW50Q29uc3RydWN0b3I+LCBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbnNpdGlvbj86IENvbXBvbmVudENvbnN0cnVjdG9yKTogdGhpcztcclxuICAgIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIFN5bmNzIHRoZSBzbGlkZXIgd2l0aCB0aGUgcHJvdmlkZWQgb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Btb3VudCgpYC5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2BgYHRzXHJcbiAgICAgKiB2YXIgcHJpbWFyeSAgID0gbmV3IFNwbGlkZSgpO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIHZhciBzZWNvbmRhcnkgPSBuZXcgU3BsaWRlKCk7XHJcbiAgICAgKlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIHByaW1hcnkuc3luYyggc2Vjb25kYXJ5ICk7XHJcbiAgICAgKiBwcmltYXJ5Lm1vdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpO1xyXG4gICAgICogc2Vjb25kYXJ5Lm1vdW50KCk7XHJcbiAgICAgKiBgYGAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNwbGlkZSAtIEEgU3BsaWRlIGluc3RhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSB0byBzeW5jIHdpdGguXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdGhpc2BccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIHN5bmMoc3BsaWRlOiBTcGxpZGUpOiB0aGlzO1xyXG4gICAgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxyXG4gICAgICogTW92ZXMgdGhlIHNsaWRlciB3aXRoIHRoZSBmb2xsb3dpbmcgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRyb2wgcGF0dGVybi5cclxuICAgICAqXHJcbiAgICAgKiB8IFBhdHRlcm4gfCBEZXNjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpcHRpb24gfFxyXG4gICAgICogfC0tLXwtLS18XHJcbiAgICAgKiB8IGBpYCB8IEdvZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRvIHRoZSBzbGlkZSBgaWAgfFxyXG4gICAgICogfCBgJyske2l9J2AgfCBJbmNyZW0iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZW50cyB0aGUgc2xpZGUgaW5kZXggYnkgYGlgIHxcclxuICAgICAqIHwgYCctJHtpfSciCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCB8IERlY3JlbWVudHMgdGhlIHNsaWRlIGluZGV4IGJ5IGBpYCB8XHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIifCBgJz4nYCB8IEdvZXMgdG8gdGhlIG5leHQgcGFnZSB8XHJcbiAgICAgKiB8IGAnPCciCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCB8IEdvZXMgdG8gdGhlIHByZXZpb3VzIHBhZ2UgfFxyXG4gICAgICogfCBgPiR7aX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCB8IEdvZXMgdG8gdGhlIHBhZ2UgYGlgIHxcclxuICAgICAqXHJcbiAgICAgKiBJbiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJzdCBjYXNlcywgYCc+J2AgYW5kIGAnPCdgIG5vdGF0aW9ucyBhcmUgZW5vdWdoIHRvIGNvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sIHRoZSBzbGlkZXJcclxuICAgICAqIGJlY2F1c2UgdGhleSByZXNwZWN0IGBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyUGFnZWAgYW5kIGBwZXJNb3ZlYCBvcHRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXhhbXBsZVxyXG4gICAgICogYGBgdHNcclxuICAgICAqIHZhciBzcGxpZGUgPSBuZXcgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZSgpO1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMgdG8gdGhlIHNsaWRlIDE6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogc3BsaWRlLmdvKCAxICk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gJwogICAgICAgICAgICAgICAgICAgICAgICBiIkluY3JlbWVudHMgdGhlIGluZGV4OlxyXG4gICAgICogc3BsaWRlLmdvKCAnKzInICk7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMgdG8gdGhlIG5leHQgcGFnZTpcclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgKiBzcGxpZGUuZ28oICc+JyApO1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRvIHRoZSBwYWdlIDI6XHJcbiAgICAgKiBzcGxpZGUuZ28oICc+MicgKTtcclxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udHJvbCAtIEEgY29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wgcGF0dGVybi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0aGlzYFxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqL1xyXG4gICAgZ28oY29udHJvbDogbnVtYmVyIHwgc3RyaW5nKTogdGhpcztccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyLlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHNcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgpO1xyXG4gICAgICpcclxuICAgICAqIC8vIExpJwogICAgICAgICAgICAgICAgICAgICAgICBiInN0ZW5zIHRvIGEgc2luZ2xlIGV2ZW50OlxyXG4gICAgICogc3BsaWRlLm9uKCAnbW92IgogICAgICAgICAgICAgICAgICAgICAgICBiImUnLCBmdW5jdGlvbigpIHt9ICk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gTGlzdGVucyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidG8gbXVsdGlwbGUgZXZlbnRzOlxyXG4gICAgICogc3BsaWRlLm9uKCAnbW92ZSByZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaXplJywgZnVuY3Rpb24oKSB7fSApO1xyXG4gICAgICpcclxuICAgICAqIC8vIEFwcGVuZCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzIGEgbmFtZXNwYWNlOlxyXG4gICAgICogc3BsaWRlLm9uKCAnbW92ZS5teU5hbWVzcCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhY2UgcmVzaXplLm15TmFtZXNwYWNlJywgZnVuY3Rpb24oKSB7fSApO1xyXG4gICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicqIGBgYFxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBuYW1lIG9yIG5hbWVzIHNlcGFyYXRlZCBieSBzcGFjZXMuIFVzZSBhIGRvdCguKSB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwZW5kIGEgbmFtZXNwYWNlLlxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIC0gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2sgZnVuY3Rpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidgXHJcbiAgICAgKi9cclxuICAgIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250czogSywgY2FsbGJhY2s6IEV2ZW50TWFwW0tdKTogdGhpcztcclxuICAgIG9uKGV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjazogQW55RnVuY3Rpb24pOiB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncztcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyB0aGUgcmVnaXN0ZXJlZCBhbGwgaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbmRsZXJzIGZvciB0aGUgc3BlY2lmaWVkIGV2ZW50IG9yIGV2ZW50cy5cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBJZiB5b3Ugd2FudCB0byBvbmx5IHJlbW92ZSBhIHBhcnRpY3VsYXIgaGFuZGxlciwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzZSBuYW1lc3BhY2UgdG8gaWRlbnRpZnkgaXQuXHJcbiAgICAgKlxyXG4gICAgICogQGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGFtcGxlXHJcbiAgICAgKiBgYGB0c1xyXG4gICAgICogdmFyIHNwbGlkZSA9IG5ldyBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlKCk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gUmVtb3ZlcyBhbGwgaGFuZGxlcnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2lnbmVkIHRvICJtb3ZlIjpcclxuICAgICAqIHNwbGlkZS5vZmYoIFwnbW92ZVwnICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgICpcclxuICAgICAqIC8vIE9ubHkgcmVtb3ZlcyBoYW5kbGVycyB0aGF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidiZWxvbmcgdG8gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2U6XHJcbiAgICAgKiBzcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJlLm9mZiggJ21vdmUubXlOYW1lc3BhY2UnICk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQHBhcmFtIGV2ZW50cyAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcGFyYXRlZCBieSBzcGFjZXMuIFVzZSBhIGRvdCguKSB0byBhcHBlbmQgYSBuYW1lc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICBvZmY8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPihldmVudHM6IEsgfCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS1tdIHwgc3RyaW5nIHwgc3RyaW5nW10pOiB0aGlzO1xyXG4gICAgLyoqXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRW1pdHMgYW4gZXZlbnQgYW5kIHRyaWdnZXJzIHJlZ2lzdGVyZWQgaGFuZGxlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBldmVudCAtIEFuIGV2ZW50IG5hbWUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvIGVtaXQuXHJcbiAgICAgKiBAcGFyYW0gYXJncyAgLSBPcHRpb25hbC4gQW55IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgb2YgYXJndW1lbnRzIHRvIHBhc3MgdG8gaGFuZGxlcnMuXHJcbiAgICAgKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIGVtaXQ8SyBleHRlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBrZXlvZiBFdmVudE1hcD4oZXZlbnQ6IEssIC4uLmFyZ3M6IFBhcmFtZXRlcnM8RXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0TWFwW0tdPik6IHRoaXM7XHJcbiAgICBlbWl0KGV2ZW50OiBzdHJpbmcsIC4uLmFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidzOiBhbnlbXSk6IHRoaXM7XHJcbiAgICAvKipcclxuICAgICAqIEluc2VydHMgYSBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW1wbGVcclxuICAgICAqIGBgYHRzXHJcbiAgICAgKiB2YXIgc3BsaWRlID0gbmV3IFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUoKTtcclxuICAgICAqIHNwbGlkZS5tb3VudCgpO1xyXG4gICAgICpcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiAvLyBBZGRzIHRoZSBzbGlkZSBieSB0aGUgSFRNTDpcclxuICAgICAqIHNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYiIuYWRkKCAnPGxpPjwvbGk+ICk7XHJcbiAgICAgKlxyXG4gICAgICogLy8gb3IgYWRkcyB0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGVsZW1lbnQ6XHJcbiAgICAgKiBzcGxpZGUuYWRkKCBkb2N1bWVudC5jcmVhdGVFJwogICAgICAgICAgICAgICAgICAgICAgICBiImxlbWVudCggJ2xpJyApICk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIHNsaWRlcyAtIEEgc2xpZGUgZWxlbWVudCwgYW4gSFRNTCBzdHJpbmcgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXQgcmVwcmVzZW50cyBhIHNsaWRlLCBvciBhbiBhcnJheSB3aXRoIHRoZW0uXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogQHBhcmFtIGluZGV4ICAtIE9wdGlvbmFsLiBBbiBpbmRleCB0byBpbnNlcnQgYScKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGUgYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdGhpc2BcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKi9cclxuICAgIGFkZChzbGlkZXM6IHN0cmluZyB8IEhUTUxFbGVtZW50IHwgQScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5PHN0cmluZyB8IEhUTUxFbGVtZW50PiwgaW5kZXg/OiBudW1iZXIpOiB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncztcclxuICAgIC8qKlxyXG4gICAgICogUmVtb3ZlcyBzbGlkZXMgdGhhdCBtYXRjaCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIG1hdGNoZXJcclxuICAgICAqIHRoYXQgY2FuIGJlIGFuIGluZGV4LCBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG9yLCBvciBhbiBpdGVyYXRlZSBmdW5jdGlvbi5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG1hdGNoZXIgLSBBbiBpbmRleCwgYW4gYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmF5IHdpdGggaW5kaWNlcywgYSBzZWxlY3RvciBzdHJpbmcsIG9yIGFuIGl0ZXJhdGVlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbi5cclxuICAgICAqL1xyXG4gICAgcmVtb3ZlKG1hdGNoZXI6IFNsaWRlTWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXIpOiB0aGlzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgdGhlIHNsaWRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlwZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdHlwZSAtIEEgdHlwZSB0byB0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgdHlwZSBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hlcyB0aGUgY3VycmVudCBvbmUsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqL1xyXG4gICAgaXModHlwZTogc3RyaW5nKTogYm9vbGVhbjtcclxuICAgIC8qKlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAqIFJlZnJlc2hlcyB0aGUgc2xpZGVyLlxyXG4gICAgICpcclxuICAgICAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGB0aGlzYFxyXG4gICAgICovXHJcbiAgICByZWZyZXNoKCk6IHRoaXM7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBEZXN0cm95cyB0aGUgc2xpZGVyLlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAgICAgKiBAcGFyYW0gY29tcGxldGVseSAtIE9wdGlvbmFsLiBJZiBgdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidgLCBTcGxpZGUgd2lsbCBub3QgcmVtb3VudCB0aGUgc2xpZGVyIGJ5IGJyZWFrcG9pbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0aGlzYFxyXG4gICAgICovXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZGVzdHJveShjb21wbGV0ZWx5PzogYm9vbGVhbik6IHRoaXM7XHJcbiAgICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKiBSZXR1cm5zIG9wdGlvbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gQW4gb2JqZWN0IHdpdGggdGhlIGxhdGVzdCBvcHRpb25zLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInL1xyXG4gICAgZ2V0IG9wdGlvbnMoKTogT3B0aW9ucztcclxuICAgIC8qKlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIE1lcmdlcyBvcHRpb25zIHRvIHRoZSBjdXJyZW50IG9wdGlvbnMgYW5kIGVtaXRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgdXBkYXRlZGAgZXZlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0gQW4gb2JqZWN0IHdpdGggbmV3IG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucyhvcHRpb25zOiBPcHRpb25zKTtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybnMgdGhlIG51bWJlciBvZiBzbGlkZXMgd2l0aG91dCBjbG9uZXMuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEByZXR1cm4gVGhlIG51bWJlciBvZiBzbGlkZXMuXHJcbiAgICAgKi9ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBnZXQgbGVuZ3RoKCk6IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybnMgdGhlIGFjdGl2ZSBzbGlkZSBpbmRleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBUaGUgYWN0aXZlIHNsaWRlIGluZGV4LlxyXG4gICAgICovXHJcbiAgICBnZXQgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4KCk6IG51bWJlcjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBjb250ZW50IG9mIGVhY2ggc2xpZGUuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICovXHJcbmludGVyZmFjZSBTbGlkZUNvbnRlbnQge1xyXG4gICAgLyoqXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogVGhlIEhUTUwgb3IgdGV4dCBmb3IgZWFjaCBzbGlkZS5cclxuICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGh0bWw/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb2xsZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvZiBzdHlsZXMuIFRoZXkgd2lsbCByZW1haW4gYWZ0ZXIgU3BsaWRlIGlzIGFwcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkLlxyXG4gICAgICovXHJcbiAgICBzdHlsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgbnVtYmVyPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZXMuIFRoZXkgd2lsbCByZW1haW4gYWZ0ZXIgU3BsaWRlIGlzIGFwcGxpZWQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICovXHJcbiAgICBhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIgfCBib29sZWFuPjtcclxufVxyXG4vKipcclxuICogVGhlIGludGVyZmFjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yIHRoZSBjb25maWcgb2YgdGhlIHJlbmRlcmVyLlxyXG4gKlxyXG4gKiBAc2luY2UgMycKICAgICAgICAgICAgICAgICAgICAgICAgYicuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgUmVuZGVyZXJDb25maWcge1xyXG4gICAgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxyXG4gICAgICogVGhlIHNsaWRlciBJRC5cclxuICAgICAqL1xyXG4gICAgaWQ/OicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWRkaXRpb25hbCBjbGFzcyBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yIHRoZSByb290IGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHJvb3RDbGFzcz86IHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSB0YWcgdXNlZCBmb3IgdGhlIGxpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIGxpc3RUYWc/OiBzdHJpbmc7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLyoqXHJcbiAgICAgKiBUaGUgdGFnIHVzZWQgZm9yIGVhY2ggc2xpZGUuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBzbGlkZVRhZz86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIERldGVybWluZXMgd2hldGhlciB0byByZW5kZXIgYXJyb3dzIG9yIG5vdC5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKi9cclxuICAgIGFycm93cz86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBLZWVwcyB0aGUgc2xpZGVyIGhpZGRlbi5cclxuICAgICAqL1xyXG4gICAgaGlkZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gd3JhcCB0aGUgdHJhY2sgYnkgdGhlIHNsaWRlciBlbGVtZW50IG9yIG5vdC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKi9cclxuICAgIHNsaWRlcj86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBUaGUgYWRkaXRpb25hbCBIVE1MIHJlbmRlcmVkIGJlZm9yZSB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBiZWZvcmVTbGlkZXI/OiBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYWRkaXRpb25hbCBIVE1MIHJlbmRlcmVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhZnRlciB0aGUgc2xpZGVyIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIGFmdGVyU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlcj86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFkZGl0aW9uYWwgSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUTUwgcmVuZGVyZWQgYmVmb3JlIHRoZSB0cmFjayBlbGVtZW50LlxyXG4gICAgICovXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYmVmb3JlVHJhY2s/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkaXRpb25hbCBIVE1MIHJlbmRlcmVkIGFmdGVyIHRoZSB0cmFjayBlbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqL1xyXG4gICAgYWZ0ZXJUcmFjaz86IHN0cmluZztcclxufVxuXG4vKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAqIFRoZSBjbGFzcyB0byBnZW5lcmF0ZSBzdGF0aWMgSFRNTCBvZiB0aGUgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlciBmb3IgdGhlIGZpcnN0IHZpZXcuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBcclxuICovXHJcbmRlY2xhcmUgY2xhc3MgU3BsaWRlUmVuZGVyZXIge1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gICAgICogUmVtb3ZlcyBhIHN0eWxlIGVsZW1lbnQgYW5kIGNsb25lcy5ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNwbGlkZSAtIEEgU3BsaWRlIGluc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGNsZWFuKHNwbGlkZTogU3BsaWRlKTogdicKICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQ7XHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIHNsaWRlIGNvbnRlbnRzLlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50cztcclxuICAgIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIFN0b3JlcyBkYXRhIG9mIHNsaWRlcy5cclxuICAgICAqL1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHByaXZhdGUgcmVhZG9ubHkgc2xpZGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIERpcmVjdGlvbiBjb21wb25lbnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVhZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmx5IERpcmVjdGlvbjtcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgdGhlIFN0eWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBTdHlsZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM7XHJcbiAgICAvKipcclxuICAgICAqIEhvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkcyBvcHRpb25zIGZvciB0aGlzIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmF0ZSByZWFkb25seSBjb25maWc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIElELlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogQW4gYXJyYXkgd2l0aCBvcHRpb25zIGZvciBlYWNoIGJyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidha3BvaW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFrcG9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNwbGlkZVJlbmRlcmVyIGNvbnN0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rvci5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udGVudHMgLSBBbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBzbGlkZSBjb250ZW50cy4gRWFjaCBpdGVtIG11c3QgYmUgYW4gSFRNTCBvciBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwbGFpbiB0ZXh0LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW9uYWwuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZXIgb3B0aW9ucy5cclxuICAgICAqIEBwYXJhbSBjb25maWcgICAtIFN0YXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2MgZGVmYXVsdCBvcHRpb25zLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRzIC0gRGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F1bHQgb3B0aW9ucyBmb3IgdGhlIHNsaWRlci4gUGFzcyBgU3BsaWRlLmRlZmF1bHRzYCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgeW91IGFyZSB1c2luZyBpdC5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRlbnRzOiBzdHJpbmdbXSB8IFNsaWRlQ29udGVudFtdLCBvcHRpb25zPzogT3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MsIGNvbmZpZz86IFJlbmRlcmVyQ29uZmlnLCBkZWZhdWx0cz86IE9wdGlvbnMpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlLlxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbml0O1xyXG4gICAgLyoqXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgSW5pdGlhbGl6ZXMgc2xpZGVzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGluaXRTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJvb3QgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWdpc3RlclJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0U3R5bGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHRyYWNrIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVnaXN0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInVHJhY2tTdHlsZXM7XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBzdHlsZXMgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0aGUgbGlzdCBlbGVtZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rlckxpc3RTdHlsZXM7XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBzdHlsZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvciBzbGlkZXMgYW5kIGNsb25lcy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaXN0ZXJTbGlkZVN0eWxlcztcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGRzIG11bHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsZSBgdHJhbnNsYXRlWGAgZm9yIHRoZSBsaXN0IGVsZW1lbnQuXHJcbiAgICAgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaW50LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEEgc3RyaW5nIHdpdGggbXVsdGlwbGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYW5zbGF0ZSBmdW5jdGlvbnMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYnVpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVHJhbnNsYXRlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIG9mZnNldCBmb3IgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBsaXN0IGVsZW1lbnQuXHJcbiAgICAgKiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgZycKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHMgYmVjYXVzZSBpdCBjYW4gbm90IGJlIGNvbnZlcnRlZCBpbnRvIHBlcmNlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2ggYnJlYWtwb2ludC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBvZmZzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNzc09mZnNldENsb25lcztcclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAvKipcclxuICAgICAqIFJldHVybnMgb2Zmc2V0IGZvciBjZW50ZXJpbmcgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhY3RpdmUgc2xpZGUuXHJcbiAgICAgKlxyXG4gICAgICogTm90ZTpcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoIDEwMCUgKyBnYXAgKSAvIHBlclBhZ2UgLSBnYXBcclxuICAgICAqIDEwMCUgLyBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyUGFnZSArIGdhcCAvIHBlclBhZ2UgLSBnYXA7XHJcbiAgICAgKiA1MCUgLyBwZXJQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSArICggZ2FwIC8gcGVyUGFnZSAtIGdhcCApIC8gMjtcclxuICAgICAqXHJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gVGhlIG9mZnNldC5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cclxuICAgIHByaXZhdGUgY3NzT2Zmc2V0Q2VudGVyO1xyXG4gICAgLyoqXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogUmV0dXJucyBvZmZzZXQgZm9yIGdhcHMuXHJcbiAgICAgKlxyXG4gICAgICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaW50LlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgYXMgYGNhbGMoKWAuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICovXHJcbiAgICBwcml2YXRlIGNzc09mZnNldEdhcHM7XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBSZXNvbHZlcyB0aGUgcHJvcCBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0aW9uIGFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgY29udmVydHMgaXQgaW50byB0aGUgS2ViYWIgY2FzZS5cclxuICAgICAqXHJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIHByb3AgLSBBIHByb3BlcnR5IG5hbWUgdG8gcmVzb2x2ZS5cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxyXG4gICAgICogQHJldHVybiBBIHJlc29sdmVkIHByb3BlcnR5IG5hbWUgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBLZWJhYiBjYXNlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlc29sdmU7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHBhZGRpbmcgaW4gdGhlIENTUyBmb3JtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXHJcbiAgICAgKiBAcGFyYW0gcmlnaHQgICAtIERldGVybWluZXMgd2hldGhlciB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0IHBhZGRpbmcgcmlnaHQgb3IgbGVmdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBQYWRkaW5nIGluIHRoZSBDU1MgZm9ybWF0LlxyXG4gICAgICovXHJcbiAgICBwcmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmF0ZSBjc3NQYWRkaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGhlaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2YgdGhlIHRyYWNrIGVsZW1lbnQgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICogQHJldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICBwcml2YXRlIGNzc1RyYWNrSGVpZ2h0O1xyXG4gICAgLyoqXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogUmV0dXJucyBoZWlnaHQgcHJvdmlkZWQgdGhvdWdoIG9wdGlvbnMgaW4gdGhlIENTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MgZm9ybWF0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidybWF0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNzc0hlaWdodDtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcclxuICAgICAqIFJldHVybnMgd2lkdGggb2YgZWFjaCBzbGlkZSBpbiB0aGUgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFdpZHRoIGluIHRoZSBDU1MgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm1hdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjc3NTbGlkZVdpZHRoO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBoZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEhlaWdodCBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NTUyBmb3JtYXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3NzU2xpZGVIZWlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdpZHRoIG9yIGhlaWdodCBvZiBlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaCBzbGlkZSBpbiB0aGUgQ1NTIGZvcm1hdCwgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RpcmVjdGlvbi5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gV2lkdGggb3IgaGVpZ2h0IGluICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgQ1NTIGZvcm1hdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjc3NTbGlkZVNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3plO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBhc3BlY3RSYXRpbyB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgdG8gc2ltdWxhdGUgdGhlIGBoZWlnaHRSYXRpb2Agb3B0aW9uLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXHJcbiAgICAgKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqIEByZXR1cm4gYXNwZWN0UmF0aW8gaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICovXHJcbiAgICBwcml2YXRlIGNzc0FzcGVjdFJhdGlvO1xyXG4gICAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQnVpbGRzIHRoZSBjc3MgdmFsdWUgYnkgdGhlIHByb3ZpZGVkIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSBhbmQgdW5pdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBBIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZS5cclxuICAgICAqIEBwYXJhbSB1bml0ICAtIEEgQ1NTIHVuaXQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCB2YWx1ZSBmb3IgYSBDU1MgdmFsdWUuXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJ1aWxkQ3NzVmFsdWU7XHJcbiAgICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAgICAgKiBQYXJzZXMgdGhlIENTUyB2YWx1ZSBpbnRvIG51bWJlciBhbmQgdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduaXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0byBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fyc2UuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBBbiBvYmplY3Qgd2l0aCB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgYW5kIHVuaXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyc2VDc3NWYWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICAvKipcclxuICAgICAqIFBhcnNlcyBicmVha3BvaW50cyBhbmQgZ2VuZXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIG9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cclxuICAgICAqL1xyXG4gICAgcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXZhdGUgcGFyc2VCcmVha3BvaW50cztcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZiB0aGUgc2xpZGUgd2lkdGggaXMgZml4ZWQgb3Igbm90LlxyXG4gICAgICpcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpZGUgd2lkdGggaXMgZml4ZWQsIG9yIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc0ZpeGVkVycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZHRoO1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIHNsaWRlciB0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyBsb29wIG9yIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgdGhlIHNsaWRlciB0eXBlIGlzIGxvb3AsIG9yIG90aGVyd2lzZSBgZmFsc2VgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc0xvb3A7XHJcbiAgICAvKipcclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBDaGVja3MgaWYgdGhlIGFjdGl2ZSBzbGlkZSBzaG91bGQgYmUgY2VudGVyZWQgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyIG5vdC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIHNob3VsZCBiZSBjZW50ZXJlZCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBwcml2YXRlIGlzQ2VudGVyO1xyXG4gICAgLyoqXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQ2hlY2tzIGlmIHRoZSBkaXJlY3Rpb24gaXMgVFRCIG9yIG5vdC5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGRpcmVjdGlvbiBpcyBUVEIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvciBvdGhlcndpc2UgYGZhbHNlYC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpc1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ0aWNhbDtcclxuICAgIC8qKlxyXG4gICAgICogQnVpbGRzIGNsYXNzZXMgb2YgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb290IGVsZW1lbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBDbGFzc2VzIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIHJvb3QgZWxlbWVudCBhcyBhIHNpbmdsZSBzdHJpbmcuXHJcbiAgICAgKi9ccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBwcml2YXRlIGJ1aWxkQ2xhc3NlcztcclxuICAgIC8qKlxyXG4gICAgICogQ29udicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcnRzIHByb3ZpZGVkIGF0dHJpYnV0ZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICpcclxuICAgICAqIEBwYXJhbSBhdHRycyAtIEFuIG9iamVjdCB3aXRoIGF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaWJ1dGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJ1aWxkQXR0cnM7XHJcbiAgICAvKipccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKiBDb252ZXJ0cyBwcm92aWRlZCBzdHlsZXMgaW50byBhIHNpbmdsZSBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBzdHlsZXMgLSBBbiBvYmplY3Qgd2l0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ggc3R5bGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJ1aWxkU3R5bGVzO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogR2VuZXJhdGVzIEhUTUwgb2Ygc2xpZGVzIHdpdGggaW5zZXJ0aW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyBwcm92aWRlZCBjb250ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgSFRNTCBmb3IgYWxsIHNsaWRlcyBhbmQgY2xvbmVzLlxyXG4gICAgICovXHJcbiAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpdmF0ZSByZW5kZXJTbGlkZXM7XHJcbiAgICAvKipcclxuICAgICAqIEFkZCB0aGUgYGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrZ3JvdW5kYCBzdHlsZSBmb3IgdGhlIGNvdmVyIG1vZGUuXHJcbiAgICAgKlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSBjb250ZW50IC0gQSBzbGlkZSBjb250ZW50LlxyXG4gICAgICovXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcHJpdmF0ZSBjb3ZlcjtcclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbnRlbnRzIC0gQW4gYXJyYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5IHdpdGggU2xpZGVDb250ZW50IG9iamVjdHMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIGdlbmVyYXRlQ2xvbmVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyIG9mIGNsb25lcyB0byBnZW5lcmF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBBIG51bWJlciBvZiBjbG9uZXMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldENsb25lQ291bnQ7XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhcnJvd3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFuZCB0aGUgd3JhcHBlciBlbGVtZW50LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIFRoZSBIVE1MIGZvciBhcnJvd3MuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlckFycm93cztcclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGFuIGFycm93IEgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MLlxyXG4gICAgICogU29tZSBhdHRyaWJ1dGVzIGFyZSB0ZW1wb3JhcnksIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlIGNoYW5nZXMgdGhlbSBhZnRlciBtb3VudC5cclxuICAgICAqXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIHByZXYgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIEByZXR1cm4gVGhlIEhUTUwgZm9yIHRoZSBwcmV2IG9yIG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGFycm93LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbmRlckFycm93O1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgSFRNTCBvZiB0aGUgc2xpZGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBnZW5lcmF0ZWQgSFRNTC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKi9cclxuICAgIGh0bWwoKTogc3RyaW5nO1xyXG59XG5cbmRlY2xhcmUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IEVWRU5UX01PVU5URUQgPSAibW91bnRlZCI7XHJcbmRlY2xhcmUgY29uc3QgRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX1JFQURZID0gInJlYWR5IjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9NT1ZFICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJtb3ZlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9NT1ZFRCA9ICJtb3ZlZCI7XHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0NMSUNLID0gImNsaWNrIjtcclxuZGVjbGFyZSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgRVZFTlRfQUNUSVZFID0gImFjdGl2ZSI7XHJcbmRlY2xhcmUgY29uc3QgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0lOQUNUSVZFID0gImluYWN0aXZlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9WJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lTSUJMRSA9ICJ2aXNpYmxlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9ISURERU4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gImhpZGRlbiI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfUkVGUkVTSCA9ICJyZWZyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzaCI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfVVBEQVRFRCA9ICJ1cGRhdGVkIjtccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmRlY2xhcmUgY29uc3QgRVZFTlRfUkVTSVpFID0gInJlc2l6ZSI7XHJcbmRlY2xhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IEVWRU5UX1JFU0laRUQgPSAicmVzaXplZCI7XHJcbmRlY2xhcmUgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX0RSQUcgPSAiZHJhZyI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfRFJBR0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5HID0gImRyYWdnaW5nIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9EUkFHR0VEID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICJkcmFnZ2VkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9TQ1JPTEwgPSAic2Nyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfU0NST0xMRUQgPSAic2Nyb2xsZWQiO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZGVjbGFyZSBjb25zdCBFVkVOVF9PVkVSRkxPVyA9ICJvdmVyZmxvdyI7XHJcbmRlYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXJlIGNvbnN0IEVWRU5UX0RFU1RST1kgPSAiZGVzdHJveSI7XHJcbmRlY2xhcmUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IEVWRU5UX0FSUk9XU19NT1VOVEVEID0gImFycm93czptb3VudGVkIjtcclxuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY2xhcmUgY29uc3QgRVZFTlRfQVJST1dTX1VQREFURUQgPSAiYXJyb3dzOnVwZGF0ZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9QQUdJTkFUSU9OX01PVU5URUQgPSAicGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb246bW91bnRlZCI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfUEFHSU5BVElPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05fVVBEQVRFRCA9ICJwYWdpbmF0aW9uOnVwZGF0ZWQiO1xyXG5kZWNsYXJlIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQgPSAibmF2aWdhdGlvbjptb3VudGVkIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfQVVUT1BMQVlfUExBWSA9ICJhdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYic6cGxheSI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfQVVUT1BMQVlfUExBWUlORyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiciYXV0b3BsYXk6cGxheWluZyI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfQVVUT1BMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidZX1BBVVNFID0gImF1dG9wbGF5OnBhdXNlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfTEFaWUxPQURfTE9BREVEID0gImxhenlsb2FkOmxvYWRlZCI7XHJcbi8qKiBAaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidybmFsICovXHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfU0xJREVfS0VZRE9XTiA9ICJzaycKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX1NISUZURUQgPSAic2giO1xyXG5kZWNsYXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9ICJlaSI7XG5cbi8qKlxyXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWxsIGNsYXNzZXMgYXMgY29uc3RhbnRzLlxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfUk9PVCA9ICJzcGxpZGUiO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1RSQUNLOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX0xJU1Q6IHN0cmluZztcclxuZGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhcmUgY29uc3QgQ0xBU1NfU0xJREU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfQ0xPTkU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19DT05UQUlOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VSOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfQVJST1dTOiBzdHJpbmc7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX0FSUk9XOiBzdHJpbmc7XHJcbmRlY2xhcmUgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IENMQVNTX0FSUk9XX1BSRVY6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQVJST1dfTkVYVDogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1BBR0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkFUSU9OOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfUEFHSU5BVElPTl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUEFHRTogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1BST0dSRVNTOiBzdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1BST0dSRVNTX0JBUjogc3RyaW5nO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZGVjbGFyZSBjb25zdCBDTEFTU19UT0dHTEU6IHN0cmluZztcclxuZGVjbGFyZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgQ0xBU1NfVE9HR0xFX1BMQVk6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfVE9HR0xFX1BBVVNFOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfUycKICAgICAgICAgICAgICAgICAgICAgICAgYidQSU5ORVI6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19TUjogc3RyaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuZGVjbGFyZSBjb25zdCBDTEFTU19JTklUSUFMSVpFRDogc3RyaW5nO1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSBjb25zdCBDTEFTU19BQ1RJVkU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfUFJFVjogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX05FWFQ6IHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfVklTSUJMRTogc3RyaW5nO1xyXG5kZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFyZSBjb25zdCBDTEFTU19MT0FESU5HOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX0ZPQ1VTX0lOOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfT1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVJGTE9XOiBzdHJpbmc7XHJcbi8qKlxyXG4gKiBUaGUgYXJyYXkgd2l0aCBhbGwgc3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cyBjbGFzc2VzIGV4Y2VwdCBmb3IgYGlzLWluaXRpYWxpemVkYC5cclxuICpcclxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0BzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBTVEFUVVNfQ0xBU1NFUzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZ1tdO1xyXG4vKipcclxuICogVGhlIGNvbGxlY3Rpb24gb2YgY2xhc3NlcyBmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGVsZW1lbnRzIHRoYXQgU3BsaWRlIGR5bmFtaWNhbGx5IGNyZWF0ZXMuXHJcbiAqXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NFUycKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHtcclxuICAgIHNsaWRlOiBzdHJpbmc7XHJcbiAgICBjbG9uZTogc3RyaW5nO1xyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGFycm93czogc3RyaW5nO1xyXG4gICAgYXJyb3c6IHN0cmluZztcclxuICAgIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2OiBzdHJpbmc7XHJcbiAgICBuZXh0OiBzdHJpbmc7XHJcbiAgICBwYWdpbmF0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nO1xyXG4gICAgcGFnZTogc3RyaW5nO1xyXG4gICAgc3Bpbm5lcjogc3RyaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcclxufTtcblxuLyoqXHJcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGRlZmF1bHQgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMuXHJcbiAqIE5vdGUgdGhhdCB0aGlzIGNvbGxlY3Rpb24gZG9lcyBub3QgY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhaW4gYWxsIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlY2xhcmUgY29uc3QgREVGQVVMVFM6IE9wdGlvbnM7XG5cbi8qKlxyXG4gKiBFbnVtZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlcyBzbGlkZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxyXG4gKi9cclxuZGVjbGFyZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgTFRSID0gImx0ciI7XHJcbi8qKlxyXG4gKiBFbnVtZXJhdGVzIHNsaWRlcyBmcm9tJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByaWdodCB0byBsZWZ0LlxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBSVEwgPSAicnRsIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbi8qKlxyXG4gKiBFbnVtZXJhdGVzIHNsaWRlcyBpbiBhIGNvbC5cclxuICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWNsYXJlIGNvbnN0IFRUQiA9ICJ0dGIiO1xuXG4vKipcclxuICogVGhlIHR5cGUgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgcmVndWxhciBzbGlkZXIuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbmRlY2xhcmUgY29uc3QgU0xJREUgPSAic2xpZGUiO1xyXG4vKipcclxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSB0eXBlIGZvciB0aGUgY2Fyb3VzZWwgc2xpZGVyLlxyXG4gKlxyXG4gKiBAc2luY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDMuMC4wXHJcbiAqL1xyXG5kZWNsYXJlIGNvbnN0IExPT1AgPSAibG9vcCI7XHJcbi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcclxuICogVGhlIHR5cGUgZm9yIHRoZSBmYWRlIHNsaWRlciB0aGF0IGNhbiBub3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGhhdmUgbXVsdGlwbGUgc2xpZGVzIGluIGEgcGFnZS5cclxuICpcclxuICogQHNpbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYiczLjAuMFxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBGQURFID0gImZhZGUiO1xuXG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IHsgQW55RnVuY3Rpb24sIEFycm93c0NvbXBvbmVudCwgQXV0b3BsYXlDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBCYXNlQ29tcG9uZW50LCBDTEFTU0VTLCBDTEFTU19BQ1RJVkUsIENMQVNTX0FSUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVywgQ0xBU1NfQVJST1dTLCBDTEFTU19BUlJPV19ORVhULCBDTEFTU19BUlJPV19QUkVWLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfQ0xPTkUsIENMQVNTX0NPTlRBSU5FUiwgQ0xBU1NfRk9DVVNfSU4sIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19JTklUSUFMSVpFRCwgQ0xBU1NfTElTVCwgQ0xBU1NfTE9BRElORywgQ0xBU1NfTkVYVCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX09WRVJGTE9XLCBDTEFTU19QQUdJTkFUSU9OLCBDTEFTU19QQUdJTkFUSU9OXycKICAgICAgICAgICAgICAgICAgICAgICAgYidQQUdFLCBDTEFTU19QUkVWLCBDTEFTU19QUk9HUkVTUywgQ0xBU1NfUFJPR1JFU1NfQkFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgQ0xBU1NfUk9PVCwgQ0xBU1NfU0xJREUsIENMQVNTX1NQSU5ORVIsIENMQVNTX1NSLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfVE9HR0xFLCBDTEFTU19UT0dHTEVfUEFVU0UsIENMQVNTX1RPR0dMRV9QTEFZLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfVFJBQ0ssIENMQVNTX1ZJU0lCTEUsIENhc3QsIENsb25lc0NvbXBvbmVudCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudENvbnN0cnVjdG9yLCBDb21wb25lbnRzLCBDb250cm9sbGVyQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgQ292ZXJDb21wb25lbnQsIERFRkFVTFRTLCBEaXJlY3Rpb25Db21wb25lbnQsIERyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnQ29tcG9uZW50LCBFVkVOVF9BQ1RJVkUsIEVWRU5UX0FSUk9XU19NT1VOVEVELCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQVJST1dTX1VQREFURUQsIEVWRU5UX0FVVE9QTEFZX1BBVVNFLCBFVkVOVF9BVVRPUEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVlfUExBWSwgRVZFTlRfQVVUT1BMQVlfUExBWUlORywgRVZFTlRfQ0xJQ0ssIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgYidERVNUUk9ZLCBFVkVOVF9EUkFHLCBFVkVOVF9EUkFHR0VELCBFVkVOVF9EUkFHR0lORywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX0VORF9JTkRFWF9DSEFOR0VELCBFVkVOVF9ISURERU4sIEVWRU5UX0lOQUNUSVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSwgRVZFTlRfTEFaWUxPQURfTE9BREVELCBFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfTU9WRUQsIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgRVZFTlRfT1ZFUkZMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09XLCBFVkVOVF9QQUdJTkFUSU9OX01PVU5URUQsIEVWRU5UX1BBR0lOQVRJT05fVVBEQVQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIEVWRU5UX1JFQURZLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgYidSRVNJWkVELCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9TSElGVEVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgRVZFTlRfU0xJREVfS0VZRE9XTiwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfVklTSUJMRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVsZW1lbnRzQ29tcG9uZW50LCBFdmVudEJpbmRlciwgRXZlbnRCaW5kZXJPYmplY3QsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudEludGVyZmFjZSwgRXZlbnRJbnRlcmZhY2VPYmplY3QsIEV2ZW50TWFwLCBGQURFJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgSGVhZCwgS2V5Ym9hcmRDb21wb25lbnQsIExPT1AsIExUUiwgTGF5b3V0Q29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgTGF6eUxvYWRDb21wb25lbnQsIExpdmVDb21wb25lbnQsIE1lZGlhQ29tcG9uZW50LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgTW92ZUNvbXBvbmVudCwgT3B0aW9ucywgUGFnaW5hdGlvbkNvbXBvbmVudCwgUGFnaW5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25EYXRhLCBQYWdpbmF0aW9uSXRlbSwgUHVzaCwgUlRMLCBSZXF1ZXN0SW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBSZXF1ZXN0SW50ZXJ2YWxJbnRlcmZhY2UsIFJlc29sdmUsIFJlc3BvbnNpdmVPcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducywgU0xJREUsIFNUQVRVU19DTEFTU0VTLCBTY3JvbGxDb21wb25lbnQsIFNoaWZ0LCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpZnROLCBTbGlkZUNvbXBvbmVudCwgU2xpZGVzQ29tcG9uZW50LCBTcGxpZGUsIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVSZW5kZXJlciwgU3RhdGUsIFN0YXRlT2JqZWN0LCBTeW5jQ29tcG9uZW50LCBTeW5jVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgVFRCLCBUaHJvdHRsZSwgVGhyb3R0bGVJbnN0YW5jZSwgVHJhbnNpdGlvbkNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnQsIFdoZWVsQ29tcG9uZW50LCBTcGxpZGUgYXMgZGVmYXVsdCB9O1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L3R5cGVzL2luZGV4LmQudHMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicvKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIE1lZGlhIGNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXHJcbiAqXHJcbiAqIEBzaW5jZSA0LjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNZWRpYUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgLyoqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAaW50ZXJuYWwgKi9cclxuICAgIHJlZHVjZShyZWR1Y2VkOiBib29sZWFuKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICBzZXQob3B0aW9uczogT3B0aW9ucywgYmFzZT86IGJvb2xlYW4sIG5vdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZnk/OiBib29sZWFuKTogdm9pZDtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UgZm9yIHRoZSBEaXJlY3Rpb24gY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgRGlyZWN0aW9uQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgcmVzb2x2ZShwcm9wOiBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5nLCBheGlzT25seT86IGJvb2xlYW4sIGRpcmVjdGlvbj86IE9wdGlvbnNbJ2RpciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlY3Rpb24nXSk6IHN0cmluZztcclxuICAgIG9yaWVudCh2YWx1ZTogbnVtYmVyKTogbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlcjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgZWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHdoaWNoIHRoZSBzbGlkZXIgY29uc2lzdHMgb2YuXHJcbiAqXHJcbiAqIEBzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBFbGVtZW50Q29sbGVjdGlvbiB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgcm9vdDogSFRNTEVsZW1lbnQ7XHJcbiAgICB0cmFjazogSFRNTEVsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50O1xyXG4gICAgbGlzdDogSFRNTEVsZW1lbnQ7XHJcbiAgICBzbGlkZXM6IEgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MRWxlbWVudFtdO1xyXG4gICAgYXJyb3dzPzogSFRNTEVsZW1lbnQ7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGFnaW5hdGlvbj86IEhUTUxVTGlzdEVsZW1lbnQ7XHJcbiAgICBwcmV2PzogSFRNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xCdXR0b25FbGVtZW50O1xyXG4gICAgbmV4dD86IEhUTUxCdXR0b25FbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcclxuICAgIGJhcj86IEhUTUxFbGVtZW50O1xyXG4gICAgdG9nZ2xlPzogSFRNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFbGVtZW50O1xyXG59XHJcbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cclxuaW50ZXJmYWNlIEVsZW1lbnRzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnQsIEVsZW1lbnRDb2xsZWN0aW9uIHtcclxufVxuXG4vKipcclxuICogVGhlIGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmZhY2UgZm9yIHRoZSBTbGlkZSBzdWIgY29tcG9uZW50LlxyXG4gKlxyXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgU2xpZGVDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBpbmRleDogbnVtYmVyOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIHNsaWRlSW5kZXg6IG51bWJlcjtcclxuICAgIHNsaWRlOiBIVE1MRWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQ7XHJcbiAgICBjb250YWluZXI6IEhUTUxFbGVtZW50O1xyXG4gICAgaXNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmU6IGJvb2xlYW47XHJcbiAgICB1cGRhdGUoKTogdm9pZDtcclxuICAgIHN0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZShwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIHVzZUNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWluZXI/OiBib29sZWFuKTogdm9pZDtcclxuICAgIGlzV2l0aGluKGZyb206IG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsIGRpc3RhbmNlOiBudW1iZXIpOiBib29sZWFuO1xyXG59XG5cbi8qKlxyXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGludGVyZmFjZSBmb3IgdGhlIExheW91dCBjb21wb25lbnQuXHJcbiAqXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBMYXlvdXRDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBsaXN0U2l6ZSgpOiBudScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYmVyO1xyXG4gICAgc2xpZGVTaXplKGluZGV4OiBudW1iZXIsIHdpdGhvdXRHYXA/OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYm9vbGVhbik6IG51bWJlcjtcclxuICAgIHNsaWRlclNpemUod2l0aG91dEdhcD86ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidib29sZWFuKTogbnVtYmVyO1xyXG4gICAgdG90YWxTaXplKGluZGV4PzogbnVtYmVyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aG91dEdhcD86IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBnZXRQYWRkaW5nKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWdodDogYm9vbGVhbik6IG51bWJlcjtcclxuICAgIGlzT3ZlcmZsb3coKTogYm9vbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYW47XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICByZXNpemUoZm9yY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPzogYm9vbGVhbik6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvciB0aGUgQ2xvbmUgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgQ2xvbmVzQ29tcG9uZW50IGV4dGVuZHMgQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2VDb21wb25lbnQge1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIE1vdmUgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG5pbnRlcmZhY2UgTW92ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHtcclxuICAgIG1vdmUoZGVzdDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBwcmV2OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyLCBjYWxsYmFjaz86IEFueUZ1bmN0aW9uKTogdm9pZDtcclxuICAgIGp1bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwKGluZGV4OiBudW1iZXIpOiB2b2lkO1xyXG4gICAgdHJhbnNsYXRlKHBvc2l0aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyLCBwcmV2ZW50TG9vcD86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgc2hpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KHBvc2l0aW9uOiBudW1iZXIsIGJhY2t3YXJkczogYm9vbGVhbik6IG51bWJlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICBjYW5jZWwoKTogdm9pZDtcclxuICAgIHRvSW5kZXgocG9zaXRpb246JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIpOiBudW1iZXI7XHJcbiAgICB0b1Bvc2l0aW9uKGluZGV4OiBudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmltbWluZz86IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBnZXRQb3NpdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyO1xyXG4gICAgZ2V0TGltaXQobWF4OiBib29sZWFuKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxuICAgIGV4Y2VlZGVkTGltaXQobWF4PzogYm9vbGVhbiB8IHVuZGVmaW5lZCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHBvc2l0aW9uPzogbnVtYmVyKTogYm9vbGVhbjtcclxuICAgIC8qKiBAaW50ZXJuYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXHJcbiAgICByZXBvc2l0aW9uKCk6IHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgaW50ZXJmYWNlIGZvciB0aGUgQ29udHJvbGxlciBjb21wb25lbnQuXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBDb250cm9sbGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgZ28oY29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2w6IG51bWJlciB8IHN0cmluZywgYWxsb3dTYW1lSW5kZXg/OiBib29sZWFuLCBjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2s/OiBBbnlGdW5jdGlvbik6IHZvaWQ7XHJcbiAgICBzY3JvbGwoZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uOiBudW1iZXIsIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrPzogQW55RnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgZ2V0TmV4dChkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGluYXRpb24/OiBib29sZWFuKTogbnVtYmVyO1xyXG4gICAgZ2V0UHJldihkZXN0aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24/OiBib29sZWFuKTogbnVtYmVyO1xyXG4gICAgZ2V0RW5kKCk6IG51bWJlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICBzZXRJbmRleChpbmRleDogbnVtYmVyKTogdm9pZDtcclxuICAgIGdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbmRleChwcmV2PzogYm9vbGVhbik6IG51bWJlcjtcclxuICAgIHRvSW5kZXgocGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IG51bWJlcik6IG51bWJlcjtcclxuICAgIHRvUGFnZShpbmRleDogbnVtYmVyKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcjtcclxuICAgIHRvRGVzdChwb3NpdGlvbjogbnVtYmVyKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxuICAgIGhhc0ZvY3VzKCk6IGJvb2xlYW47XHJcbiAgICBpc0J1c3koKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Jvb2xlYW47XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBnZXRBZGphYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQocHJldjogYm9vbGVhbiwgZGVzdGluYXRpb24/OiBib29sZWFuKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEFycm93cyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmZhY2UgQXJyb3dzQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYXJyb3dzOiB7XHJcbiAgICAgICAgcHJldj86IEhUTUxCdXR0b25FbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudDtcclxuICAgICAgICBuZXh0PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfTtcclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIHVwZGF0ZSgpOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZDtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEF1dG9wbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheSBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbmludGVyZmFjZSBBdXRvcGxheUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250IHtcclxuICAgIHBsYXkoKTogdm9pZDtcclxuICAgIHBhdXNlKCk6IHZvaWQ7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaXNQYXVzZWQoKTogYm9vbGVhbjtcclxufVxuXG4vKipcclxuICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbnRlcmZhY2UgZm9yIHRoZSBDb3ZlciBjb21wb25lbnQuXHJcbiAqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBAc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBDb3ZlckNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxufVxuXG4vKipcclxuICogVGhlIGludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2UgZm9yIHRoZSBTY3JvbGwgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UgU2Nyb2xsQ29tcG9uZW50IGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgc2Nyb2xsKHBvc2l0aW9uOiBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyLCBkdXJhdGlvbj86IG51bWJlciwgc25hcD86IGJvb2xlYW4sIGNhbGxiYWNrPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEFueUZ1bmN0aW9uKTogdm9pZDtcclxuICAgIGNhbmNlbCgpOiB2b2lkO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIERyYWcgY29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIERyYWdDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgIGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlKGRpc2FibGVkOiBib29sZWFuKTogdm9pZDtcclxuICAgIGlzRHJhZ2dpbmcoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGJvb2xlYW47XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgS2V5Ym9hcmQgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG5pbnRlcmZhY2UgS2V5Ym9hcmRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudCB7XHJcbiAgICBkaXNhYmxlKGRpc2FibGVkOiBib29sZWFuKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBMYXp5TG9hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcmZhY2UgTGF6eUxvYWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB7XHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBjaGVjaygpOiB2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxufVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFBhZ2luYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuaW50ZXJmYWNlIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCB7XHJcbiAgICBpdGVtczogUGFnaW5hdGlvbkl0ZW1bXTtcclxuICAgIGdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RBdChpbmRleDogbnVtYmVyKTogUGFnaW5hdGlvbkl0ZW07XHJcbiAgICB1cGRhdGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQ7XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIGRhdGEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29mIHRoZSBwYWdpbmF0aW9uLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG5pbnRlcmZhY2UgUGFnaW5hdGlvbkRhdGEge1xyXG4gICAgbGlzdDogSFRNTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVTGlzdEVsZW1lbnQ7XHJcbiAgICBpdGVtczogUGFnaW5hdGlvbkl0ZW1bXTtccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIGVhY2ggcGFnaW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gaXRlbS5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIFBhZ2luYXRpb25JdGVtIHtcclxuICAgIGxpOiBIVE1MTElFbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBwYWdlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyO1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bmMgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG5pbnRlcmZhY2UgU3luY0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcclxuICAgIHJlbW91bnQoKTogdm9pZDtcclxufVxuXG4vKipcclxuICogVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcmZhY2UgZm9yIHRoZSBXaGVlbCBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2luY2UgMy4wLjBcclxuICovXHJcbmludGVyZmFjZSBXaGVlbENvbXBvbmVudCBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3h0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxufVxuXG4vKipcclxuICogVGhlIGludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UgZm9yIHRoZSBMaXZlIGNvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0LjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIExpdmVDb21wb25lbnQgZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQmFzZUNvbXBvbmVudCB7XHJcbiAgICBkaXNhYmxlKGRpc2FibGVkOiBib29sZWFuKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQ7XHJcbn1cblxuLyoqXHJcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGkxOG4gc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmluZ3MuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgY29uc3QgSTE4Tjoge1xyXG4gICAgcHJldjogc3RyaW5nO1xyXG4gICAgbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHN0cmluZztcclxuICAgIGZpcnN0OiBzdHJpbmc7XHJcbiAgICBsYXN0OiBzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nO1xyXG4gICAgc2xpZGVYOiBzdHJpbmc7XHJcbiAgICBwYWdlWDogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIHBsYXk6IHN0cmluZztcclxuICAgIHBhdXNlOiBzdHJpbmc7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgY2Fyb3VzZWw6IHN0cmluZztcclxuICAgIHNsaWRlOiBzdHJpbmc7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0OiBzdHJpbmc7XHJcbiAgICBzbGlkZUxhYmVsOiBzdHJpbmc7XHJcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3Igb3B0aW9ucy5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIE9wdGlvbnMgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgUmVzcG9uc2l2ZU9wdGlvbnMge1xyXG4gICAgLyoqXHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhlIHR5cGUgb2YgdGhlIHNsaWRlci5cclxuICAgICAqIC0gJ3NsaWRlJzogQSBzbGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZGVyIHdpdGggdGhlIHNsaWRlIHRyYW5zaXRpb25cclxuICAgICAqIC0gJ2xvb3AnIDoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEEgY2Fyb3VzZWwgc2xpZGVyXHJcbiAgICAgKiAtICdmYWRlJyA6IEEgc2xpZGVyIHciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRoIHRoZSBmYWRlIHRyYW5zaXRpb24uIFRoaXMgZG9lcyBub3Qgc3VwcG9ydCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHBlclBhZ2Ugb3B0aW9uLlxyXG4gICAgICovXHJcbiAgICB0eXBlPzogc3RyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGByb2xlYCBhdHRyaWJ1dGUgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciB0aGUgcm9vdCBlbGVtZW50LlxyXG4gICAgICogSWYgdGhlIHRhZyBpcyBgPHNlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uPmAsIHRoaXMgdmFsdWUgd2lsbCBub3QgYmUgdXNlZC4gVGhlIGRlZmF1bHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInZhbHVlIGlzIGAncmVnaW9uJ2AuXHJcbiAgICAgKi9cclxuICAgIHJvbGU/OiBzdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaW5nO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGRpc2FibGUgYW55IGFjdGlvbnMgd2hpbGUgdGhlIHNsaWRlciBpcyB0cmFuc2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbmluZy5cclxuICAgICAqIEV2ZW4gaWYgYGZhbHNlYCwgdGhlIHNsaWRlciBmb3JjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2libHkgd2FpdHMgZm9yIHRyYW5zaXRpb24gb24gdGhlIGxvb3AgcG9pbnRzLlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqL1xyXG4gICAgd2FpdEZvclRyYW5zaXRpb24/OiBib29sZWFuO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogSWYgYHRydWVgLCB0aGUgd2lkdGggb2Ygc2xpZGVzIGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGV0ZXJtaW5lZCBieSB0aGVpciB3aWR0aC5cclxuICAgICAqIFRoZSBgcGVyUGFnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgIGFuZCBgcGVyTW92ZWAgb3B0aW9ucyBzaG91bGQgYmUgYDFgLlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xyXG4gICAgYXV0b1dpZHRoPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIElmIGB0cnVlYCwgdGhlIGhlaWdodCBvZiBzbGlkZXMgYXJlIGRldGVybWluZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIGJ5IHRoZWlyIGhlaWdodC5cclxuICAgICAqIFRoZSBgcGVyUGFnZWAgYW5kIGBwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyTW92ZWAgb3B0aW9ucyBzaG91bGQgYmUgYDFgLlxyXG4gICAgICovXHJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXV0b0hlaWdodD86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnQgaW5kZXguXHJcbiAgICAgKi9cclxuICAgIHN0YXJ0PzogbnVtYmVyO1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC8qKlxyXG4gICAgICogQ2hhbmdlcyB0aGUgYXJyb3cgU1ZHIHBhdGgsIGxpa2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIidtNy42MSAwLjgwNy0yLjEyLi4uJy5cclxuICAgICAqL1xyXG4gICAgYXJyb3dQYSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aD86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlciB0byBhY3RpdmF0ZSBhdXRvcGxheSBvciBub3QuXHJcbiAgICAgKiBJZiBgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXNlZGAsIGl0IHdpbGwgbm90IGJlZ2luIHdoZW4gdGhlIHNsaWRlciBiZWNvbWVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhY3RpdmUuXHJcbiAgICAgKiBZb3UgbmVlZCB0byBwcm92aWRlZCBwbGF5L3BhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBidXR0b25zIG9yIG1hbnVhbGx5IHN0YXJ0IGl0IGJ5IGBBdXRvcGxheSNwbGF5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIpYC5cclxuICAgICAqL1xyXG4gICAgYXV0b3BsYXk/OiBib29sZWFuIHwgJ3BhdXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBhdXRvcGxheSBpbnRlcnZhbCBpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbWlsbGlzZWNvbmRzLlxyXG4gICAgICovXHJcbiAgICBpbnRlcnZhbD86IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZXI7XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2UgYXV0b3BsYXkgb24gbW91c2VvdmVyLlxyXG4gICAgICovXHJcbiAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1c2VPbkhvdmVyPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybWluZXMgd2hldGhlciB0byBwYXVzZSBhdXRvcGxheSB3aGVuIHRoZSBzbGlkZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnRhaW5zIHRoZSBhY3RpdmUgZWxlbWVudCAoZm9jdXNlZCBlbGVtZW50KS5ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKiBUaGlzIHNob3VsZCBiZSBgdHJ1ZWAgZm9yIGFjY2Vzc2liaWxpdHkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICovXHJcbiAgICBwYXVzZU9uRm9jdXM/OiBib29sZWFuO1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHJlc2V0IHRoZSBhdXRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXkgcHJvZ3Jlc3Mgd2hlbiBpdCBpcyByZXF1ZXN0ZWQgdG8gc3RhcnQgYWdhaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLlxyXG4gICAgICovXHJcbiAgICByZXNldFByb2dyZXNzPzogYm9vbGVhbjtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAvKipcclxuICAgICAqIEVuYWJsZXMgbGF6eSBsb2FkaW5nLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFByb3ZpZGUgdGhlIGBzcmNgIGJ5IHRoZSBgZGF0YS1zcGxpZGUtbGF6eWAgb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBgc3Jjc2V0YCBieSB0aGUgYGRhdGEtc3BsaWRlLWxhenktc3Jjc2V0YC5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKiBZb3UgbWF5IGFsc28gcHJvdmlkZSBgc3JjYCBmb3IgdGhlIHBsYWNlaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGRlciwgYnV0IHRoZSB2YWx1ZSBtdXN0IGJlIGRpZmZlcmVudCB3aXRoIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiAtIGBmYWxzZWA6IERpc2FibGVzIGxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInp5IGxvYWRpbmdcclxuICAgICAqIC0gYCduZWFyYnknYDogU3RhcnRzIGxvYWRpbmcgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ubHkgaW1hZ2VzIGFyb3VuZCB0aGUgYWN0aXZlIHNsaWRlIChwYWdlKVxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAqIC0gYCdzZXF1ZW50aWFsJ2A6IExvYWRzIGltYWdlcyBzZXF1ZW50aWFsbHlcclxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgKi9cclxuICAgIGxhenlMb2FkPzogYm9vbGVhbiB8ICduZWFyYnknIHwgJ3NlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInF1ZW50aWFsJztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIGhvdyBtYSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidueSBwYWdlcyAobm90IHNsaWRlcykgYXJvdW5kIHRoZSBhY3RpdmUgc2xpZGUgc2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VsZCBiZSBsb2FkZWQgYmVmb3JlaGFuZC5cclxuICAgICAqIFRoaXMgb25seSB3b3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIia3Mgd2hlbiB0aGUgYGxhenlMb2FkYCBvcHRpb24gaXMgYCduZWFyYnknYC5cclxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cclxuICAgIHByZWxvYWRQYWdlcz86IG51bWJlcjtcclxuICAgIC8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqIEVuYWJsZXMga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBjb250cm9sLlxyXG4gICAgICogLSBgdHJ1ZWAgb3IgYCdnbG9iYWwnYDogTGlzdGVuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgdG8gdGhlIGBrZXlkb3duYCBldmVudCBvZiB0aGUgZG9jdW1lbnQuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiogLSAnZm9jdXNlZCc6IExpc3RlbnMgdG8gdGhlIGBrZXlkb3duYCBldmVudCBvZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHNsaWRlciByb290IGVsZW1lbnQgd2l0aCBhZGRpbmcgYHRhYmluZGV4PSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCJgIHRvIGl0LlxyXG4gICAgICogLSBgZmFsc2VgOiBEaXNhYmxlcyBrZXlib2FyZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2hvcnRjdXRzIChkZWZhdWx0KS5cclxuICAgICAqL1xyXG4gICAga2V5Ym9hcmQ/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjogYm9vbGVhbiB8ICdnbG9iYWwnIHwgJ2ZvY3VzZWQnO1xyXG4gICAgLyoqXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICogRW5hYmxlcyBuYXZpZ2F0aW9uIGJ5IHRoZSBtb3VzZSB3aGVlbC5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBTZXQgYHdhaXRGb3JUcmFuc2l0aW9uYCB0byBgdHVyZWAgb3IgcHJvdmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUgdGhlIGB3aGVlbFNsZWVwYCBkdXJhdGlvbi5cclxuICAgICAqL1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3doZWVsPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRocmVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGQgdG8gY3V0IG9mZiB0aGUgc21hbGwgZGVsdGEgcHJvZHVjZWQgYnkgaW5lcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWEgc2Nyb2xsLlxyXG4gICAgICovXHJcbiAgICB3aGVlbE1pblRocmVzaG9sZD86JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbGVlcCB0aW1lIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtaWxsaXNlY29uZHMgdW50aWwgYWNjZXB0aW5nIG5leHQgd2hlZWwuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIHRpbWVyIHN0YXJ0cyB3aGVuIHRoZSB0cmFuc2l0aW9uIGJlZ2lucy5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKi9cclxuICAgIHdoZWVsU2xlZXA/OiBudW1iZXI7XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVsZWFzZSB0aGUgd2hlZWwgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IHdoZW4gdGhlIHNsaWRlciByZWFjaGVzIHRoZSBmaXJzdCBvciBsYXN0IHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5cclxuICAgICAqL1xyXG4gICAgcmVsZWFzZVdoZWVsPzogYm9vbGVhbjtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAvKipcclxuICAgICAqIFRoZSBkaXJlY3Rpb24gb2YgdGhlIHNsaWRlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXHJcbiAgICAgKiAtICdsdHInOiBMZWZ0IHRvIHJpZ2h0XHJcbiAgICAgKiAtICdyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRsJzogUmlnaHQgdG8gbGVmdFxyXG4gICAgICogLSAndHRiJzogVG9wIHRvIGJvdHRvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm1cclxuICAgICAqL1xyXG4gICAgZGlyZWN0aW9uPzogJ2x0cicgfCAncnRsJyB8ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIndHRiJztcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgdGhlIGltYWdlIGAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3JjYCB0byB0aGUgY3NzIGBiYWNrZ3JvdW5kLWltYWdlYCBVUkwgb2YgdGhlIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnQgZWxlbWVudC5cclxuICAgICAqIFRoaXMgcmVxdWlyZXMgYGZpeGVkSGVpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Agb3IgYGhlaWdodFJhdGlvYCBvcHRpb24uXHJcbiAgICAgKi9cclxuICAgIGNvdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcj86IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIERldGVybWluZXMgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRoZXIgdG8gYWRkIGB0YWJpbmRleD0iMCJgIHRvIHZpc2libGUgc2xpZGVzIG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBub3QuXHJcbiAgICAgKi9cclxuICAgIHNsaWRlRm9jdXM/OiBib29sZWFuO1xyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC8qKlxyXG4gICAgICogSWYgYHRydWVgLCB0aGUgc2xpZGVyIG1ha2VzIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgY2xpY2thYmxlIHRvIG5hdmlnYXRlIGFub3RoZXIgc2xpZGVyLlxyXG4gICAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VzZSBgU3BsaWRlI3N5bmMoKWAgdG8gc3luYyBtdWx0aXBsZSBzbGlkZXJzLlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqL1xyXG4gICAgaXNOYXZpZ2F0aW9uPzogYm9vbGVhbjtcclxuICAgIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0byB0cmltIHNwYWNlcyBiZWZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlL2FmdGVyIHRoZSBzbGlkZXIgaWYgdGhlIGBmb2N1c2Agb3B0aW9uIGlzIGF2YWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFibGUuXHJcbiAgICAgKiAtIGB0cnVlYDogVHJpbXMgc3BhY2VzLiBUaGUgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBtYXkgc3RheSBvbiB0aGUgc2FtZSBsb2NhdGlvbiBldmVuIHdoZW4gcmVxdWVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRlZCB0byBtb3ZlLlxyXG4gICAgICogLSBgJ21vdmUnYDogVHJpbXMgc3BhY2VzIGFuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgZm9yY2VzIHRvIG1vdmUgdGhlIHNsaWRlciB3aGVuIHJlcXVlc3RlZC5cclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgKi9cclxuICAgIHRyaW1TcGFjZT86IGJvb2xlYW4gfCAnbW92ZSc7XHJcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXHJcbiAgICAgKiBJZiBgdHJ1ZWAgYW5kIHRoZSBgZm9jdXNgIG9wdGlvbiBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXZhaWxhYmxlOlxyXG4gICAgICogLSBEaXNhYmxlcyB0aGUgbmV4dCBhcnJvdyB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbiBhIGNhcm91c2VsIHJlYWNoZXMgdGhlIGxhc3QgcGFnZSBldmVuIGlmIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWN0aXZlIHNsaWRlIGlzIG5vdCB0aGUgbGFzdCBzbGlkZS5cclxuICAgICAqIC0gT20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRzIHJlZHVuZGFudCBwYWdpbmF0aW9uIGRvdHMgd2hpY2gganVzdCBjaGFuZ2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBhY3RpdmUgc2xpZGUgYW5kIGRvIG5vdCBtb3ZlIGEgY2Fyb3VzZWwuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBvbWl0RW5kPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFVwZGF0ZXMgdGhlIGBpcy1hY3RpdmVgIHN0YXR1cyBvZiBzbGlkZXMganVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYmVmb3JlIG1vdmluZyB0aGUgc2xpZGVyLlxyXG4gICAgICovXHJcbiAgICB1cGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlT25Nb3ZlPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogSWYgYG1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25gLCB0aGUgbWVkaWEgcXVlcnkgZm9yIGJyZWFrcG9pbnRzIHdpbGwgYmUgYG1pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictd2lkdGhgLCBvciBvdGhlcndpc2UsIGBtYXgtd2lkdGhgLlxyXG4gICAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxyXG4gICAgbWVkaWFRdWVyeT86ICdtaW4nIHwgJ21heCc7XHJcbiAgICAvKipcclxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKiBUaGUgc2VsZWN0b3IgdG8gZmluZCBmb2N1c2FibGUgZWxlbWVudHNcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKiB3aGVyZSBgdGFiaW5kZXg9Ii0xImAgd2lsbCBiZSBhc3NpZ25lZCB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbiB0aGVpciBhc2NlbmRhbnQgc2xpZGUgaXMgaGlkZGVuLlxyXG4gICAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgZm9jdXNhYmxlTm9kZXM/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBUaGUgc2VsZWN0b3IgZm9yIG5vZGVzIHRoYXQgY2Fubm90IGJlIGRyYWdnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkLlxyXG4gICAgICovXHJcbiAgICBub0RyYWc/OiBzdHJpbmc7XHJcbiAgICAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXHJcbiAgICAgKiBFbmFibGVzIHRoZSBsaXZlIHJlZ2lvbiBieSBgYXJpYS1saXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AuXHJcbiAgICAgKiBJZiBgdHJ1ZWAsIHNjcmVlbiByZWFkZXJzIHdpbGwgcmVhZCBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb250ZW50IG9mIGVhY2ggc2xpZGUgd2hlbmV2ZXIgc2xpZGUgY2hhbmdlcy5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgKi9cclxuICAgIGxpdmU/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIHVzZSB0aGUgVHJhbnNpdGlvbiBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50IG9yIG5vdC5cclxuICAgICAqL1xyXG4gICAgdXNlU2Nyb2xsPzogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW47XHJcbiAgICAvKipcclxuICAgICAqIE9wdGlvbnMgZm9yIHNwZWNpZmljIGJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vha3BvaW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2BgYHRzXHJcbiAgICAgKiB7XHJcbiAgICAgKiAgIDEwMDA6IHtcclxuICAgICAqICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGVyUGFnZTogMyxcclxuICAgICAqICAgICBnYXAgICAgOiAyMFxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqICAgfSxcclxuICAgICAqICAgNjAwOiB7XHJcbiAgICAgKiAgICAgcGVyUGFnZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDEsXHJcbiAgICAgKiAgICAgZ2FwICAgIDogNSxcclxuICAgICAqICAgfSxcclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiB9XHJcbiAgICAgKiBgYGBcclxuICAgICAqL1xyXG4gICAgYnJlYWtwb2ludHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPzogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgUmVzcG9uc2l2ZU9wdGlvbnM+O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogT3B0aW9ucyB1c2VkIHdoZW4gdGhlIGAocHJlZmVycy0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVkdWNlZC1tb3Rpb246IHJlZHVjZSlgIGlzIGRldGVjdGVkLlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG4gICAgcmVkdWNlZE1vdGlvbj86IE9wdGlvbnM7XHJcbiAgICAvKipcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKiBUaGUgY29sbGVjdGlvbiBvZiBjbGFzcyBuYW1lcy5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cclxuICAgIGNsYXNzZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogVGhlIGNvbGxlY3Rpb24gb2YgaTE4biBzdHJpbmdzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqL1xyXG4gICAgaTE4bj86IFJlY29yZDxrZXlvZiB0eXBlb2YgSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxOE4gfCBzdHJpbmcsIHN0cmluZz47XHJcbn1cclxuLyoqXHJcbiAqIFRoZSBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIGZvciBvcHRpb25zIHRoYXQgY2FuIGNvcnJlc3BvbmQgd2l0aCBicmVha3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2ludHMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZSBSZXNwb25zaXZlT3B0aW9ucyB7XHJcbiAgICAvKipcclxuICAgICAqIEFjYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcHRzIGFyYml0cmFyeSBwcm9wZXJ0aWVzIGZvciBleHRlbnNpb25zLCBhbHRob3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZ2ggaXQncyBub3QgaWRlYWwgdHlwaW5nLlxyXG4gICAgICovXHJcbiAgICBba2V5IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogc3RyaW5nXTogYW55O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgbGFiZWwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0aGUgcm9vdCBlbGVtZW50LlxyXG4gICAgICogVXNlIGBsYWJlbGxlZGJ5YCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVhZCBpZiB0aGVyZSBpcyBhIHZpc2libGUgbGFiZWwuXHJcbiAgICAgKi9ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBsYWJlbD86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIElEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgdGhlIGVsZW1lbnQgdGhhdCB1c2VkIGFzIHRoZSBsYWJlbCBvZiB0aGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcm91c2VsLlxyXG4gICAgICovXHJcbiAgICBsYWJlbGxlZGJ5Pzogc3RyaW5nO1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIC8qKlxyXG4gICAgICogVGhlIHRyYW5zaXRpb24gc3BlZWQgaW4gbWlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc2Vjb25kcy5cclxuICAgICAqL1xyXG4gICAgc3BlZWQ/OiBudW1iZXI7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmV3aW5kIHRoZSBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fyb3VzZWwgb3Igbm90LlxyXG4gICAgICogVGhpcyBpcyBpZ25vcmVkIHdoZW4gdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBgdHlwZWAgb3B0aW9uIGlzIGAnbG9vcCdgLlxyXG4gICAgICovXHJcbiAgICByZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aW5kPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRyYW5zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHNwZWVkIG9uIHJld2luZCBpbiBtaWxsaXNlY29uZHMuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICByZXdpbmRTcGVlZD86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEFsbG93cyB0byByZXdpbmQgYSBjYXJvdXNlbCBieSBkcmFnIGlmIHRoZSBgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2luZGAgb3B0aW9uIGlzIGVuYWJsZWQuXHJcbiAgICAgKi9cclxuICAgIHJld2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RCeURyYWc/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgc2xpZGVyIG1heCB3aWR0aCwgYWNjZXB0aW5nIHRoZSBDU1MgZm9ybWF0IHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWNoIGFzIDEwZW0sIDgwdncuXHJcbiAgICAgKi9cclxuICAgIHdpZHRoPzogbnVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciB8IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogRGVmaW5lcyB0aGUgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlciBoZWlnaHQsIGFjY2VwdGluZyB0aGUgQ1NTIGZvcm1hdC5cclxuICAgICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIGhlaWdodD86IG51bWJlciB8IHN0cmluZztcclxuICAgIC8qKlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEZpeGVzIHdpZHRoIG9mIHNsaWRlcywgYWNjZXB0aW5nIHRoZSBDU1MgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm1hdC5cclxuICAgICAqIFRoZSBzbGlkZXIgd2lsbCBpZ25vcmUgdGhlIGBwZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWAgb3B0aW9uIGlmIHlvdSBwcm92aWRlIHRoaXMgdmFsdWUuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICBmaXhlZFdpZHRoPzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogRml4ZXMgaGVpZ2h0IG9mIHNsaWRlcywgYWNjZXB0aW5nIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ1NTIGZvcm1hdC5cclxuICAgICAqIFRoZSBzbGlkZXIgd2lsbCBpZ25vcmUgdGhlIGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVpZ2h0UmF0aW9gIG9wdGlvbiBpZiB5b3UgcHJvdmlkZSB0aGlzIHZhbHVlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqL1xyXG4gICAgZml4ZWRIZWlnaHQ/OiBudW1iZXIgfCBzdHJpbmc7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIGhlaWdodCBvZiBzbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJ5IHRoZSByYXRpbyB0byB0aGUgc2xpZGVyIHdpZHRoLlxyXG4gICAgICogRm9yIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneGFtcGxlLCB3aGVuIHRoZSBzbGlkZXIgd2lkdGggaXMgYDEwMDBgIGFuZCB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhdGlvIGlzIGAwLjVgLCB0aGUgaGVpZ2h0IHdpbGwgYmUgYDUwMGAuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbiAgICBoZWlnaHRSYXRpbz86IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIERldGVybWluZXMgdGhlIG51bWJlciBvZiBzbGlkZXMgdG8gZGlzcGxheSBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYSBwYWdlLlxyXG4gICAgICovXHJcbiAgICBwZXJQYWdlPzogbnVtYmVyO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHNsaWRlcyB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbW92ZSBhdCBvbmNlLlxyXG4gICAgICovXHJcbiAgICBwZXJNb3ZlPzogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncjtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nsb25lcyBvbiBlYWNoIHNpZGUgb2YgdGhlIHNsaWRlci5cclxuICAgICAqIEluIG1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInN0IGNhc2VzLCB5b3UgZG9uJ3QgbmVlZCB0byBwcm92aWRlIHRoaXMgdmFsdWUuXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICovXHJcbiAgICBjbG9uZXM/OiBudW1iZXI7XHJcbiAgICAvKipccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY2xvbmUgc3RhdHVzIGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGZvciBjbG9uZXMgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBjbG9uZVN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXM/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzIHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGljaCBzbGlkZSBzaG91bGQgYmUgYWN0aXZlIGlmIHRoZXJlIGFyZSBtdWx0aXBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUgc2xpZGVzIGluIGEgcGFnZS5cclxuICAgICAqIE51bWJlcnMgYW5kIGAnY2VudGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIidgIGFyZSBhY2NlcHRhYmxlLlxyXG4gICAgICovXHJcbiAgICBmb2N1cz86IG51bSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJiZXIgfCAnY2VudGVyJztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGdhcCBiZXQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2VlbiBzbGlkZXMuIFRoZSBDU1MgZm9ybWF0IGlzIGFjY2VwdGFibGUsIHN1Y2ggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzIGAxZW1gLlxyXG4gICAgICovXHJcbiAgICBnYXA/OiBudW1iZXIgfCBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnO1xyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHBhZGRpbmcgbGVmdC9yaWdodCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgdG9wL2JvdHRvbSBvZiB0aGUgc2xpZGVyLlxyXG4gICAgICogVGhlIENTUyBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF0IGlzIGFjY2VwdGFibGUsIHN1Y2ggYXMgYDFlbWAuXHJcbiAgICAgKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0c1xyXG4gICAgICogLy8gQnkgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlclxyXG4gICAgICogcGFkZGluZzogMTAsXHJcbiAgICAgKlxyXG4gICAgICogLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvIEJ5IHRoZSBDU1MgZm9ybWF0XHJcbiAgICAgKiBwYWRkaW5nOiAnMXJlbScsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIC8vIFNwZWNpZmllcyBlYWNoIHZhbHVlIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYSBob3Jpem9udGFsIHNsaWRlclxyXG4gICAgICogcGFkZGluZzogeyBsZWZ0OiAxMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIHJpZ2h0OiAyMCB9LFxyXG4gICAgICogcGFkZGluZzogeyBsZWZ0OiAnMXJlbScsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyaWdodDogJzJyZW0nIH0sXHJcbiAgICAgKlxyXG4gICAgICogLy8gU3BlY2lmaWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCBlYWNoIHZhbHVlIGZvciBhIHZlcnRpY2FsIHNsaWRlclxyXG4gICAgICogcGFkZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmc6IHsgdG9wOiAxMCwgYm90dG9tOiAyMCB9LFxyXG4gICAgICogYGBgXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBwYWRkaW5nPzogbnVtYmVyIHwgc3RyaW5nIHwge1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBsZWZ0PzogbnVtYmVyIHwgc3RyaW5nO1xyXG4gICAgICAgIHJpZ2h0PzogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciB8IHN0cmluZztcclxuICAgIH0gfCB7XHJcbiAgICAgICAgdG9wPzogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciB8IHN0cmluZztcclxuICAgICAgICBib3R0b20/OiBudW1iZXIgfCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG4gICAgfTtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciB0byBjcmVhdGUvZmluZCBhcnJvd3Mgb3Igbm90LlxyXG4gICAgICovXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgYXJyb3dzPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMgd2hldGhlciB0byBjcmVhdGUgcGFnaW5hdGlvbiAoaW5kaWNhdG9yIGRvdHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSBvciBub3QuXHJcbiAgICAgKi9cclxuICAgIHBhZ2luYXRpb24/OiBib29sZWFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuICAgIC8qKlxyXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGVuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidibGUga2V5Ym9hcmQgc2hvcnRjdXRzIGZvciBwYWdpbmF0aW9uIHdoZW4gaXQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRhaW5zIGZvY3VzLlxyXG4gICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYC5cclxuICAgICAqL1xyXG4gICAgcGFnaW5hdGlvbktleWJvYXJkPzogYm9vbGVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ247XHJcbiAgICAvKipcclxuICAgICAqIEV4cGxpY2l0bHkgc2V0cyB0aGUgcGFnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpb24gZGlyZWN0aW9uIHRoYXQgZG9lcyBub3Qgb25seSBhZmZlY3QgYXBwZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuY2UgYnV0IGFsc28gc2hvcnRjdXRzIGFuZCBBUklBIGF0dHJpYnV0ZXMuXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgc2FtZSB3aXRoIHRoZSBjYXJvdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgZGlyZWN0aW9uLlxyXG4gICAgICovXHJcbiAgICBwYWdpbmF0aW9uRGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbj86IE9wdGlvbnNbJ2RpcmVjdGlvbiddO1xyXG4gICAgLyoqXHJcbiAgICAgKiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIHRpbWluZyBmdW5jdGlvbiBmb3IgdGhlIENTUyB0cmFuc2l0aW9uLiBGb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4YW1wbGUsIGBsaW5lYXJgLCBlYXNlIG9yIGBjdWJpYy1iZXppZXIoKWAuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBlYXNpbmc/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgZWFzaW5nIGZ1bmN0aW9uIGZvciB0aGUgZHJhZyBmcmVlIG1vZGUuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogVGhlIGRlZmF1bHQgZnVuY3Rpb24gaXMgdGhlIGBlYXNlT3V0UXVhcnRgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnBvbGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBlYXNpbmdGdW5jPzogKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBudW1iZXIpID0+IG51bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogQWxsb3dzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0byBkcmFnIHRoZSBzbGlkZXIgYnkgYSBtb3VzZSBvciBzd2lwZS5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBJZiBgZnJlZWAsIHRoZSBzbGlkZXIgZG9lcyBub3Qgc25hcCB0byBhIHNsaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhZnRlciBkcmFnLlxyXG4gICAgICovXHJcbiAgICBkcmFnPzogYm9vbGVhbiB8ICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZnJlZSc7XHJcbiAgICAvKipcclxuICAgICAqIFNuYXBzIHRoZSBjbG9zZXN0IHNsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSBpbiB0aGUgZHJhZy1mcmVlIG1vZGUuXHJcbiAgICAgKi9cclxuICAgIHNuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwPzogYm9vbGVhbjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHJlcXVpcmVkIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0YW5jZSB0byBzdGFydCBtb3ZpbmcgdGhlIHNsaWRlciBieSB0aGUgdG91Y2ggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGlvbi5cclxuICAgICAqIElmIHlvdSB3YW50IHRvIGRlZmluZSB0aGUgdGhyZXNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sZCBmb3IgdGhlIG1vdXNlLCBwcm92aWRlIGFuIG9iamVjdC5cclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cclxuICAgIGRyYWdNaW5UaHJlc2hvbGQ/OiBudW1iZXIgfCB7XHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG1vdXNlOiBudW1iZXI7XHJcbiAgICAgICAgdG91Y2g6IG51bWJlcjtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9O1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmUgdGhlIHBvd2VyIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAiZmxpY2siLiBUaGUgbGFyZ2VyIG51bWJlciB0aGlzIGlzLCB0aGUgZmFydGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIHNsaWRlciBydW5zLlxyXG4gICAgICogQXJvdW5kIDUwMCBpcyByZWNvbW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZWQuXHJcbiAgICAgKi9cclxuICAgIGZsaWNrUG93ZXI/OiBudW1iZXI7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXHJcbiAgICAgKiBMaW1pdHMgdGhlIG51bWJlciBvZiBwYWdlcyB0byBtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBieSAiZmxpY2siLlxyXG4gICAgICovXHJcbiAgICBmbGlja01heFBhZ2VzPzogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlcjtcclxuICAgIC8qKlxyXG4gICAgICogRGVzdHJveXMgdGhlIHNsaWRlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3k/OiBib29sZWFuIHwgJ2NvbXBsZXRlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImx5JztcclxufVxuXG4vKipcclxuICogVGhlIHR5cGUgZm9yIGFueSBmdW5jdGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24uXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lwZSBBbnlGdW5jdGlvbiA9ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55O1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXHJcbiAqIFRoZSB0eXBlIGZvciBhIGNvbXBvbmVudC5cclxuICpcclxuICogQHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSB0eXBlIENvbXBvbmVudENvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1Y3RvciA9IChTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIG9wdGlvbnM6IE9wdGlvbnMpID0+IEJhc2VDb21wb25lbnQ7XHJcbi8qKlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogVGhlIGludGVyZmFjZSBmb3IgYW55IGNvbXBvbmVudC5cclxuICpcclxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEJhc2VDb21wb25lbnQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIHNldHVwPygpOiB2b2lkO1xyXG4gICAgbW91bnQ/KCk6IHZvaWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVzdHJveT8oY29tcGxldGVseT86IGJvb2xlYW4pOiB2b2lkO1xyXG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIFRyYW5zaXRpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlIFRyYW5zaXRpb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XHJcbiAgICBzdGFydChpbmRleDogbnVtYmVyLCBkb25lOiAoKSA9PiB2b2lkKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZvaWQ7XHJcbiAgICBjYW5jZWwoKTogdm9pZDtcclxufVxyXG4vKipcclxuICogVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBpbnRlcmZhY2UgZm9yIGluZm8gb2YgYSBzcGxpZGUgaW5zdGFuY2UgdG8gc3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmMgd2l0aC5cclxuICpcclxuICogQHNpbmNlIDMuMi44XHJcbiAqL1xyXG5pbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlIFN5bmNUYXJnZXQge1xyXG4gICAgc3BsaWRlOiBTcGxpZGU7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaXNQYXJlbnQ/OiBib29sZWFuO1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSBmb3IgYWxsIGNvbXBvbmVudHMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICovXHJcbmludGVyZmFjZSBDb21wb25lbnRzIHtcclxuICAgIFtrZXk6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmddOiBCYXNlQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xyXG4gICAgTWVkaWE6IE1lZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUNvbXBvbmVudDtcclxuICAgIERpcmVjdGlvbjogRGlyZWN0aW9uQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDtcclxuICAgIEVsZW1lbnRzOiBFbGVtZW50c0NvbXBvbmVudDtcclxuICAgIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXM6IFNsaWRlc0NvbXBvbmVudDtcclxuICAgIExheW91dDogTGF5b3V0Q29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudDtcclxuICAgIENsb25lczogQ2xvbmVzQ29tcG9uZW50O1xyXG4gICAgTW92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IE1vdmVDb21wb25lbnQ7XHJcbiAgICBDb250cm9sbGVyOiBDb250cm9sbGVyQ29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudDtcclxuICAgIEFycm93czogQXJyb3dzQ29tcG9uZW50O1xyXG4gICAgQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dG9wbGF5OiBBdXRvcGxheUNvbXBvbmVudDtcclxuICAgIENvdmVyOiBDb3ZlckNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQ7XHJcbiAgICBTY3JvbGw6IFNjcm9sbENvbXBvbmVudDtcclxuICAgIEQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnOiBEcmFnQ29tcG9uZW50O1xyXG4gICAgS2V5Ym9hcmQ6IEtleWJvYXJkQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudDtcclxuICAgIExhenlMb2FkOiBMYXp5TG9hZENvbXBvbmVudDtcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBQYWdpbmF0aW9uOiBQYWdpbmF0aW9uQ29tcG9uZW50O1xyXG4gICAgU3luYzogU3luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NDb21wb25lbnQ7XHJcbiAgICBXaGVlbDogV2hlZWxDb21wb25lbnQ7XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgTGl2ZTogTGl2ZUNvbXBvbmVudDtcclxuICAgIFRyYW5zaXRpb246IFRyYW5zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduQ29tcG9uZW50O1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsIGludGVybmFsIGV2ZW50cy5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcclxuaW50ZXJmYWNlIEV2ZW50TWFwIHtcclxuICAgICdtb3VudGVkJzogKCkgPT4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHZvaWQ7XHJcbiAgICAncmVhZHknOiAoKSA9PiB2b2lkO1xyXG4gICAgJ2NsaWNrIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIic6IChTbGlkZTogU2xpZGVDb21wb25lbnQsIGU6IE1vdXNlRXZlbnQpID0+IHZvaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJkO1xyXG4gICAgJ21vdmUnOiAoaW5kZXg6IG51bWJlciwgcHJldjogbnVtYmVyLCBkZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzdDogbnVtYmVyKSA9PiB2b2lkO1xyXG4gICAgJ21vdmVkJzogKGluZGV4OiBudW1iZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyLCBwcmV2OiBudW1iZXIsIGRlc3Q6IG51bWJlcikgPT4gdm9pZDtcclxuICAgICdhYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aXZlJzogKFNsaWRlOiBTbGlkZUNvbXBvbmVudCkgPT4gdm9pZDtcclxuICAgICdpbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhY3RpdmUnOiAoU2xpZGU6IFNsaWRlQ29tcG9uZW50KSA9PiB2b2lkO1xyXG4gICAgJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ2aXNpYmxlJzogKFNsaWRlOiBTbGlkZUNvbXBvbmVudCkgPT4gdm9pZDtcclxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInaGlkZGVuJzogKFNsaWRlOiBTbGlkZUNvbXBvbmVudCkgPT4gdm9pZDtcclxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIncmVmcmVzaCc6ICgpID0+IHZvaWQ7XHJcbiAgICAndXBkYXRlZCc6IChvcHRpb25zOiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgT3B0aW9ucykgPT4gdm9pZDtcclxuICAgICdyZXNpemUnOiAoKSA9PiB2b2lkIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjtcclxuICAgICdyZXNpemVkJzogKCkgPT4gdm9pZDtcclxuICAgICdkcmFnJzogKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIpID0+IHZvaWQ7XHJcbiAgICAnZHJhZ2dpbmcnOiAoKSA9PiB2b2lkO1xyXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICdkcmFnZ2VkJzogKCkgPT4gdm9pZDtcclxuICAgICdzY3JvbGwnOiAoKSA9PiB2b2kiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZDtcclxuICAgICdzY3JvbGxlZCc6ICgpID0+IHZvaWQ7XHJcbiAgICAnb3ZlcmZsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm93JzogKG92ZXJmbG93OiBib29sZWFuKSA9PiB2b2lkO1xyXG4gICAgJ2Rlc3Ryb3knIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjogKCkgPT4gdm9pZDtcclxuICAgICdhcnJvd3M6bW91bnRlZCc6IChwcmV2OiBIVE1MIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J1dHRvbkVsZW1lbnQsIG5leHQ6IEhUTUxCdXR0b25FbGVtZW50KSA9PiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcclxuICAgICdhcnJvd3M6dXBkYXRlZCc6IChwcmV2OiBIVE1MQnV0dG9uRWxlbWVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIG5leHQ6IEhUTUxCdXR0b25FbGVtZW50LCBwcmV2SW5kZXg6IG51bWJlciwgbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieHRJbmRleDogbnVtYmVyKSA9PiB2b2lkO1xyXG4gICAgJ3BhZ2luYXRpb246bW91bnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWQnOiAoZGF0YTogUGFnaW5hdGlvbkRhdGEsIGl0ZW06IFBhZ2luYXRpb25JdGVtIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIikgPT4gdm9pZDtcclxuICAgICdwYWdpbmF0aW9uOnVwZGF0ZWQnOiAoZGF0YTogUGFnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb25EYXRhLCBwcmV2OiBQYWdpbmF0aW9uSXRlbSwgY3VycjogUGFnaW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpb25JdGVtKSA9PiB2b2lkO1xyXG4gICAgJ25hdmlnYXRpb246bW91bnRlZCc6IChzcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsaWRlczogU3BsaWRlW10pID0+IHZvaWQ7XHJcbiAgICAnYXV0b3BsYXk6cGxheSc6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIoKSA9PiB2b2lkO1xyXG4gICAgJ2F1dG9wbGF5OnBsYXlpbmcnOiAocmF0ZTogbnVtYiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlcikgPT4gdm9pZDtcclxuICAgICdhdXRvcGxheTpwYXVzZSc6ICgpID0+IHZvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlkO1xyXG4gICAgJ2xhenlsb2FkOmxvYWRlZCc6IChpbWc6IEhUTUxJbWFnZUVsZW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBTbGlkZTogU2xpZGVDb21wb25lbnQpID0+IHZvaWQ7XHJcbn1cblxuLyoqXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKiBDYXN0cyBUIHRvIFUuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbmRlY2xhcmUgdHlwZSBDYXN0PFQsIFU+ID0gVCBleHRlbmRzIFUgPyBUIDogVTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbi8qKlxyXG4gKiBNYWtlcyB0aGUgVCBlYXN5IHRvIHJlYWQuXHJcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuZGVjbGFyZSB0eXBlIFJlc29sdmU8VD4gPSB7XHJcbiAgICBbSyBpbiBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2YgVF06IFRbS107XHJcbn0gJiB1bmtub3duO1xyXG4vKipcclxuICogUHVzaGVzIFUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvIHR1cGxlIFQuXHJcbiAqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZGVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhcmUgdHlwZSBQdXNoPFQgZXh0ZW5kcyBhbnlbXSwgVSA9IGFueT4gPSBbLi4uVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIFVdO1xyXG4vKipcclxuICogUmV0dXJucyB0aGUgZmlyc3QgdHlwZSBvZiB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHR1cGxlLlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmRlY2xhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5cGUgSGVhZDxUIGV4dGVuZHMgYW55W10+ID0gKCguLi5hcmdzOiBUKSA9PiBhbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5KSBleHRlbmRzIChhcmc6IGluZmVyIEEsIC4uLmFyZ3M6IGFueVtdKSA9PiBhbnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID8gQSA6IG5ldmVyO1xyXG4vKipcclxuICogUmVtb3ZlcyB0aGUgZmlyc3QgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgZnJvbSB0aGUgdHVwbGUgVC5cclxuICpcclxuICogQGludGVybmFsXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cclxuZGVjbGFyZSB0eXBlIFNoaWZ0PFQgZXh0ZW5kcyBhbnlbXT4gPSAoKC4uLmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmdzOiBUKSA9PiBhbnkpIGV4dGVuZHMgKGFyZzogYW55LCAuLi5hcmdzOiBpbmZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQSkgPT4gYW55ID8gQSA6IG5ldmVyO1xyXG4vKipcclxuICogUmVtb3ZlcyB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIE4gdHlwZXMgZnJvbSB0aGUgdHVwbGUgVC5cclxuICpcclxuICogQGludGVybmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbFxyXG4gKi9cclxuZGVjbGFyZSB0eXBlIFNoaWZ0TjxUIGV4dGVuZHMgYW55W10sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBOIGV4dGVuZHMgbnVtYmVyLCBDIGV4dGVuZHMgYW55W10gPSBbXT4gPSB7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgMDogVDtcclxuICAgIDE6IFNoaWZ0TjxTaGlmdDxUPiwgTiwgUHVzaDxDPj4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xyXG59W0NbJ2xlbmd0aCddIGV4dGVuZHMgTiA/IDAgOiAxXSBleHRlbmRzIGluZmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBBID8gQ2FzdDxBLCBhbnlbXT4gOiBuZXZlcjtcblxuLyoqXHJcbiAqIFRoZSBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJmYWNlIGZvciB0aGUgU2xpZGVzIGNvbXBvbmVudC5cclxuICpcclxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIFNsaWRlc0NvbXBvbmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcclxuICAgIHVwZGF0ZSgpOiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIHJlZ2lzdGVyKHNsaWRlOiBIVE1MRWxlbWVudCwgaW5kZXg6IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHNsaWRlSW5kZXg6IG51bWJlcik6IHZvaWQ7XHJcbiAgICBnZXQoZXhjbHVkZUNsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXM/OiBib29sZWFuKTogU2xpZGVDb21wb25lbnRbXTtcclxuICAgIGdldEluKHBhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBudW1iZXIpOiBTbGlkZUNvbXBvbmVudFtdO1xyXG4gICAgZ2V0QXQoaW5kZXg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIpOiBTbGlkZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcclxuICAgIGFkZChzbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGU6IHN0cmluZyB8IEVsZW1lbnQgfCBBcnJheTxzdHJpbmcgfCBFbGVtZW50PiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4PzogbnVtYmVyKTogdm9pZDtcclxuICAgIHJlbW92ZShzZWxlY3RvcjogU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlTWF0Y2hlcik6IHZvaWQ7XHJcbiAgICBmb3JFYWNoKGl0ZXJhdGVlOiBTbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSXRlcmF0ZWUsIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuKTogdm9pZDtcclxuICAgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWx0ZXIobWF0Y2hlcjogU2xpZGVNYXRjaGVyKTogU2xpZGVDb21wb25lbnRbXTtccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzdHlsZShwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1c2VDb250YWluZXI/OiBib29sZWFuKTogdm9pZDtcclxuICAgIGdldExlbmd0aChlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hjbHVkZUNsb25lcz86IGJvb2xlYW4pOiBudW1iZXI7XHJcbiAgICBpc0Vub3VnaCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogYm9vbGVhbjtcclxufVxyXG4vKipcclxuICogVGhlIGl0ZXJhdGVlIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgU2xpZGVzLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZWNsYXJlIHR5cGUgU2xpZGVzSXRlcmF0ZWUgPSAoU2xpZGU6IFNsaWRlQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCwgaW5kZXg6IG51bWJlciwgU2xpZGVzOiBTbGlkZUNvbXBvbmVudFtdKSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz4gdm9pZDtcclxuLyoqXHJcbiAqIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZm9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZXMuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmUgdHlwZSBTbGlkZXNQcmVkaWNhdGUgPSAoU2xpZGU6IFNsaWRlQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgaW5kZXg6IG51bWJlciwgU2xpZGVzOiBTbGlkZUNvbXBvbmVudFtdKSA9PiBhbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5O1xyXG4vKipcclxuICogVGhlIHR5cGUgZm9yIGZpbHRlcmluZyBTbGlkZUNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnQgb2JqZWN0cy5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuZGVjbGFyZSB0eXBlIFNsaWRlTWF0Y2hlciA9IG51bWJlciB8IG51bWJlcltdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8IHN0cmluZyB8IFNsaWRlc1ByZWRpY2F0ZTtcblxuLyoqXHJcbiAqIFRoZSB0eXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBmb3IgYW4gRXZlbnRUYXJnZXQgb3IgYW4gYXJyYXkgd2l0aCBFdmVudFRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgb2JqZWN0cy5cclxuICpcclxuICogQHNpbmNlIDQuMC4wXHJcbiAqL1xyXG5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFyZSB0eXBlIEV2ZW50VGFyZ2V0cyA9IEV2ZW50VGFyZ2V0IHwgRXZlbnRUYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0W107XHJcbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGVyIG9iamVjdC5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuaW50ZXJmYWNlIEV2ZW50QmluZGVyT2JqZWN0IHtcclxuICAgIGJpbmQodGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldDogRXZlbnRUYXJnZXRzLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2s6IEFueUZ1bmN0aW9uLCBvcHRpb25zPzogQWRkRXZlbnRMaXN0ZW5lck8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zKTogdm9pZDtcclxuICAgIHVuYmluZCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEV2ZW50VGFyZ2V0W10sIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fjaz86IEFueUZ1bmN0aW9uKTogdm9pZDtcclxuICAgIGRpc3BhdGNoPFQ+KHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IEV2ZW50VGFyZ2V0LCBldmVudDogc3RyaW5nLCBkZXRhaWw/OiBUKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICBkZXN0cm95KCk6IHZvaWQ7XHJcbn1cclxuLyoqXHJcbiAqIFRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3RydWN0b3IgZnVuY3Rpb24gdG8gcHJvdmlkZSBtZXRob2RzIHRvIHN1YnNjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYmUgbmF0aXZlIGV2ZW50cy5cclxuICpcclxuICogQHNpbmNlIDQuMC4wXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBAY29uc3RydWN0b3JcclxuICpcclxuICogQHJldHVybiBBbiBFdmVudEJpbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0LlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBFdmVudEJpbmRlcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTogRXZlbnRCaW5kZXJPYmplY3Q7XG5cbi8qKlxyXG4gKiBUaGUgaW50ZXJmYWNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgdGhlIEV2ZW50SW50ZXJmYWNlIG9iamVjdC5cclxuICpcclxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlIEV2ZW50SW50ZXJmYWNlT2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBleHRlbmRzIEV2ZW50QmluZGVyT2JqZWN0IHtcclxuICAgIG9uPEsgZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5b2YgRXZlbnRNYXA+KGV2ZW50OiBLLCBjYWxsYmFjazogRXZlbnRNYXBbS10pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZDtcclxuICAgIG9uKGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjazogQW55RnVuY3Rpb24pOiB2b2lkO1xyXG4gICAgb2ZmPEsgZXh0ZW5kcyBrZXlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgRXZlbnRNYXA+KGV2ZW50czogSyB8IEtbXSB8IHN0cmluZyB8IHN0cmluZ1tdKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQ7XHJcbiAgICBlbWl0PEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OiBLLCAuLi5hcmdzOiBQYXJhbWV0ZXJzPEV2ZW50TWFwW0tdPik6IHZvaWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZW1pdChldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQ7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgYnVzOiBEb2N1bWVudEZyYWdtZW50OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxufVxyXG4vKipcclxuICogVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRoYXQgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3ZpZGVzIGludGVyZmFjZSBmb3IgaW50ZXJuYWwgYW5kIG5hdGl2ZSBldmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICogQGNvbnN0cnVjdG9yXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKlxyXG4gKiBAcGFyYW0gU3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxyXG4gKiBAcmV0dXJuIEEgY29sbGVjdGlvbiBvZiBpbnRlcmZhY2UgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducy5cclxuICovXHJcbmRlY2xhcmUgZnVuY3Rpb24gRXZlbnRJbnRlcmZhY2UoU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZT86IFNwbGlkZSk6IEV2ZW50SW50ZXJmYWNlT2JqZWN0O1xuXG4vKipcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSByZXR1cm5pbmcgdmFsdWUgb2YgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZXF1ZXN0SW50ZXJ2YWwuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbmludGVyZmFjZSBSZXF1ZXN0SW50ZXJ2YWxJbnRlcmZhY2Uge1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHN0YXJ0KHJlc3VtZT86IGJvb2xlYW4pOiB2b2lkO1xyXG4gICAgcGF1c2UoKTogdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaWQ7XHJcbiAgICByZXdpbmQoKTogdm9pZDtcclxuICAgIGNhbmNlbCgpOiB2b2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDtcclxuICAgIHNldChpbnRlcnZhbDogbnVtYmVyKTogdm9pZDtcclxuICAgIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BhdXNlZCgpOiBib29sZWFuO1xyXG59XHJcbi8qKlxyXG4gKiBSZXF1ZXN0cyBpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J2YWwgbGlrZSB0aGUgbmF0aXZlIGBzZXRJbnRlcnZhbCgpYCB3aXRoIHVzaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYC5cclxuICpcclxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMFxyXG4gKlxyXG4gKiBAcGFyYW0gaW50ZXJ2YWwgICAtIFRoZSBpbnRlcnZhbCBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxyXG4gKiBAcGFyYW0gb25JbnRlcnZhbCAtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgY2FsbGJhY2sgZmlyZWQgb24gZXZlcnkgaW50ZXJ2YWwuXHJcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gb25VcGRhdGUgICAtIE9wdGlvbmFsLiBDYWxsZWQgb24gZXZlcnkgYW5pbWF0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBmcmFtZSwgdGFraW5nIHRoZSBwcm9ncmVzcyByYXRlLlxyXG4gKiBAcGFyYW0gbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWl0ICAgICAgLSBPcHRpb25hbC4gTGltaXRzIHRoZSBudW1iZXIgb2YgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsLlxyXG4gKi9cclxuZGVjbGFyZSBmdW5jdGlvbiBSZXF1ZXN0SW50ZXJ2YWwoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ludGVydmFsOiBudW1iZXIsIG9uSW50ZXJ2YWw6ICgpID0+IHZvaWQsIG9uVXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZT86IChyYXRlOiBudW1iZXIpID0+IHZvaWQsIGxpbWl0PzogbnVtYmVyKTogUmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncXVlc3RJbnRlcnZhbEludGVyZmFjZTtcblxuLyoqXHJcbiAqIFRoZSBpbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlIGZvciB0aGUgU3RhdGUgb2JqZWN0LlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwXHJcbiAqL1xyXG5pbnRlcmZhY2UgU3RhdGVPYmplY3Qge1xyXG4gICAgc2V0KHN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZTogbnVtYmVyKTogdm9pZDtcclxuICAgIGlzKHN0YXRlczogbnVtYmVyIHwgbnVtYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcltdKTogYm9vbGVhbjtcclxufVxyXG4vKipcclxuICogVGhlIGZ1bmN0aW9uIHBybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aWRpbmcgYSBzdXBlciBzaW1wbGUgc3RhdGUgc3lzdGVtLlxyXG4gKlxyXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQHBhcmFtIGluaXRpYWxTdGF0ZSAtIFNwZWNpZmllcyB0aGUgaW5pdGlhbCBzdGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXHJcbiAqL1xyXG5kZWNsYXJlIGZ1bmN0aW9uIFN0YXRlKGluaXRpYWxTdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlcik6IFN0YXRlT2JqZWN0O1xuXG4vKipcclxuICogVGhlIGludGVyZmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgZm9yIHRoZSByZXR1cm5pbmcgdmFsdWUgb2YgdGhlIFJlcXVlc3RJbnRlcnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaW50ZXJmYWNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaHJvdHRsZUluc3RhbmNlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4gZXh0ZW5kcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRnVuY3Rpb24ge1xyXG4gICAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8Rj4pOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZDtcclxufVxyXG4vKipcclxuICogUmV0dXJucyB0aGUgdGhyb3R0bGVkIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbi5cclxuICpcclxuICogQHBhcmFtIGZ1bmMgICAgIC0gQSBmdW5jdGlvbiB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhyb3R0bGUuXHJcbiAqIEBwYXJhbSBkdXJhdGlvbiAtIE9wdGlvbmFsLiBUaHJvdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxyXG4gKlxyXG4gKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBIHRocm90dGxlZCBmdW5jdGlvbi5cclxuICovXHJcbmRlY2xhcmUgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIFRocm90dGxlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oZnVuYzogRiwgZHVyYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uPzogbnVtYmVyKTogVGhyb3R0bGVJbnN0YW5jZTxGPjtcblxuLyoqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgZnJvbnRlbmQgY2xhc3MgZm9yIHRoZSBTcGxpZGUgc2xpZGVyLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5kZWNsYXJlIGNsYXNzIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUge1xyXG4gICAgLyoqXHJcbiAgICAgKiBDaGFuZ2VzIHRoZSBkZWZhdWx0IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zIGZvciBhbGwgU3BsaWRlIGluc3RhbmNlcy5cclxuICAgICAqL1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHN0YXRpYyBkZWZhdWx0czogT3B0aW9ucztcclxuICAgIC8qKlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFRoZSBjb2xsZWN0aW9uIG9mIHN0YXRlIG51bWJlcnMuXHJcbiAgICAgKi9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBzdGF0aWMgcmVhZG9ubHkgU1RBVEVTOiB7XHJcbiAgICAgICAgQ1JFQVRFRDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcjtcclxuICAgICAgICBNT1VOVEVEOiBudW1iZXI7XHJcbiAgICAgICAgSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidETEU6IG51bWJlcjtcclxuICAgICAgICBNT1ZJTkc6IG51bWJlcjtcclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgU0NST0xMSU5HOiBudW1iZXI7XHJcbiAgICAgICAgRFJBR0dJTkc6IG51bWJlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgICAgREVTVFJPWUVEOiBudW1iZXI7XHJcbiAgICB9O1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogVGhlIHJvb3QgZWxlbWVudCB3aGVyZSB0aGUgU3BsaWRlIGlzIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBsaWVkLlxyXG4gICAgICovXHJcbiAgICByZWFkb25seSByb290OiBIVE1MRWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQ7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBFdmVudEJ1c09iamVjdCBvYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0LlxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBldmVudDogRXZlbnRJbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlT2JqZWN0O1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgY29sbGVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gb2YgYWxsIGNvbXBvbmVudCBvYmplY3RzLlxyXG4gICAgICovXHJcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZG9ubHkgQ29tcG9uZW50czogQ29tcG9uZW50cztcclxuICAgIC8qKlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFRoZSBTdGF0ZU9iamVjdCBvYmplY3QuXHJcbiAgICAgKi9cclxuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fkb25seSBzdGF0ZTogU3RhdGVPYmplY3Q7XHJcbiAgICAvKipcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbiBhcnJheSB3aXRoIFN5bmNUYXJnZXQgb2JqZWN0cyBmb3Igc3BsaWRlIGluc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5jZXMgdG8gc3luYyB3aXRoLlxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlczogU3luY1RhcmdldFtdO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cnJlbnQgb3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWFkb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHkgX287XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIGFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgY29tcG9uZW50cy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfQztcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAvKipcclxuICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIGV4dGVuc2lvbnMuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICovXHJcbiAgICBwcml2YXRlIF9FO1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIFRyYW5zaXRpb24gY29tcG9uZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBfVDtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIFNwbGlkZSBjb25zdHJ1Y3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHRhcmdldCAgLSBUaGUgc2VsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdG9yIGZvciB0aGUgdGFyZ2V0IGVsZW1lbnQsIG9yIHRoZSBlbGVtZW50IGl0c2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGYuXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBbiBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdpdGggb3B0aW9ucy5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IodGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldDogc3RyaW5nIHwgSFRNTEVsZW1lbnQsIG9wdGlvbnM/OiBPcHRpb25zKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAvKipcclxuICAgICAqIEluaXRpYWxpemVzIHRoZSBpbnN0YW5jZS5cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKlxyXG4gICAgICogQHBhcmFtIEV4dGVuc2lvbnMgLSBPcHRpb25hbC4gQW4gbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCB3aXRoIGV4dGVuc2lvbnMuXHJcbiAgICAgKiBAcGFyYW0gVHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBPcHRpb25hbC4gQSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQHJldHVybiBgdGhpc2BcclxuICAgICAqL1xyXG4gICAgbW91bnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0V4dGVuc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBDb21wb25lbnRDb25zdHJ1Y3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+LCBUcmFuc2l0aW9uPzogQ29tcG9uZW50Q29uc3RydWN0b3IpOiB0aGlzO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogU3luY3MgdGhlIHNsaWRlciB3aXRoIHRoZSBwcm92aWRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb25lLlxyXG4gICAgICogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgYG1vdW50KClgLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogYGBgdHNcclxuICAgICAqIHZhciBwcmltYXJ5ICAgPSBuZXcgU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xyXG4gICAgICogdmFyIHNlY29uZGFyeSA9IG5ldyBTcGxpZGUoKTtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKlxyXG4gICAgICogcHJpbWFyeS5zeW5jKCBzZWNvbmRhcnkgKTtcclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBwcmltYXJ5Lm1vdW50KCk7XHJcbiAgICAgKiBzZWNvbmRhcnkubW91bnQoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gc3BsaWRlIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgU3BsaWRlIGluc3RhbmNlIHRvIHN5bmMgd2l0aC5cclxuICAgICAqXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHJldHVybiBgdGhpc2BcclxuICAgICAqL1xyXG4gICAgc3luYyhzcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBTcGxpZGUpOiB0aGlzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBNb3ZlcyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlciB3aXRoIHRoZSBmb2xsb3dpbmcgY29udHJvbCBwYXR0ZXJuLlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXHJcbiAgICAgKiB8IFBhdHRlcm4gfCBEZXNjcmlwdGlvbiB8XHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogfC0tLXwtLS18XHJcbiAgICAgKiB8IGBpYCB8IEdvZXMgdG8gdGhlIHNsaWRlIGBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImAgfFxyXG4gICAgICogfCBgJyske2l9J2AgfCBJbmNyZW1lbnRzIHRoZSBzbGlkZSBpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5kZXggYnkgYGlgIHxcclxuICAgICAqIHwgYCctJHtpfSdgIHwgRGVjcmVtZW50cyB0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImhlIHNsaWRlIGluZGV4IGJ5IGBpYCB8XHJcbiAgICAgKiB8IGAnPidgIHwgR29lcyB0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm8gdGhlIG5leHQgcGFnZSB8XHJcbiAgICAgKiB8IGAnPCdgIHwgR29lcyB0byB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXZpb3VzIHBhZ2UgfFxyXG4gICAgICogfCBgPiR7aX1gIHwgR29lcyB0byB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInBhZ2UgYGlgIHxcclxuICAgICAqXHJcbiAgICAgKiBJbiBtb3N0IGNhc2VzLCBgJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI+J2AgYW5kIGAnPCdgIG5vdGF0aW9ucyBhcmUgZW5vdWdoIHRvIGNvbnRyb2wgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXJcclxuICAgICAqIGJlY2F1c2UgdGhleSByZXNwZWN0IGBwZXJQYWdlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5kIGBwZXJNb3ZlYCBvcHRpb25zLlxyXG4gICAgICpcclxuICAgICAqIEBleGFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsZVxyXG4gICAgICogYGBgdHNcclxuICAgICAqIHZhciBzcGxpZGUgPSBuZXcgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZSgpO1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMgdG8gdGhlIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAxOlxyXG4gICAgICogc3BsaWRlLmdvKCAxICk7XHJcbiAgICAgKlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIC8vIEluY3JlbWVudHMgdGhlIGluZGV4OlxyXG4gICAgICogc3BsaWRlLmdvKCAnKzIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyApO1xyXG4gICAgICpcclxuICAgICAqIC8vIEdvZXMgdG8gdGhlIG5leHQgcGFnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImU6XHJcbiAgICAgKiBzcGxpZGUuZ28oICc+JyApO1xyXG4gICAgICpcclxuICAgICAqIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAvLyBHb2VzIHRvIHRoZSBwYWdlIDI6XHJcbiAgICAgKiBzcGxpZGUuZ28oICc+MicgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgLSBBIGNvbnRyb2wgcGF0dGVybi5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBgdGhpc2BcclxuICAgICAqL1xyXG4gICAgZ28oY29udHJvbDogbnVtYmVyIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZyk6IHRoaXM7XHJcbiAgICAvKipcclxuICAgICAqIFJlZ2lzdGVycyBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZXZlbnQgaGFuZGxlci5cclxuICAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIGBgYHRzXHJcbiAgICAgKiB2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBMaXN0ZW5zIHRvIGEgc2luZ2xlIGV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVudDpcclxuICAgICAqIHNwbGlkZS5vbiggJ21vdmUnLCBmdW5jdGlvbigpIHt9ICk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIC8vIExpc3RlbnMgdG8gbXVsdGlwbGUgZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0czpcclxuICAgICAqIHNwbGlkZS5vbiggJ21vdmUgcmVzaXplJywgZnVuY3Rpb24oKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge30gKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBBcHBlbmRzIGEgbmFtZXNwYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZTpcclxuICAgICAqIHNwbGlkZS5vbiggJ21vdmUubXlOYW1lc3BhY2UgcmVzaXplLm0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieU5hbWVzcGFjZScsIGZ1bmN0aW9uKCkge30gKTtcclxuICAgICAqIGBgYFxyXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBuYW1lIG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBVc2UgYSBkb3QoLikgdG8gYXBwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCBhIG5hbWVzcGFjZS5cclxuICAgICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiYWNrIGZ1bmN0aW9uLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gYHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYFxyXG4gICAgICovXHJcbiAgICBvbjxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhldmVudHM6IEssIGNhbGxiYWNrOiBFdmVudE1hcFtLXSk6IHRoaXM7XHJcbiAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24oZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbik6IHRoaXM7XHJcbiAgICAvKipcclxuICAgICAqIFJlbW92ZXMgdGhlIHJlZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RlcmVkIGFsbCBoYW5kbGVycyBmb3IgdGhlIHNwZWNpZmllZCBldmVudCBvciBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRzLlxyXG4gICAgICogSWYgeW91IHdhbnQgdG8gb25seSByZW1vdmUgYSBwYXJ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ljdWxhciBoYW5kbGVyLCB1c2UgbmFtZXNwYWNlIHRvIGlkZW50aWZ5IGl0LlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYGBgdHNcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgpO1xyXG4gICAgICpcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvLyBSZW1vdmVzIGFsbCBoYW5kbGVycyBhc3NpZ25lZCB0byAibW92ZSI6XHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICogc3BsaWRlLm9mZiggJ21vdmUnICk7XHJcbiAgICAgKlxyXG4gICAgICogLy8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE9ubHkgcmVtb3ZlcyBoYW5kbGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc3BlY2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImllZCBuYW1lc3BhY2U6XHJcbiAgICAgKiBzcGxpZGUub2ZmKCAnbW92ZS5teU5hbWVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInBhY2UnICk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50cyAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMgc2VwYXJhdGVkIGJ5IHNwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZXMuIFVzZSBhIGRvdCguKSB0byBhcHBlbmQgYSBuYW1lc3BhY2UuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIG9mZjxLICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHRlbmRzIGtleW9mIEV2ZW50TWFwPihldmVudHM6IEsgfCBLW10gfCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgc3RyaW5nW10pOiB0aGlzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBFbWl0cyBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZXZlbnQgYW5kIHRyaWdnZXJzIHJlZ2lzdGVyZWQgaGFuZGxlcnMuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIEBwYXJhbSBldmVudCAtIEFuIGV2ZW50IG5hbWUgdG8gZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQuXHJcbiAgICAgKiBAcGFyYW0gYXJncyAgLSBPcHRpb25hbC4gQW55IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2YgYXJndW1lbnRzIHRvIHBhc3MgdG8gaGFuZGxlcnMuXHJcbiAgICAgKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIGVtaXQ8SyBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kcyBrZXlvZiBFdmVudE1hcD4oZXZlbnQ6IEssIC4uLmFyZ3M6IFBhcmFtZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJzPEV2ZW50TWFwW0tdPik6IHRoaXM7XHJcbiAgICBlbWl0KGV2ZW50OiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAuLi5hcmdzOiBhbnlbXSk6IHRoaXM7XHJcbiAgICAvKipcclxuICAgICAqIEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcnRzIGEgc2xpZGUgYXQgdGhlIHNwZWNpZmllZCBwb3NpdGlvbi5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGBgYHRzXHJcbiAgICAgKiB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZSA9IG5ldyBTcGxpZGUoKTtcclxuICAgICAqIHNwbGlkZS5tb3VudCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcclxuICAgICAqXHJcbiAgICAgKiAvLyBBZGRzIHRoZSBzbGlkZSBieSB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkhUTUw6XHJcbiAgICAgKiBzcGxpZGUuYWRkKCAnPGxpPjwvbGk+ICk7XHJcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIC8vIG9yIGFkZHMgdGhlIGVsZW1lbnQ6XHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3BsaWRlLmFkZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ2xpJyApICk7XHJcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogYGBgXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHNsaWRlcyAtIEEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlIGVsZW1lbnQsIGFuIEhUTUwgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZSwgb3IgYW4gYXJyYXkgd2l0aCB0aGVtLlxyXG4gICAgICogQHBhcmFtIGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCAgLSBPcHRpb25hbC4gQW4gaW5kZXggdG8gaW5zZXJ0IGEgc2xpZGUgYXQuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICpcclxuICAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGQoc2xpZGVzOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IEFycmF5PHN0cmluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCBIVE1MRWxlbWVudD4sIGluZGV4PzogbnVtYmVyKTogdGhpcztcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcclxuICAgICAqIFJlbW92ZXMgc2xpZGVzIHRoYXQgbWF0Y2ggdGhlIG1hdGNoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXHJcbiAgICAgKiB0aGF0IGNhbiBiZSBhbiBpbmRleCwgYW4gYXJyYXkgd2l0aCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaWNlcywgYSBzZWxlY3Rvciwgb3IgYW4gaXRlcmF0ZWUgZnVuY3Rpb24uXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIEBwYXJhbSBtYXRjaGVyIC0gQW4gaW5kZXgsIGFuIGFycmF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aXRoIGluZGljZXMsIGEgc2VsZWN0b3Igc3RyaW5nLCBvciBhbiBpdGVyYXRlZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZShtYXRjaGVyOiBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VNYXRjaGVyKTogdGhpcztcclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVyIHR5cGUuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHR5cGUgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSB0eXBlIHRvIHRlc3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VgIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGN1cnJlbnQgb25lLCBvciBvdGhlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aXNlIGBmYWxzZWAuXHJcbiAgICAgKi9cclxuICAgIGlzKHR5cGU6IHN0cmluZyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWZyZXNoZXMgdGhlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdGhpc2BcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cclxuICAgIHJlZnJlc2goKTogdGhpcztcclxuICAgIC8qKlxyXG4gICAgICogRGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3lzIHRoZSBzbGlkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGV0ZWx5IC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgU3BsaWRlIHdpbGwgbm90IHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1vdW50IHRoZSBzbGlkZXIgYnkgYnJlYWtwb2ludHMuXHJcbiAgICAgKlxyXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAqIEByZXR1cm4gYHRoaXNgXHJcbiAgICAgKi9cclxuICAgIGRlc3Ryb3koYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBsZXRlbHk/OiBib29sZWFuKTogdGhpcztcclxuICAgIC8qKlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFJldHVybnMgb3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvYmplY3Qgd2l0aCB0aGUgbGF0ZXN0IG9wdGlvbnMuXHJcbiAgICAgKi9cclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBnZXQgb3B0aW9ucygpOiBPcHRpb25zO1xyXG4gICAgLyoqXHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWVyZ2VzIG9wdGlvbnMgdG8gdGhlIGN1cnJlbnQgb3B0aW9ucyBhbmQgZW1pdHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2B1cGRhdGVkYCBldmVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMgLSBBbiBvYmplY3Qgd2l0aCBuZXcgb3B0aW9ucy5cclxuICAgICAqL1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNldCBvcHRpb25zKG9wdGlvbnM6IE9wdGlvbnMpO1xyXG4gICAgLyoqXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNsaWRlcyB3aXRob3V0IGNsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMuXHJcbiAgICAgKi9cclxuICAgIGdldCBsZW5ndGgoKTogbnVtYmVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYWN0aXZlIHNsaWRlIGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBhY3RpdmUgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4LlxyXG4gICAgICovXHJcbiAgICBnZXQgaW5kZXgoKTogbnVtYmVyO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4vKipcclxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIGNvbnRlbnQgb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhY2ggc2xpZGUuXHJcbiAqXHJcbiAqIEBzaW5jZSAzLjAuMFxyXG4gKi9cclxuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZSBTbGlkZUNvbnRlbnQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEhUTUwgb3IgdGV4dCBmb3IgZWFjaCBzbGlkZS5cclxuICAgICAqL1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0bWw/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjb2xsZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvZiBzdHlsZXMuIFRoZXkgd2lsbCByZW1haW4gYWZ0ZXIgU3BsaWRlIGlzIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBsaWVkLlxyXG4gICAgICovXHJcbiAgICBzdHlsZXM/OiBSZWNvcmQ8c3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgc3RyaW5nIHwgbnVtYmVyPjtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0aW9uIG9mIGF0dHJpYnV0ZXMuIFRoZXkgd2lsbCByZW1haW4gYWZ0ZXIgU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSBpcyBhcHBsaWVkLlxyXG4gICAgICovXHJcbiAgICBhdHRycz86IFJlY29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcclxufVxyXG4vKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBjb25maWcgb2YgdGhlIHJlbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlci5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5pbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFJlbmRlcmVyQ29uZmlnIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgSUQuXHJcbiAgICAgKi9cclxuICAgIGlkPzogc3RyaW5nO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogVGhlIGFkZGl0aW9uYWwgY2xhc3MgZm9yIHRoZSByb290IGVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LlxyXG4gICAgICovXHJcbiAgICByb290Q2xhc3M/OiBzdHJpbmc7XHJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXHJcbiAgICAgKiBUaGUgdGFnIHVzZWQgZm9yIHRoZSBsaXN0IGVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxyXG4gICAgICovXHJcbiAgICBsaXN0VGFnPzogc3RyaW5nO1xyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gICAgICogVGhlIHRhZyB1c2VkIGZvciBlYWNoIHNsaWRlLlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xyXG4gICAgc2xpZGVUYWc/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcmVuZGVyIGFycm93cyBvciBub3QuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICovXHJcbiAgICBhcnJvd3M/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogS2VlcHMgdGhlIHNsaWRlciBoaWRkZW4uXHJcbiAgICAgKi9cclxuICAgIGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRkZW4/OiBib29sZWFuO1xyXG4gICAgLyoqXHJcbiAgICAgKiBEZXRlcm1pbmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB3aGV0aGVyIHRvIHdyYXAgdGhlIHRyYWNrIGJ5IHRoZSBzbGlkZXIgZWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3Igbm90LlxyXG4gICAgICovXHJcbiAgICBzbGlkZXI/OiBib29sZWFuO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogVGhlIGFkZGl0aW9uYWwgSFRNTCByZW5kZXJlZCBiZWZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHRoZSBzbGlkZXIgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgYmVmb3JlU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlcj86IHN0cmluZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFkZGl0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsIEhUTUwgcmVuZGVyZWQgYWZ0ZXIgdGhlIHNsaWRlciBlbGVtZW50LlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xyXG4gICAgYWZ0ZXJTbGlkZXI/OiBzdHJpbmc7XHJcbiAgICAvKipcclxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBUaGUgYWRkaXRpb25hbCBIVE1MIHJlbmRlcmVkIGJlZm9yZSB0aGUgdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgIGJlZm9yZVRyYWNrPzogc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFkZGl0aW9uYWwgSFRNTCByZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZWQgYWZ0ZXIgdGhlIHRyYWNrIGVsZW1lbnQuXHJcbiAgICAgKi9cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZnRlclRyYWNrPzogc3RyaW5nO1xyXG59XG5cbi8qKlxyXG4gKiBUaGUgY2xhc3MgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIGdlbmVyYXRlIHN0YXRpYyBIVE1MIG9mIHRoZSBzbGlkZXIgZm9yIHRoZSBmaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Qgdmlldy5cclxuICpcclxuICogQHNpbmNlIDMuMC4wXHJcbiAqL1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSBjbGFzcyBTcGxpZGVSZW5kZXJlciB7XHJcbiAgICAvKipcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZW1vdmVzIGEgc3R5bGUgZWxlbWVudCBhbmQgY2xvbmVzLlxyXG4gICAgICpccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKiBAcGFyYW0gc3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICovXHJcbiAgICBzdGF0aWMgY2xlYW4oc3BsaWRlOiBTcGxpZGUpOiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgc2xpZGUgY29udGVudHMuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnRzO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogU3RvcmVzIGRhdGEgb2Ygc2xpZGVzLlxyXG4gICAgICovXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcHJpdmF0ZSByZWFkb25seSBzbGlkZXM7XHJcbiAgICAvKipcclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgRGlyZWN0aW9uIGNvbXBvbmVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUgcmVhZG9ubHkgRGlyZWN0aW9uO1xyXG4gICAgLyoqXHJcbiAgICAgKiBIb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgdGhlIFN0eWxlIGluc3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZWFkb25seSBTdHlsZTtcclxuICAgIC8qKlxyXG4gICAgICogSG9sZHMgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAvKipcclxuICAgICAqIEhvbGRzIG9wdGlvbnMgZm9yIHRoaXMgaW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhbmNlLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbiAgICAvKipcclxuICAgICAqIFRoZSBzbGlkZXIgSUQuXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlkO1xyXG4gICAgLyoqXHJcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQW4gYXJyYXkgd2l0aCBvcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJyZWFrcG9pbnRzO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogVGhlIFNwbGlkZVJlbmRlcmVyIGNvbnN0cnVjdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udGVudHMgLSBBbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBzbGlkZSBjb250ZW50cy4gRWFjaCBpdGVtIG11c3QgYmUgYW4gSFRNTCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgYSBwbGFpbiB0ZXh0LlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFsLiBTbGlkZXIgb3B0aW9ucy5cclxuICAgICAqIEBwYXJhbSBjb25maWcgICAtIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0aWMgZGVmYXVsdCBvcHRpb25zLlxyXG4gICAgICogQHBhcmFtIGRlZmF1bHRzIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIERlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIHNsaWRlci4gUGFzcyBgU3BsaWRlLmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhdWx0c2AgaWYgeW91IGFyZSB1c2luZyBpdC5cclxuICAgICAqL1xyXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0cnVjdG9yKGNvbnRlbnRzOiBzdHJpbmdbXSB8IFNsaWRlQ29udGVudFtdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucz86IE9wdGlvbnMsIGNvbmZpZz86IFJlbmRlcmVyQ29uZmlnLCBkZWZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsdHM/OiBPcHRpb25zKTtcclxuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRoZSBpbnN0YW5jZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBpbml0O1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIC8qKlxyXG4gICAgICogSW5pdGlhbGl6ZXMgc2xpZGVzLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xyXG4gICAgcHJpdmF0ZSBpbml0U2xpZGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUmVnaXN0ZXJzIHN0eWxlcyBmb3IgdGhlIHJvb3QgZWxlbWVudC5cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cclxuICAgIHByaXZhdGUgcmVnaXN0ZXJSb290U3R5bGVzO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogUmVnaXN0ZXJzIHN0eWxlcyBmb3IgdGhlIHRyYWNrIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlZ2lzdGVyVHJhY2tTdHlsZXM7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciB0aGUgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3QgZWxlbWVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZWdpc3RlckwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0U3R5bGVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZWdpc3RlcnMgc3R5bGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3Igc2xpZGVzIGFuZCBjbG9uZXMuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHJlZ2lzdGVyU2xpZGVTdHlsZXM7XHJcbiAgICAvKipcclxuICAgICAqIEJ1aWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgbXVsdGlwbGUgYHRyYW5zbGF0ZVhgIGZvciB0aGUgbGlzdCBlbGVtZW50LlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGVhY2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJyZWFrcG9pbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBBIHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cgd2l0aCBtdWx0aXBsZSB0cmFuc2xhdGUgZnVuY3Rpb25zLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xyXG4gICAgcHJpdmF0ZSBidWlsZFRyYW5zbGF0ZTtcclxuICAgIC8qKlxyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFJldHVybnMgb2Zmc2V0IGZvciB0aGUgbGlzdCBlbGVtZW50LlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBnYXBzIGJlY2F1c2UgaXQgY2FuIG5vdCBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgY29udmVydGVkIGludG8gcGVyY2VudC5cclxuICAgICAqXHJcbiAgICAgKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIEByZXR1cm4gVGhlIG9mZnNldC5cclxuICAgICAqL1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHByaXZhdGUgY3NzT2Zmc2V0Q2xvbmVzO1xyXG4gICAgLyoqXHJcbiAgICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUmV0dXJucyBvZmZzZXQgZm9yIGNlbnRlcmluZyB0aGUgYWN0aXZlIHNsaWRlLlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAqXHJcbiAgICAgKiBOb3RlOlxyXG4gICAgICogKCAxMDAlICsgZ2FwICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8gcGVyUGFnZSAtIGdhcFxyXG4gICAgICogMTAwJSAvIHBlclBhZ2UgKyBnYXAgLyBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyUGFnZSAtIGdhcDtcclxuICAgICAqIDUwJSAvIHBlclBhZ2UgKyAoIGdhcCAvIHBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JQYWdlIC0gZ2FwICkgLyAyO1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucyAtIE9wdGlvbnMgZm9yIGVhY2ggYnJlYWtwb2ludC5cclxuICAgICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICogQHJldHVybiBUaGUgb2Zmc2V0LlxyXG4gICAgICovXHJcbiAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpdmF0ZSBjc3NPZmZzZXRDZW50ZXI7XHJcbiAgICAvKipcclxuICAgICAqIFJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm5zIG9mZnNldCBmb3IgZ2Fwcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXHJcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcclxuICAgICAqIEByZXR1cm4gVGhlIG9mZnNldCBhcyBgY2FsYygpYC5ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3NzT2Zmc2V0R2FwcztcclxuICAgIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICAgICAqIFJlc29sdmVzIHRoZSBwcm9wIGZvciB0aGUgY3VycmVudCBkaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGFuZCBjb252ZXJ0cyBpdCBpbnRvIHRoZSBLZWJhYiBjYXNlLlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXHJcbiAgICAgKiBAcGFyYW0gcHJvcCAtIEEgcHJvcGVydHkgbmFtZSB0byByZXNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x2ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEEgcmVzb2x2ZWQgcHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnR5IG5hbWUgaW4gdGhlIEtlYmFiIGNhc2UuXHJcbiAgICAgKi9cclxuICAgIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncml2YXRlIHJlc29sdmU7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgcGFkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpbmcgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqIEBwYXJhbSByaWdodCAgIC0gRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldGVybWluZXMgd2hldGhlciB0byBnZXQgcGFkZGluZyByaWdodCBvciBsZWZ0LlxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFBhZGRpbmcgaW4gdGhlIENTUyBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ybWF0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNzc1BhZGRpbmc7XHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGhlaWdodCBvZiB0aGUgdHJhY2sgZWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIEgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIGNzc1RyYWNrSGVpZ2h0O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZWlnaHQgcHJvdmlkZWQgdGhvdWdoIG9wdGlvbnMgaW4gdGhlIENTUyBmb3JtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5ccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybWF0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNzc0hlaWdodDtcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcclxuICAgICAqIFJldHVybnMgd2lkdGggb2YgZWFjaCBzbGlkZSBpbiB0aGUgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFdpZHRoIGluIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgQ1NTIGZvcm1hdC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjc3NTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXaWR0aDtcclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBoZWlnaHQgb2YgZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ggc2xpZGUgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKlxyXG4gICAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cclxuICAgICAqXHJcbiAgICAgKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBIZWlnaHQgaW4gdGhlIENTUyBmb3JtYXQuXHJcbiAgICAgKi9cclxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBwcml2YXRlIGNzc1NsaWRlSGVpZ2h0O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJucyB3aWR0aCBvciBoZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiB0aGUgQ1NTICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JtYXQsIGNvbnNpZGVyaW5nIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxyXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKiBAcmV0dXJuIFdpZHRoIG9yIGhlaWdodCBpbiB0aGUgQ1NTIGZvcm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXQuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgY3NzU2xpZGVTaXplO1xyXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYXNwZWN0UmF0aW8gdmFsdWUgdG8gc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXVsYXRlIHRoZSBgaGVpZ2h0UmF0aW9gIG9wdGlvbi5cclxuICAgICAqXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxyXG4gICAgICpcclxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIGFzcGVjdFJhdGlvIGluIHRoZSBDU1MgZm9ybWF0LlxyXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG4gICAgcHJpdmF0ZSBjc3NBc3BlY3RSYXRpbztcclxuICAgIC8qKlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEJ1aWxkcyB0aGUgY3NzIHZhbHVlIGJ5IHRoZSBwcm92aWRlZCB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5kIHVuaXQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHZhbHVlIC0gQSB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUuXHJcbiAgICAgKiBAcGFyYW0gdW5pdCAgLSBBIENTUyB1bml0LlxyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXHJcbiAgICAgKiBAcmV0dXJuIEEgYnVpbHQgdmFsdWUgZm9yIGEgQ1NTIHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBidWlsZENzc1ZhbHVlO1xyXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxyXG4gICAgICogUGFyc2VzIHRoZSBDU1MgdmFsdWUgaW50byBudW1iZXIgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCB1bml0LlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIEEgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlIHRvIHBhcnNlLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQW4gb2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCB3aXRoIHZhbHVlIGFuZCB1bml0LlxyXG4gICAgICovXHJcbiAgICBwcml2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSBwYXJzZUNzc1ZhbHVlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJzZXMgYnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFrcG9pbnRzIGFuZCBnZW5lcmF0ZSBvcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBhcnNlQnJlYWtwb2ludHM7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIHNsaWRlIHdpZHRoIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBmaXhlZCBvciBub3QuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VgIGlmIHRoZSBzbGlkZSB3aWR0aCBpcyBmaXhlZCwgb3Igb3RoZXJ3aXNlIGBmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsc2VgLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGlzRml4ZWRXaWR0aDtcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgc2xpZGVyIHR5cGUgaXMgbG9vcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gYHRydWVgIGlmIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgc2xpZGVyIHR5cGUgaXMgbG9vcCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICovXHJcbiAgICBwcml2YXRlIGlzTG9vcDtcclxuICAgIC8qKlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENoZWNrcyBpZiB0aGUgYWN0aXZlIHNsaWRlIHNob3VsZCBiZSBjZW50ZXJlZCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igbm90LlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGUgc2hvdWxkIGJlIGNlbnRlcmVkLCBvciBvdGhlcndpc2UgYGZhbHNlYC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaXNDZW50ZXI7XHJcbiAgICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIGRpcmVjdGlvbiBpcyBUVEIgb3Igbm90LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgZGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpcyBUVEIsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxyXG4gICAgICovXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcHJpdmF0ZSBpc1ZlcnRpY2FsO1xyXG4gICAgLyoqXHJcbiAgICAgKiBCdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbGRzIGNsYXNzZXMgb2YgdGhlIHJvb3QgZWxlbWVudC5cclxuICAgICAqXHJcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICogQHJldHVybiBDbGFzc2VzIGZvciB0aGUgcm9vdCBlbGVtZW50IGFzIGEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbmdsZSBzdHJpbmcuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYnVpbGRDbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NlcztcclxuICAgIC8qKlxyXG4gICAgICogQ29udmVydHMgcHJvdmlkZWQgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXHJcbiAgICAgKlxyXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBhdHRycyAtIEFuIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMuXHJcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXHJcbiAgICBwcml2YXRlIGJ1aWxkQXR0cnM7XHJcbiAgICAvKipcclxuICAgICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb252ZXJ0cyBwcm92aWRlZCBzdHlsZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICpcclxuICAgICAqIEBwYXJhbSBzdHlsZXMgLSBBbiBvYmplY3Qgd2l0aCBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGVzLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGJ1aWxkU3R5bGVzO1xyXG4gICAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxyXG4gICAgICogR2VuZXJhdGVzIEhUTUwgb2Ygc2xpZGVzIHdpdGggaW5zZXJ0aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyBwcm92aWRlZCBjb250ZW50cy5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgSFRNTCBmb3IgYWxsIHNsaWRlcyBhbmQgY2xvbmVzLlxyXG4gICAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xyXG4gICAgcHJpdmF0ZSByZW5kZXJTbGlkZXM7XHJcbiAgICAvKipcclxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBBZGQgdGhlIGBiYWNrZ3JvdW5kYCBzdHlsZSBmb3IgdGhlIGNvdmVyIG1vZGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZW50IC0gQSBzbGlkZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVudC5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjb3ZlcjtcclxuICAgIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEdlbmVyYXRlcyBjbG9uZXMuXHJcbiAgICAgKlxyXG4gICAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBjb250ZW50cyAtIEFuIGFycmF5IHdpdGggU2xpZGVDb250ZW50IG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3RzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlQ2xvbmVzO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNsb25lcyB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2VuZXJhdGUuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBBIG51bWJlciBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgY2xvbmVzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldENsb25lQ291bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYXJyb3dzIGFuZCB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdyYXBwZXIgZWxlbWVudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgSFRNTCBmb3IgYXJyb3dzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXJBcnJvd3M7XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhbiBhcnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3cgSFRNTC5cclxuICAgICAqIFNvbWUgYXR0cmlidXRlcyBhcmUgdGVtcG9yYXJ5LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5kIFNwbGlkZSBjaGFuZ2VzIHRoZW0gYWZ0ZXIgbW91bnQuXHJcbiAgICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcclxuICAgICAqIEBwYXJhbSBwcmV2IC0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBIVE1MIGZvciB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXYgb3IgbmV4dCBhcnJvdy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZGVyQXJyb3c7XHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIEhUTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMIG9mIHRoZSBzbGlkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdlbmVyYXRlZCBIVE1MLlxyXG4gICAgICovXHJcbiAgICBodG1sKCk6IHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2c7XHJcbn1cblxuZGVjbGFyZSBjb25zdCBFVkVOVF9NT1VOVEVEID0gIm1vdW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9SRUFEWSA9ICJyZWFkeSI7XHJcbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWNsYXJlIGNvbnN0IEVWRU5UX01PVkUgPSAibW92ZSI7XHJcbmRlY2xhcmUgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX01PVkVEID0gIm1vdmVkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9DTEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0sgPSAiY2xpY2siO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0FDVElWRSA9ICJhY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9JTkFDVElWRSA9ICJpbmFjdGl2ZSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX1ZJU0lCTEUgPSAidmlzaWJsZSI7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0hJRERFTiA9ICJoaWRkZW4iO1xyXG5kZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFyZSBjb25zdCBFVkVOVF9SRUZSRVNIID0gInJlZnJlc2giO1xyXG5kZWNsYXJlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBFVkVOVF9VUERBVEVEID0gInVwZGF0ZWQiO1xyXG5kZWNsYXJlIGNvbnN0IEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9SRVNJWkUgPSAicmVzaXplIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9SRVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSVpFRCA9ICJyZXNpemVkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9EUkFHID0gImQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9EUkFHR0lORyA9ICJkcmFnZ2luZyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0RSQUdHRUQgPSAiZHJhZ2dlZCI7XHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5kZWNsYXJlIGNvbnN0IEVWRU5UX1NDUk9MTCA9ICJzY3JvbGwiO1xyXG5kZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFyZSBjb25zdCBFVkVOVF9TQ1JPTExFRCA9ICJzY3JvbGxlZCI7XHJcbmRlY2xhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IEVWRU5UX09WRVJGTE9XID0gIm92ZXJmbG93IjtcclxuZGVjbGFyZSBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgRVZFTlRfREVTVFJPWSA9ICJkZXN0cm95IjtcclxuZGVjbGFyZSBjb25zdCBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfQVJST1dTX01PVU5URUQgPSAiYXJyb3dzOm1vdW50ZWQiO1xyXG5kZWNsYXJlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBFVkVOVF9BUlJPV1NfVVBEQVRFRCA9ICJhcnJvd3M6dXBkYXRlZCI7XHJcbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWNsYXJlIGNvbnN0IEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCA9ICJwYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbjptb3VudGVkIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9QQUdJTkFUSU9OX1VQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEVEID0gInBhZ2luYXRpb246dXBkYXRlZCI7XHJcbmRlY2xhcmUgY29uc3QgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX05BVklHQVRJT05fTU9VTlRFRCA9ICJuYXZpZ2F0aW9uOm1vdW50ZWQiO1xyXG5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjbGFyZSBjb25zdCBFVkVOVF9BVVRPUExBWV9QTEFZID0gImF1dG9wbGF5OnBsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9BVVRPUExBWV9QTEFZSU5HID0gImF1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcGxheTpwbGF5aW5nIjtcclxuZGVjbGFyZSBjb25zdCBFVkVOVF9BVVRPUExBWV9QQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVU0UgPSAiYXV0b3BsYXk6cGF1c2UiO1xyXG5kZWNsYXJlIGNvbnN0IEVWRU5UX0xBWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidZTE9BRF9MT0FERUQgPSAibGF6eWxvYWQ6bG9hZGVkIjtcclxuLyoqIEBpbnRlcm5hbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cclxuZGVjbGFyZSBjb25zdCBFVkVOVF9TTElERV9LRVlET1dOID0gInNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XHJcbmRlY2xhcmUgY29uc3QgRVZFTlRfU0hJRlRFRCA9ICJzaCI7XHJcbmRlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXJlIGNvbnN0IEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEID0gImVpIjtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxyXG4gKiBBbGwgY2xhc3NlcyBhcyBjb25zdGFudHMuXHJcbiAqL1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSBjb25zdCBDTEFTU19ST09UID0gInNwbGlkZSI7XHJcbmRlY2xhcmUgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NMQVNTX1RSQUNLOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfTElTVDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19TTElERTogc3RyaW5nO1xyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZGVjbGFyZSBjb25zdCBDTEFTU19DTE9ORTogc3RyaW5nO1xyXG5kZWNsYXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBDTEFTU19DT05UQUlORVI6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfQVJST1dTOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfQVJST1c6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfQVJST1dfUFJFVjogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19BUlJPV19ORVhUOiBzdHJpbmc7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZWNsYXJlIGNvbnN0IENMQVNTX1BBR0lOQVRJT046IHN0cmluZztcclxuZGVjbGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgQ0xBU1NfUEFHSU5BVElPTl9QQUdFOiBzdHJpbmc7XHJcbmRlY2xhcmUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IENMQVNTX1BST0dSRVNTOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BST0dSRVNTX0JBUjogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX1RPRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHTEU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19UT0dHTEVfUExBWTogcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19UT0dHTEVfUEFVU0U6IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfU1BJTk5FUjogc3RyaW5nO1xyXG5kZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFyZSBjb25zdCBDTEFTU19TUjogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19JTklUSUFMSVpFRDogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX0FDVEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkU6IHN0cmluZztcclxuZGVjbGFyZSBjb25zdCBDTEFTU19QUkVWOiBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnO1xyXG5kZWNsYXJlIGNvbnN0IENMQVNTX05FWFQ6IHN0cmluZztcclxuZGVjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmUgY29uc3QgQ0xBU1NfVklTSUJMRTogc3RyaW5nO1xyXG5kZWNsYXJlIGNvbnN0IEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19MT0FESU5HOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfRk9DVVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0lOOiBzdHJpbmc7XHJcbmRlY2xhcmUgY29uc3QgQ0xBU1NfT1ZFUkZMT1c6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmc7XHJcbi8qKlxyXG4gKiBUaGUgYXJyYXkgd2l0aCBhbGwgc3RhdHVzIGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGV4Y2VwdCBmb3IgYGlzLWluaXRpYWxpemVkYC5cclxuICpcclxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBTVEFUVVNfQ0xBU1NFUzonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZ1tdO1xyXG4vKipcclxuICogVGhlIGNvbGxlY3Rpb24gb2YgY2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgZm9yIGVsZW1lbnRzIHRoYXQgU3BsaWRlIGR5bmFtaWNhbGx5IGNyZWF0ZXMuXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTRVM6IHtcclxuICAgIHNsaWRlOiBzdHJpbmc7XHJcbiAgICBjbG9uZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcclxuICAgIGFycm93czogc3RyaW5nO1xyXG4gICAgYXJyb3c6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmc7XHJcbiAgICBwcmV2OiBzdHJpbmc7XHJcbiAgICBuZXh0OiBzdHJpbmc7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcGFnaW5hdGlvbjogc3RyaW5nO1xyXG4gICAgcGFnZTogc3RyaW5nO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNwaW5uZXI6IHN0cmluZztcclxufTtcblxuLyoqXHJcbiAqIFRoZSBjb2xsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBvZiBkZWZhdWx0IG9wdGlvbnMuXHJcbiAqIE5vdGUgdGhhdCB0aGlzIGNvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gYWxsIG9wdGlvbnMuXHJcbiAqXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QgREVGQVVMVFM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPcHRpb25zO1xuXG4vKipcclxuICogRW51bWVyYXRlcyBzbGlkZXMgZnJvbSBsZWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB0byByaWdodC5cclxuICovXHJcbmRlY2xhcmUgY29uc3QgTFRSID0gImx0ciI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4vKipcclxuICogRW51bWVyYXRlcyBzbGlkZXMgZnJvbSByaWdodCB0byBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdC5cclxuICovXHJcbmRlY2xhcmUgY29uc3QgUlRMID0gInJ0bCI7XHJcbi8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcclxuICogRW51bWVyYXRlcyBzbGlkZXMgaW4gYSBjb2wuXHJcbiAqL1xyXG5kZWNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZSBjb25zdCBUVEIgPSAidHRiIjtcblxuLyoqXHJcbiAqIFRoZSB0eXBlIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHJlZ3VsYXIgc2xpZGVyLlxyXG4gKlxyXG4gKiBAc2luY2UgMy4wLjBcclxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xyXG5kZWNsYXJlIGNvbnN0IFNMSURFID0gInNsaWRlIjtcclxuLyoqXHJcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaGUgdHlwZSBmb3IgdGhlIGNhcm91c2VsIHNsaWRlci5cclxuICpcclxuICogQHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jZSAzLjAuMFxyXG4gKi9cclxuZGVjbGFyZSBjb25zdCBMT09QID0gImxvb3AiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcclxuLyoqXHJcbiAqIFRoZSB0eXBlIGZvciB0aGUgZmFkZSBzbGlkZXIgdGhhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FuIG5vdCBoYXZlIG11bHRpcGxlIHNsaWRlcyBpbiBhIHBhZ2UuXHJcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xyXG4gKiBAc2luY2UgMy4wLjBcclxuICovXHJcbmRlY2xhcmUgY29uc3QgRkFERSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiZmFkZSI7XG5cbmV4cG9ydCB7IEFueUZ1bmN0aW9uLCBBcnJvd3NDb21wb25lbnQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBdXRvcGxheUNvbXBvbmVudCwgQmFzZUNvbXBvbmVudCwgQ0xBU1NFUywgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX0FDVElWRSwgQ0xBU1NfQVJST1csIENMQVNTX0FSUk9XUywgQ0xBU1NfQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX05FWFQsIENMQVNTX0FSUk9XX1BSRVYsIENMQVNTX0NMT05FLCBDTEFTU19DT05UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FJTkVSLCBDTEFTU19GT0NVU19JTiwgQ0xBU1NfSU5JVElBTElaRUQsIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMSVNULCBDTEFTU19MT0FESU5HLCBDTEFTU19ORVhULCBDTEFTU19PVkVSRkxPVywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1BBR0lOQVRJT04sIENMQVNTX1BBR0lOQVRJT05fUEFHRSwgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BSRVYsIENMQVNTX1BST0dSRVNTLCBDTEFTU19QUk9HUkVTU19CQVIsIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST09ULCBDTEFTU19TTElERSwgQ0xBU1NfU1BJTk5FUiwgQ0xBU1NfU1IsIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19UT0dHTEUsIENMQVNTX1RPR0dMRV9QQVVTRSwgQ0xBU1NfVE9HR0xFX1BMQVksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19UUkFDSywgQ0xBU1NfVklTSUJMRSwgQ2FzdCwgQ2xvbmVzQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCwgQ29tcG9uZW50Q29uc3RydWN0b3IsIENvbXBvbmVudHMsIENvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50LCBDb3ZlckNvbXBvbmVudCwgREVGQVVMVFMsIERpcmVjdGlvbkNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnQsIERyYWdDb21wb25lbnQsIEVWRU5UX0FDVElWRSwgRVZFTlRfQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXU19NT1VOVEVELCBFVkVOVF9BUlJPV1NfVVBEQVRFRCwgRVZFTlRfQVVUT1BMQVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1BBVVNFLCBFVkVOVF9BVVRPUExBWV9QTEFZLCBFVkVOVF9BVVRPUExBWV9QTEFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lORywgRVZFTlRfQ0xJQ0ssIEVWRU5UX0RFU1RST1ksIEVWRU5UX0RSQUcsIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9EUkFHR0VELCBFVkVOVF9EUkFHR0lORywgRVZFTlRfRU5EX0lOREVYX0NIQU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0VELCBFVkVOVF9ISURERU4sIEVWRU5UX0lOQUNUSVZFLCBFVkVOVF9MQVpZTE9BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RfTE9BREVELCBFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFLCBFVkVOVF9NT1ZFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgRVZFTlRfT1ZFUkZMT1csIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVF9QQUdJTkFUSU9OX01PVU5URUQsIEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1JFQURZLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSRVNJWkVELCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9TSEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRlRFRCwgRVZFTlRfU0xJREVfS0VZRE9XTiwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZJU0lCTEUsIEVsZW1lbnRzQ29tcG9uZW50LCBFdmVudEJpbmRlciwgRXZlbnRCaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyT2JqZWN0LCBFdmVudEludGVyZmFjZSwgRXZlbnRJbnRlcmZhY2VPYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBFdmVudE1hcCwgRkFERSwgSGVhZCwgS2V5Ym9hcmRDb21wb25lbnQsIExPT1AsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBMVFIsIExheW91dENvbXBvbmVudCwgTGF6eUxvYWRDb21wb25lbnQsIExpdmVDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50LCBNZWRpYUNvbXBvbmVudCwgTW92ZUNvbXBvbmVudCwgT3B0aW9ucywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFBhZ2luYXRpb25Db21wb25lbnQsIFBhZ2luYXRpb25EYXRhLCBQYWdpbmF0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0l0ZW0sIFB1c2gsIFJUTCwgUmVxdWVzdEludGVydmFsLCBSZXF1ZXN0SW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsSW50ZXJmYWNlLCBSZXNvbHZlLCBSZXNwb25zaXZlT3B0aW9ucywgU0xJREUsIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVEFUVVNfQ0xBU1NFUywgU2Nyb2xsQ29tcG9uZW50LCBTaGlmdCwgU2hpZnROLCBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVDb21wb25lbnQsIFNsaWRlc0NvbXBvbmVudCwgU3BsaWRlLCBTcGxpZGVSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyZXIsIFN0YXRlLCBTdGF0ZU9iamVjdCwgU3luY0NvbXBvbmVudCwgU3luY1QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQsIFRUQiwgVGhyb3R0bGUsIFRocm90dGxlSW5zdGFuY2UsIFRyYW5zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uQ29tcG9uZW50LCBXaGVlbENvbXBvbmVudCwgU3BsaWRlIGFzIGRlZmF1bHQgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvdHlwZXMvaW5kZXguZC50cycsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdzX3NsaWRlJywKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZScsCiAgICAgICAgICAgICAgICAnbW9kVmFyJzogeydWYXJMaXN0JzogeydBY2NvcmRpb25DYXJkQm9keUNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRIZWFkZXJDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uT3BlbkZpcnN0JzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNCbG9jayc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1DU1NWYXInOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb21tZW50XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BQYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcFBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbVBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZz0yMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgaWQgZm9udCBjb2xvclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvbnRDb2xvcj1fQ29sb3JBX1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgbW9kdWxlIGJhY2tncm91bmRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQmFja2dyb3VuZD1cbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmQnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbW96LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8tYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZFNWRyc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIHN0YXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBmaXhlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUVuZFRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUdQb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1IZWxwJzogJyA8ZGl2IGNsYXNzPSJhbGVydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlciI+IFRvIHNldHVwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2LCBzZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYldlYi5odG1sc1syXVsiVmFycyJdWyJEZXZNc2ciXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIDEuIEluc3RydWN0aW9ucyBhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgcGFnZSBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlLjwvZGl2PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Qb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVJbmMnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIF9Gb250Q29sb3JfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIF9NQmFja2dyb3VuZF9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgI19JRF8ge3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuaGNvbnRlbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLTUwJSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy01MCUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDU3NnB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyBwYWRkaW5nOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBNZWRpdW0gRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rlc2t0b3BzICovIEBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNzY4cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOjAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIExhcmdlIERldmljZXMsIFdpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NjcmVlbnMgKi8gQG1lZGlhIG9ubHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjcmVlbiBhbmQgKG1pbi13aWR0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiA5OTJweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZVRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVZpZGVvQmFja2dyb3VuZCc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaGVhZGVyLXVuaXRfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmlnaHQ6bm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1sZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlkZW97XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIG9iamVjdC1maXQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhQ2xhc3MnOiAnJ319fX0sCiAyNDogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6IGInQGtleWZyYW1lcyBzcGxpZGUtbG9hZGluZ3swJXt0cmFuc2Zvcm06cm90YXRlKDApfXRveycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LnNwbGlkZV9fdHJhY2stLWRyYWdnYWJsZXstJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zcGxpZGVfX3RyYWNrLScKICAgICAgICAgICAgICAgICAgICAgICAgYictZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRle21hcmdpbjowIWltcG9ydGFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q7b3BhY2l0eTowO3otaW5kZXg6MH0uc3BsaWRlX190cmFjay0tZmFkZT4uc3BsaWRlX18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7b3BhY2l0eToxO3otaW5kZXg6MX0ucycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZS0tcnRse2RpcmVjdGlvbjpydGx9LnNwbGlkZV9fdHJhY2stLXR0Yj4uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19fbGlzdHtkaXNwbGF5OmJsb2NrfS5zcGxpZGVfX2NvbnRhaW5lcntib3gtc2l6aW5nOmInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JkZXItYm94O3Bvc2l0aW9uOnJlbGF0aXZlfS5zcGxpZGVfX2xpc3R7YmFja2ZhY2UtdicKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2liaWxpdHk6aGlkZGVuO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lnaHQ6MTAwJTttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH0uc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5pcy1pbml0aWFsaXplZDpub3QoLmlzLWFjdGl2ZSkgLnNwbGlkZV9fbGlzdHtkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheTpibG9ja30uc3BsaWRlX19wYWdpbmF0aW9uey1tcy1mbGV4LWFsaWduOmNlbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LW1zLWZsZXgtcGFjazpjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjA7cG9pbnRlci1ldmVudHM6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25vbmV9LnNwbGlkZV9fcGFnaW5hdGlvbiBsaXtkaXNwbGF5OmlubGluZS1ibG9jaztsaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS1oZWlnaHQ6MTtsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnaW46MDtwb2ludGVyLWV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHM6YXV0b30uc3BsaWRlOm5vdCguaXMtb3ZlcmZsb3cpIC5zcGxpZGVfX3BhZ2luYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ue2Rpc3BsYXk6bm9uZX0uc3BsaWRlX19wcm9ncmVzc19fYmFye3dpZHRoOjB9LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV7cG9zaXRpb246cmVsYXRpdmU7dmlzaWJpbGl0eTpoaWRkZW59LnNwbGlkZS5pcy1pbicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlhbGl6ZWQsLnNwbGlkZS5pcy1yZW5kZXJlZHt2aXNpYmlsaXR5OnZpc2libGV9LnNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVfX3NsaWRle2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JveC1zaXppbmc6Ym8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmRlci1ib3g7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowO2xpc3Qtc3R5bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLXR5cGU6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmV9LnNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVfX3NsaWRlIGltZ3t2ZXJ0aWNhbC1hbGlnbjpib3R0b219LnNwbGlkZV9fc3Bpbm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ7YW5pbWF0aW9uOnNwbGlkZS1sb2FkaW5nIDFzIGxpbmVhciBpbmZpbml0ZTtib3JkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyOjJweCBzb2xpZCAjOTk5O2JvcmRlci1sZWZ0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ItcmFkaXVzOjUwJTtib3R0b206MDtjb250YWluOnN0cmljdDtkaXNwbGF5OmlubGluZS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmxvY2s7aGVpZ2h0OjIwcHg7bGVmdDowO21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZTtyaWdodDowO3RvcDowO3dpZHRoOjIwcHh9LnNwbGlkZV9fc3J7Y2xpcDpyZWN0KDAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzAgMCAwKTtib3JkZXI6MDtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW47cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3BsaWRlX190bycKICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2xlLmlzLWFjdGl2ZSAuc3BsaWRlX190b2dnbGVfX3BsYXksLnNwbGlkZV9fdG9nZ2xlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19fcGF1c2V7ZGlzcGxheTpub25lfS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3RvZ2dsZV9fcGF1c2V7ZGlzcGxheTppbmxpbmV9LnNwbGlkZV9fdHJhY2t7b3ZlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9JywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2Nzcy9zcGxpZGUtY29yZS5taW4uY3NzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInQGtleWZyYW1lcyBzcGxpZGUtbG9hZGluZ3swJXt0cmFuc2Zvcm06cm90YXRlKDApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ310b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LnNwbGlkZV9fdHJhY2stLWRyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2FibGV7LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX190cmFjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXttYXJnaW46MCFpbXBvcnRhbnQ7b3BhY2l0eTowO3otaW5kZXg6MH0uc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fdHJhY2stLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aXZle29wYWNpdHk6MTt6LWluZGV4OjF9LnNwbGlkZS0tcnRse2RpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6cnRsfS5zcGxpZGVfX3RyYWNrLS10dGI+LnNwbGlkZV9fbGlzdHtkaXNwbGF5OmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG9ja30uc3BsaWRlX19jb250YWluZXJ7Ym94LXNpemluZzpib3JkZXItYm94O3BvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbjpyZWxhdGl2ZX0uc3BsaWRlX19saXN0e2JhY2tmYWNlLXZpc2liaWxpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5OmhpZGRlbjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoZWlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOjEwMCU7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9LnNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUuaXMtaW5pdGlhbGl6ZWQ6bm90KC5pcy1hY3RpdmUpIC5zcGxpZGVfX2xpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0e2Rpc3BsYXk6YmxvY2t9LnNwbGlkZV9fcGFnaW5hdGlvbnstbXMtZmxleC1hbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5Oi1tcy1mbGV4Ym94JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztkaXNwbGF5OmZsZXg7LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW46MDtwb2ludGVyLWV2ZW50czpub25lfS5zcGxpZGVfX3BhZ2luYXRpb24gbGl7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGVpZ2h0OjE7bGlzdC1zdHlsZS10eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZTpub25lO21hcmdpbjowO3BvaW50ZXItZXZlbnRzOmF1dG99LnNwbGlkZTpub3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKC5pcy1vdmVyZmxvdykgLnNwbGlkZV9fcGFnaW5hdGlvbntkaXNwbGF5Om5vbmV9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX3Byb2dyZXNzX19iYXJ7d2lkdGg6MH0uc3BsaWRle3Bvc2l0aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbn0uc3BsaWRlLmlzLWluaXRpYWxpemUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCwuc3BsaWRlLmlzLXJlbmRlcmVke3Zpc2liaWxpdHk6dmlzaWJsZX0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19fc2xpZGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47Ym94LXNpemluZzpibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZGVyLWJveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7bGlzdC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGUtdHlwZTpub25lIWltcG9ydGFudDttYXJnaW46MDtwb3NpdGlvbjpyZWxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmV9LnNwbGlkZV9fc2xpZGUgaW1ne3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fc3Bpbm5lcnthbmltYXRpb246c3BsaWRlLWxvYWRpbmcgMXMgbGluZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBpbmZpbml0ZTtib3JkZXI6MnB4IHNvbGlkICM5OTk7Ym9yZGVyLWxlZnQtY29sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO2JvdHRvbTowO2NvbnRhaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduOnN0cmljdDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjBweDtsZWZ0OjAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoOjIwcHh9LnNwbGlkZV9fc3J7Y2xpcDpyZWN0KDAgMCAwIDApO2JvcmRlcjowOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjFweH0uc3BsaWRlX190b2dnbGUuaXMtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGl2ZSAuc3BsaWRlX190b2dnbGVfX3BsYXksLnNwbGlkZV9fdG9nZ2xlX19wYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c2V7ZGlzcGxheTpub25lfS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3RvZ2dsZV9fcGF1c2V7ZGlzcGxheTppbmxpbmV9LnNwbGlkZV9fdHJhY2t7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjB9JywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2Nzcy9zcGxpZGUtY29yZS5taW4uY3NzJywKICAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJywKICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciBjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIGZpeGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNTc2cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7IHBhZGRpbmc6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgV2lkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2NyZWVucyAqLyBAbWVkaWEgb25seSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NyZWVuIGFuZCAobWluLXdpZHRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IDk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fSwKIDI1OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYicuc3BsaWRlX19jb250YWluZXJ7Ym94LXNpemluZzpib3JkZXItYm94O3Bvc2l0aW9uOnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhdGl2ZX0uc3BsaWRlX19saXN0e2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2Rpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTAwJTttYXJnaW46MCFpbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnR9LnNwbGlkZS5pcy1pbml0aWFsaXplZDpuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290KC5pcy1hY3RpdmUpIC5zcGxpZGVfX2xpc3R7ZGlzcGxheTpibG9ja30uc3BsaWRlX18nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnaW5hdGlvbnstbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyOycKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZsZXgtd3JhcDp3cmFwOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VudGVyO21hcmdpbjowO3BvaW50ZXItZXZlbnRzOm5vbmV9LnNwbGlkZV9fcGFnaW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbGl7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTtsaXN0LXN0eWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy10eXBlOm5vbmU7bWFyZ2luOjA7cG9pbnRlci1ldmVudHM6YXV0b30uc3BsaWRlOm5vdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzLW92ZXJmbG93KSAuc3BsaWRlX19wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0uc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fcHJvZ3Jlc3NfX2Jhcnt3aWR0aDowfS5zcGxpZGV7cG9zaXRpb246cmVsYXRpdmU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Zpc2liaWxpdHk6aGlkZGVufS5zcGxpZGUuaXMtaW5pdGlhbGl6ZWQsLnNwbGlkZS5pcy0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVuZGVyZWR7dmlzaWJpbGl0eTp2aXNpYmxlfS5zcGxpZGVfX3NsaWRle2JhY2tmYWNlLScKICAgICAgICAgICAgICAgICAgICAgICAgYid2aXNpYmlsaXR5OmhpZGRlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zLWZsZXgtbmVnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtsaXN0LXN0eWxlLXR5cGU6bm9uZSFpbXBvcnRhbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlfS5zcGxpZGVfX3NsaWRlIGltZ3t2ZXJ0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidjYWwtYWxpZ246Ym90dG9tfS5zcGxpZGVfX3NwaW5uZXJ7YW5pbWF0aW9uOnNwbGlkZS1sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29hZGluZyAxcyBsaW5lYXIgaW5maW5pdGU7Ym9yZGVyOjJweCBzb2xpZCAjOTk5O2JvcmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXItbGVmdC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtib3R0b206MCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7Y29udGFpbjpzdHJpY3Q7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7bGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6MDttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDoyMHB4fS5zcGxpZGVfX3Nye2NsaXA6cmVjdCgwIDAgMCAwKTtib3JkZXI6MDtoZWlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJzphYnNvbHV0ZTt3aWR0aDoxcHh9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fdG9nZ2xlX19wbGF5LC5zcGxpZGVfX3RvZ2dsZV9fcGF1c2V7ZGlzcGxheTpub25lfScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX190b2dnbGUuaXMtYWN0aXZlIC5zcGxpZGVfX3RvZ2dsZV9fcGF1c2V7ZGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXk6aW5saW5lfS5zcGxpZGVfX3RyYWNre292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjonCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVsYXRpdmU7ei1pbmRleDowfUBrZXlmcmFtZXMgc3BsaWRlLWxvYWRpbmd7MCV7dHJhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzZm9ybTpyb3RhdGUoMCl9dG97dHJhbnNmb3JtOnJvdGF0ZSgxdHVybil9fS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ190cmFjay0tZHJhZ2dhYmxley13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lOy13ZWJraXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLXVzZXItc2VsZWN0Om5vbmU7LW1zLXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmV9LnNwbGlkZV9fdHJhY2stLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V7bWFyZ2luOjAhaW1wb3J0YW50O29wYWNpdHk6MDt6LWluZGV4OjB9LnNwbGlkZV9fdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrLS1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtYWN0aXZle29wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaXR5OjE7ei1pbmRleDoxfS5zcGxpZGUtLXJ0bHtkaXJlY3Rpb246cnRsfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ190cmFjay0tdHRiPi5zcGxpZGVfX2xpc3R7ZGlzcGxheTpibG9ja30uc3BsaWRlX19hcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3d7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZDojY2NjO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2N1cnNvcjpwb2ludGVyO2RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MmVtOy1tcy1mbGV4LXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO29wYWNpdHk6Ljc7cGFkZGluZycKICAgICAgICAgICAgICAgICAgICAgICAgYic6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01JwogICAgICAgICAgICAgICAgICAgICAgICBiJzAlKTt3aWR0aDoyZW07ei1pbmRleDoxfS5zcGxpZGVfX2Fycm93IHN2Z3tmaWxsOiMwMDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO2hlaWdodDoxLjJlbTt3aWR0aDoxLjJlbX0uc3BsaWRlX19hcnJvdzpob3Zlcjpub3QoOicKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNhYmxlZCl7b3BhY2l0eTouOX0uc3BsaWRlX19hcnJvdzpkaXNhYmxlZHtvcGFjaXR5JwogICAgICAgICAgICAgICAgICAgICAgICBiJzouM30uc3BsaWRlX19hcnJvdzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OjFlbScKICAgICAgICAgICAgICAgICAgICAgICAgYid9LnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19hcnJvdy0tbmV4dHtyaWdodDoxZW19LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fYXJyb3c6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6M3B4fS5zcGxpZGVfX3BhZ2luYXRpb257Ym90dG9tOi41ZW07bGVmdDowO3BhZGRpbmc6JwogICAgICAgICAgICAgICAgICAgICAgICBiJzAgMWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7ei1pbmRleDoxfS5zcGxpZGVfX3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdpbmF0aW9uX19wYWdle2JhY2tncm91bmQ6I2NjYztib3JkZXI6MDtib3JkZXItcmFkaScKICAgICAgICAgICAgICAgICAgICAgICAgYid1czo1MCU7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjhweDttYXJnaW46M3B4O29wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaXR5Oi43O3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2Zvcm0gLjJzIGxpbmVhcjt3aWR0aDo4cHh9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMtYWN0aXZle2JhY2tncm91bmQ6I2ZmZjt0cmFuc2Zvcm06c2NhbGUoMS40KTt6LWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDoxfS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6aG92ZXJ7Y3Vyc29yOnBvaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO29wYWNpdHk6Ljl9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1cy12aXNpYmxleycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlLmlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1mb2N1cy1pbiAuc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmZvY3Vze291dGxpbmU6M3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19wcm9ncmVzc19fYicKICAgICAgICAgICAgICAgICAgICAgICAgYidhcntiYWNrZ3JvdW5kOiNjY2M7aGVpZ2h0OjNweH0uc3BsaWRlX19zbGlkZXstd2Via2l0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCl9LnNwbGlkZV9fc2xpZGU6Zm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Vze291dGxpbmU6MH1Ac3VwcG9ydHMob3V0bGluZS1vZmZzZXQ6LTNweCl7LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidfX3NsaWRlOmZvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1vZmZzZXQ6LTNweH19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0Om4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lKXsuc3BsaWRlX19zbGlkZTpmb2N1cy12aXNpYmxle2JvcmRlcjozcHggc29saWQgIycKICAgICAgICAgICAgICAgICAgICAgICAgYicwYmZ9fUBzdXBwb3J0cyhvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlLmlzLWZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1pbiAuc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lLW9mZnNldDotM3B4fX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0Om5vbmUpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcjozcHggc29saWQgIzBiZn0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3RyYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaz4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRlOmZvY3Vze2JvcmRlci1jb2xvcjojMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidiZn19LnNwbGlkZV9fdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5zcGxpZGVfX3RvZ2dsZTpmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHh9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX190b2dnbGU6Zm9jdXN7b3V0bGluZScKICAgICAgICAgICAgICAgICAgICAgICAgYic6M3B4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3RyYWNrLS1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F2Pi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGV7Ym9yZGVyOjNweCBzb2xpZCB0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXJ9LnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7Ym9yZGVyOjNweCBzb2xpZCAjMDAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OmF1dG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO3JpZ2h0OjFlbX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3Zne3RyYW5zZm9ybTpzY2FsZVgoMSl9LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VfX2Fycm93LS1uZXh0e2xlZnQ6MWVtO3JpZ2h0OmF1dG99LnNwbGlkZV9fYXJyb3dzLS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRsIC5zcGxpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKC0xKX0ucycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3d7bGVmdDo1MCU7dHJhbnNmb3JtJwogICAgICAgICAgICAgICAgICAgICAgICBiJzp0cmFuc2xhdGUoLTUwJSl9LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLS1wcmV2e3RvcDoxZW19LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3ctLScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcmV2IHN2Z3t0cmFuc2Zvcm06cm90YXRlKC05MGRlZyl9LnNwbGlkZV9fYXJyb3dzLS10JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RiIC5zcGxpZGVfX2Fycm93LS1uZXh0e2JvdHRvbToxZW07dG9wOmF1dG99LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cmFuc2Zvcm06cm90YScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSg5MGRlZyl9LnNwbGlkZV9fcGFnaW5hdGlvbi0tdHRie2JvdHRvbTowO2Rpc3BsYXk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJy1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGV4LWRpcmVjdGlvbjpjb2x1bW47bGVmdDphdXRvO3BhZGRpbmc6MWVtIDA7cmlnaHQ6LicKICAgICAgICAgICAgICAgICAgICAgICAgYic1ZW07dG9wOjB9JywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2Nzcy9zcGxpZGUubWluLmNzcycsCiAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJy5zcGxpZGVfX2NvbnRhaW5lcntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduOnJlbGF0aXZlfS5zcGxpZGVfX2xpc3R7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVuO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzttYXJnaW46MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH0uc3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy1pbml0aWFsaXplZDpub3QoLmlzLWFjdGl2ZSkgLnNwbGlkZV9fbGlzdHtkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxheTpibG9ja30uc3BsaWRlX19wYWdpbmF0aW9uey1tcy1mbGV4LWFsaWduOmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXk6ZmxleDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LW1zLWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50ZXItZXZlbnRzOm5vbmV9LnNwbGlkZV9fcGFnaW5hdGlvbiBsaXtkaXNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTtsaXN0LXN0eWxlLXR5cGU6bm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmU7bWFyZ2luOjA7cG9pbnRlci1ldmVudHM6YXV0b30uc3BsaWRlOm5vdCguaXMtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZXJmbG93KSAuc3BsaWRlX19wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0uc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fcHJvZ3Jlc3NfX2Jhcnt3aWR0aDowfS5zcGxpZGV7cG9zaXRpb246cmVsYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlO3Zpc2liaWxpdHk6aGlkZGVufS5zcGxpZGUuaXMtaW5pdGlhbGl6ZWQsLnNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUuaXMtcmVuZGVyZWR7dmlzaWJpbGl0eTp2aXNpYmxlfS5zcGxpZGVfX3NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtib3gtc2l6aW5nOmJvcmRlci0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYm94Oy1tcy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtsaXN0LXN0eWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy10eXBlOm5vbmUhaW1wb3J0YW50O21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX19zbGlkZSBpbWd7dmVydGljYWwtYWxpZ246Ym90dG9tfS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX19zcGlubmVye2FuaW1hdGlvbjpzcGxpZGUtbG9hZGluZyAxcyBsaW5lYXIgaW5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXRlO2JvcmRlcjoycHggc29saWQgIzk5OTtib3JkZXItbGVmdC1jb2xvcjp0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7Ym90dG9tOjA7Y29udGFpbjpzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWN0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyMHB4O2xlZnQ6MDttYXJnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoyMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidweH0uc3BsaWRlX19zcntjbGlwOnJlY3QoMCAwIDAgMCk7Ym9yZGVyOjA7aGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb246YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIC5zcGxpZGVfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGVfX3BhdXNle2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNwbGF5Om5vbmV9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWRlX190JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29nZ2xlX19wYXVzZXtkaXNwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3tvdmVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH1Aa2V5ZnJhbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBzcGxpZGUtbG9hZGluZ3swJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Zvcm06cm90YXRlKDF0dXJuKX19LnNwbGlkZV9fdHJhY2stLWRyYWdnYWJsZXstdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ190cmFjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRle21hcmdpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MCFpbXBvcnRhbnQ7b3BhY2l0eTowO3otaW5kZXg6MH0uc3BsaWRlX190cmFjay0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7b3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NpdHk6MTt6LWluZGV4OjF9LnNwbGlkZS0tcnRse2RpcmVjdGlvbjpydGx9LnNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVfX3RyYWNrLS10dGI+LnNwbGlkZV9fbGlzdHtkaXNwbGF5OmJsb2NrfS5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19hcnJvd3stbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcjtiYWNrZ3JvdW5kOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cnNvcjpwb2ludGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQ6MmVtOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudGVyO29wYWNpdHk6Ljc7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdXRlO3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3dpZHRoOjJlbTt6LWluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneDoxfS5zcGxpZGVfX2Fycm93IHN2Z3tmaWxsOiMwMDA7aGVpZ2h0OjEuMmVtO3dpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aDoxLjJlbX0uc3BsaWRlX19hcnJvdzpob3Zlcjpub3QoOmRpc2FibGVkKXtvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2l0eTouOX0uc3BsaWRlX19hcnJvdzpkaXNhYmxlZHtvcGFjaXR5Oi4zfS5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19hcnJvdzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMwYmY7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OjFlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9LnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19hcnJvdy0tbmV4dHtyaWdodDoxZW19LnNwbGlkZS5pcy1mb2N1cy1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gLnNwbGlkZV9fYXJyb3c6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzBiZjtvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3BhZ2luYXRpb257Ym90dG9tOi41ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2xlZnQ6MDtwYWRkaW5nOjAgMWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3otaW5kZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdle2JhY2tncm91bmQ6IycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTppbmxpbmUtYmwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2NrO2hlaWdodDo4cHg7bWFyZ2luOjNweDtvcGFjaXR5Oi43O3BhZGRpbmc6MDtwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGxpbmVhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7d2lkdGg6OHB4fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2UuaXMtYWN0aXZle2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrZ3JvdW5kOiNmZmY7dHJhbnNmb3JtOnNjYWxlKDEuNCk7ei1pbmRleDoxfS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmhvdmVye2N1cnNvcjpwb2ludGVyO29wYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaXR5Oi45fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuaXMtZm9jdXMtaW4gLnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3Byb2dyZXNzX19iYXJ7YmFja2dyb3VuZDojY2NjO2hlaWdodDozcHh9LnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VfX3NsaWRley13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwKX0uc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjB9QHN1cHBvcnRzKG91dGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlX19zbGlkZTpmb2N1cy12aXNpYmxle291JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0Oi0zcHh9fUBtZWRpYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6bm9uZSl7LnNwbGlkZV9fc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlOmZvY3VzLXZpc2libGV7Ym9yZGVyOjNweCBzb2xpZCAjMGJmfX1Ac3VwcG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzKG91dGxpbmUtb2Zmc2V0Oi0zcHgpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVfX3NsaWRlOmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2Zmc2V0Oi0zcHh9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6bm9uZSl7LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX19zbGlkZTpmb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7Ym9yZGVyOjNweCBzb2xpZCAjMGJmfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3RyYWNrPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlci1jb2xvcjojMGJmfX0uc3BsaWRlX190b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVfX3RvZ2dsZTpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX190b2dnbGU6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZmZzZXQ6M3B4fS5zcGxpZGVfX3RyYWNrLS1uYXY+LnNwbGlkZV9fbGlzdD4uc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZV9fc2xpZGV7Ym9yZGVyOjNweCBzb2xpZCB0cmFuc3BhcmVudDtjdXJzb3I6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50ZXJ9LnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlX19saXN0Pi5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19zbGlkZS5pcy1hY3RpdmV7Ym9yZGVyOjNweCBzb2xpZCAjMDAwfS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OmF1dG87cmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0OjFlbX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc3Zne3RyYW5zZm9ybTpzY2FsZVgoMSl9LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX2Fycm93LS1uZXh0e2xlZnQ6MWVtO3JpZ2h0OmF1dG99LnNwbGlkZV9fJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cmFuc2Zvcm06cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxlWCgtMSl9LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3d7bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnQ6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSl9LnNwbGlkZV9fYXJyb3dzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0tdHRiIC5zcGxpZGVfX2Fycm93LS1wcmV2e3RvcDoxZW19LnNwbGlkZV9fYXJybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3cy0tdHRiIC5zcGxpZGVfX2Fycm93LS1wcmV2IHN2Z3t0cmFuc2Zvcm06cm90YXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgtOTBkZWcpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93LS1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dHtib3R0b206MWVtO3RvcDphdXRvfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyl9LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX3BhZ2luYXRpb24tLXR0Yntib3R0b206MDtkaXNwbGF5Oi1tcy1mbGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JveDtkaXNwbGF5OmZsZXg7LW1zLWZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4LScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaXJlY3Rpb246Y29sdW1uO2xlZnQ6YXV0bztwYWRkaW5nOjFlbSAwO3JpZ2h0Oi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNWVtO3RvcDowfScsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9jc3Mvc3BsaWRlLm1pbi5jc3MnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMjY6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJy5zcGxpZGVfX3RyYWNrLS1uYXY+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZXtib3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyOjNweCBzb2xpZCB0cmFuc3BhcmVudDtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi43fScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjdGl2ZXtib3JkZXI6M3B4IHNvbGlkICMwMGJmZmY7b3BhY2l0eToxfS5zcGxpZGVfX2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvd3stbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtjdXJzb3I6cG9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXI7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjIuNWVtOy0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXMtZmxleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7d2lkdGg6Mi41ZW07ei1pbmRleDoxfS5zcGxpZGVfX2Fycm93IHN2Z3tmaWxsOiMwMGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmZmO2hlaWdodDoyLjVlbTt0cmFuc2l0aW9uOmZpbGwgLjJzIGxpbmVhcjt3aWR0aDoyLicKICAgICAgICAgICAgICAgICAgICAgICAgYic1ZW19LnNwbGlkZV9fYXJyb3c6aG92ZXI6bm90KDpkaXNhYmxlZCkgc3Zne2ZpbGw6IzY2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q5ZmZ9LnNwbGlkZV9fYXJyb3c6ZGlzYWJsZWR7b3BhY2l0eTouM30uc3BsaWRlX19hcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3c6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMDBiZmZmO291dGxpbmUtbycKICAgICAgICAgICAgICAgICAgICAgICAgYidmZnNldDozcHh9LnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDoxZW19LnNwbGlkZV9fYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293LS1wcmV2IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKC0xKX0uc3BsaWRlX19hcnJvdy0tbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHR7cmlnaHQ6MWVtfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fYXJyb3c6Zm9jdScKICAgICAgICAgICAgICAgICAgICAgICAgYidze291dGxpbmU6M3B4IHNvbGlkICMwMGJmZmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19wYWdpbmF0aW9ue2JvdHRvbTouNWVtO2xlZnQ6MDtwYWRkaW5nOjAgMWVtO3Bvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbjphYnNvbHV0ZTtyaWdodDowO3otaW5kZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfcGFnZXtiYWNrZ3JvdW5kOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoxMHB4O21hcmdpbjozcHg7cGFkZGluZzowO3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzIGxpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlYXIsdHJhbnNmb3JtIC4ycyBsaW5lYXI7d2lkdGg6MTBweH0uc3BsaWRlX19wYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbl9fcGFnZS5pcy1hY3RpdmV7YmFja2dyb3VuZDojMDBiZmZmO3RyYW5zZm9ybTpzY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGUoMS40KTt6LWluZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpob3ZlcntiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidja2dyb3VuZDojNjZkOWZmO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6Ljl9LnNwbGlkZV9fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMDBiZmZmO291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fY29udGFpbmVye2JveC1zaXppbmc6Ym9yZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci1ib3g7cG9zaXRpb246cmVsYXRpdmV9LnNwbGlkZV9fbGlzdHtiYWNrZmFjZS12aXNpYicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbGl0eTpoaWRkZW47ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzoxMDAlO21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50fS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzLWluaXRpYWxpemVkOm5vdCguaXMtYWN0aXZlKSAuc3BsaWRlX19saXN0e2Rpc3BsYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5OmJsb2NrfS5zcGxpZGVfX3BhZ2luYXRpb257LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7LW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDstbXMtZmxleC1wYWNrOmNlbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYic7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MDtwb2ludGVyLWV2ZW50czpub25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19wYWdpbmF0aW9uIGxpe2Rpc3BsYXk6aW5saW5lLWJsb2NrO2xpbmUtaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodDoxO2xpc3Qtc3R5bGUtdHlwZTpub25lO21hcmdpbjowO3BvaW50ZXItZXZlbnRzOicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdXRvfS5zcGxpZGU6bm90KC5pcy1vdmVyZmxvdykgLnNwbGlkZV9fcGFnaW5hdGlvbntkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzcGxheTpub25lfS5zcGxpZGVfX3Byb2dyZXNzX19iYXJ7d2lkdGg6MH0uc3BsaWRle3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjpyZWxhdGl2ZTt2aXNpYmlsaXR5OmhpZGRlbn0uc3BsaWRlLmlzLWluaXRpYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXplZCwuc3BsaWRlLmlzLXJlbmRlcmVke3Zpc2liaWxpdHk6dmlzaWJsZX0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19fc2xpZGV7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47Ym94LXNpemluZzpib3JkZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWJveDstbXMtZmxleC1uZWdhdGl2ZTowO2ZsZXgtc2hyaW5rOjA7bGlzdC1zdHlsZS10eScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZTpub25lIWltcG9ydGFudDttYXJnaW46MDtwb3NpdGlvbjpyZWxhdGl2ZX0uc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19fc2xpZGUgaW1ne3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0uc3BsaWRlX19zcGlubmVye2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmltYXRpb246c3BsaWRlLWxvYWRpbmcgMXMgbGluZWFyIGluZmluaXRlO2JvcmRlcjoycCcKICAgICAgICAgICAgICAgICAgICAgICAgYid4IHNvbGlkICMwMGJmZmY7Ym9yZGVyLWxlZnQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1yYWRpdXM6NTAlO2JvdHRvbTowO2NvbnRhaW46c3RyaWN0O2Rpc3BsYXk6aW5saW5lLWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG9jaztoZWlnaHQ6MjBweDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MjBweH0uc3BsaWRlX19zcntjbGlwOnJlY3QoMCAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwIDApO2JvcmRlcjowO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvZycKICAgICAgICAgICAgICAgICAgICAgICAgYidnbGUuaXMtYWN0aXZlIC5zcGxpZGVfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19wYXVzZXtkaXNwbGF5Om5vbmV9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fdG9nZ2xlX19wYXVzZXtkaXNwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3tvdmVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH1Aa2V5ZnJhbWVzIHNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUtbG9hZGluZ3swJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlKDF0dXJuKX19LnNwbGlkZV9fdHJhY2stLWRyYWdnYWJsZXstd2Via2l0LXRvdWNoLScKICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zcGxpZGVfX3RyYWNrLS1mYWRlPi5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX19saXN0Pi5zcGxpZGVfX3NsaWRle21hcmdpbjowIWltcG9ydGFudDtvcGFjaXR5OjA7eicKICAgICAgICAgICAgICAgICAgICAgICAgYictaW5kZXg6MH0uc3BsaWRlX190cmFjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19zbGlkZS5pcy1hY3RpdmV7b3BhY2l0eToxO3otaW5kZXg6MX0uc3BsaWRlLS1ydGx7ZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbjpydGx9LnNwbGlkZV9fdHJhY2stLXR0Yj4uc3BsaWRlX19saXN0e2Rpc3BsYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5OmJsb2NrfS5zcGxpZGVfX3Byb2dyZXNzX19iYXJ7YmFja2dyb3VuZDojY2NjO2hlaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6M3B4fS5zcGxpZGVfX3NsaWRley13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2InCiAgICAgICAgICAgICAgICAgICAgICAgIGInYSgwLDAsMCwwKX0uc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjB9QHN1cHBvcnRzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlX19zbGlkZTpmb2N1cy12aXNpYmxle291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RsaW5lOjNweCBzb2xpZCAjMDBiZmZmO291dGxpbmUtb2Zmc2V0Oi0zcHh9fUBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6bm9uZSl7LnNwbGlkZV9fc2xpZGU6ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvY3VzLXZpc2libGV7Ym9yZGVyOjNweCBzb2xpZCAjMDBiZmZmfX1Ac3VwcG9ydHMob3V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpbmUtb2Zmc2V0Oi0zcHgpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMwMGJmZmY7b3V0bGluZS1vZmZzZXQ6LTNweCcKICAgICAgICAgICAgICAgICAgICAgICAgYid9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDpub25lKXsuc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcy1mb2N1cy1pbiAuc3BsaWRlX19zbGlkZTpmb2N1c3tib3JkZXI6M3B4IHNvbGlkICMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMDBiZmZmfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fdHJhY2s+LnNwbGlkZV9fbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc3Q+LnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwMGJmZmZ9fS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX190b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LnNwbGlkZV9fdG9nZ2xlOmZvY3VzLXZpc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmxle291dGxpbmU6M3B4IHNvbGlkICMwMGJmZmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3RvZ2dsZTpmb2N1c3tvdXRsaW5lOjNweCBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fYXJyb3dzLS1ydGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQ6YXV0bztyaWdodDoxZW19LnNwbGlkZV9fYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1wcmV2IHN2Z3t0cmFuc2Zvcm06c2NhbGVYJwogICAgICAgICAgICAgICAgICAgICAgICBiJygxKX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tbmV4dHtsZWZ0OjEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW07cmlnaHQ6YXV0b30uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHQgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19hcnJvd3tsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfS5zcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tcHJldnt0b3A6MWVtfS5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tcHJldiBzdmd7dHJhbnNmb3JtOnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUoLTkwZGVnKX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHR7Ym90dG9tOjFlbTt0b3A6YXV0b30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfYXJyb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5zcGxpZGVfX3BhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dpbmF0aW9uLS10dGJ7Ym90dG9tOjA7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGV4Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb246Y29sdW1uOycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWZ0OmF1dG87cGFkZGluZzoxZW0gMDtyaWdodDouNWVtO3RvcDowfScsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9jc3MvdGhlbWVzL3NwbGlkZS1za3libHVlLm1pbi5jc3MnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicuc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2JvcmRlcjozcHggc29saWQgdHJhbnNwYXJlbnQ7Y3Vyc29yOnBvaW50ZXI7b3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NpdHk6Ljd9LnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlX19saXN0Pi5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19zbGlkZS5pcy1hY3RpdmV7Ym9yZGVyOjNweCBzb2xpZCAjMDBiZmZmO29wYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXR5OjF9LnNwbGlkZV9fYXJyb3d7LW1zLWZsZXgtYWxpZ246Y2VudGVyO2FsaWduJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtib3JkZXI6MDtibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZGVyLXJhZGl1czowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6LW1zLWZsZXhib3gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6Mi41ZW07LW1zLWZsZXgtcGFjazpjZW50ZXI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzowO3Bvc2l0aW9uOmFic29sdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO3dpZHRoOjIuNWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbTt6LWluZGV4OjF9LnNwbGlkZV9fYXJyb3cgc3Zne2ZpbGw6IzAwYmZmZjtoZWlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0OjIuNWVtO3RyYW5zaXRpb246ZmlsbCAuMnMgbGluZWFyO3dpZHRoOjIuNWVtfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX19hcnJvdzpob3Zlcjpub3QoOmRpc2FibGVkKSBzdmd7ZmlsbDojNjYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDlmZn0uc3BsaWRlX19hcnJvdzpkaXNhYmxlZHtvcGFjaXR5Oi4zfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19hcnJvdzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMwMGJmZmY7bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OjFlbX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19hcnJvdy0tbmV4dHtyaWdodDoxZW19LnNwbGlkZS5pcy1mb2N1cy1pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLnNwbGlkZV9fYXJyb3c6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzAwYmZmZjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3BhZ2luYXRpb257Ym90dG9tOi41JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtO2xlZnQ6MDtwYWRkaW5nOjAgMWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwO3otaW5kZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdle2JhY2tncm91bmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTppbmxpbmUtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Jsb2NrO2hlaWdodDoxMHB4O21hcmdpbjozcHg7cGFkZGluZzowO3Bvc2l0aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWxhdGl2ZTt0cmFuc2l0aW9uOmJhY2tncm91bmQtY29sb3IgLjJzIGxpbmVhciwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJhbnNmb3JtIC4ycyBsaW5lYXI7d2lkdGg6MTBweH0uc3BsaWRlX19wYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbl9fcGFnZS5pcy1hY3RpdmV7YmFja2dyb3VuZDojMDBiZmZmO3RyYW5zZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6c2NhbGUoMS40KTt6LWluZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaG92ZXJ7YmFja2dyb3VuZDojNjZkOWZmO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy45fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXtvdXRsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZTozcHggc29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtZm9jdXMtaW4gLnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZTozcHggc29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfX2NvbnRhaW5lcntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmVsYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlfS5zcGxpZGVfX2xpc3R7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47ZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO21hcmdpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH0uc3BsaWRlLmlzLWluaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWFsaXplZDpub3QoLmlzLWFjdGl2ZSkgLnNwbGlkZV9fbGlzdHtkaXNwbGF5OmJsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ja30uc3BsaWRlX19wYWdpbmF0aW9uey1tcy1mbGV4LWFsaWduOmNlbnRlcjthbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneDstbXMtZmxleC13cmFwOndyYXA7ZmxleC13cmFwOndyYXA7LW1zLWZsZXgtcGFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjA7cG9pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictZXZlbnRzOm5vbmV9LnNwbGlkZV9fcGFnaW5hdGlvbiBsaXtkaXNwbGF5OmlubGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmUtYmxvY2s7bGluZS1oZWlnaHQ6MTtsaXN0LXN0eWxlLXR5cGU6bm9uZTttYXJnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luOjA7cG9pbnRlci1ldmVudHM6YXV0b30uc3BsaWRlOm5vdCguaXMtb3ZlcmZsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3KSAuc3BsaWRlX19wYWdpbmF0aW9ue2Rpc3BsYXk6bm9uZX0uc3BsaWRlX19wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ3Jlc3NfX2Jhcnt3aWR0aDowfS5zcGxpZGV7cG9zaXRpb246cmVsYXRpdmU7dmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2liaWxpdHk6aGlkZGVufS5zcGxpZGUuaXMtaW5pdGlhbGl6ZWQsLnNwbGlkZS5pcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictcmVuZGVyZWR7dmlzaWJpbGl0eTp2aXNpYmxlfS5zcGxpZGVfX3NsaWRle2JhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6MDtsaXN0LXN0eWxlLXR5cGU6bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmUhaW1wb3J0YW50O21hcmdpbjowO3Bvc2l0aW9uOnJlbGF0aXZlfS5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX19zbGlkZSBpbWd7dmVydGljYWwtYWxpZ246Ym90dG9tfS5zcGxpZGVfX3NwaW5uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vye2FuaW1hdGlvbjpzcGxpZGUtbG9hZGluZyAxcyBsaW5lYXIgaW5maW5pdGU7YicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcmRlcjoycHggc29saWQgIzAwYmZmZjtib3JkZXItbGVmdC1jb2xvcjp0cmFuc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7Ym90dG9tOjA7Y29udGFpbjpzdHJpY3Q7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyMHB4O2xlZnQ6MDttYXJnaW46YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoyMHB4fS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19zcntjbGlwOnJlY3QoMCAwIDAgMCk7Ym9yZGVyOjA7aGVpZ2h0OjFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3g7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6YWJzb2x1dGU7d2lkdGg6MXB4fS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX3RvZ2dsZV9fcGxheSwuc3BsaWRlX190b2dnbGVfX3BhdXNle2Rpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5Om5vbmV9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2ZSAuc3BsaWRlX190b2dnbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19wYXVzZXtkaXNwbGF5OmlubGluZX0uc3BsaWRlX190cmFja3tvdmVyZmxvdzonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlO3otaW5kZXg6MH1Aa2V5ZnJhbWVzIHNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUtbG9hZGluZ3swJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6cm90YXRlKDF0dXJuKX19LnNwbGlkZV9fdHJhY2stLWRyYWdnYWJsZXstd2Via2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lOy1tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5zcGxpZGVfX3RyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRle21hcmdpbjowIWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvcnRhbnQ7b3BhY2l0eTowO3otaW5kZXg6MH0uc3BsaWRlX190cmFjay0tZmFkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7b3BhY2l0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MTt6LWluZGV4OjF9LnNwbGlkZS0tcnRse2RpcmVjdGlvbjpydGx9LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3RyYWNrLS10dGI+LnNwbGlkZV9fbGlzdHtkaXNwbGF5OmJsb2NrfS5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19wcm9ncmVzc19fYmFye2JhY2tncm91bmQ6I2NjYztoZWlnaHQ6M3B4fS5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlX19zbGlkZXstd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCl9LnNwbGlkZV9fc2xpZGU6Zm9jdXN7b3V0bGluZTowfUBzdXBwb3J0cyhvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZS1vZmZzZXQ6LTNweCl7LnNwbGlkZV9fc2xpZGU6Zm9jdXMtdmlzaWJsZXtvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bGluZTozcHggc29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDotM3B4fX1AbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0Om5vbmUpey5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19zbGlkZTpmb2N1cy12aXNpYmxle2JvcmRlcjozcHggc29saWQgIzAwYmZmZn19QCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdXBwb3J0cyhvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlLmlzLWZvY3VzLWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAuc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMDBiZmZmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztvdXRsaW5lLW9mZnNldDotM3B4fX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoLWNvbnRyYXN0Om5vbmUpey5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlOmZvY3Vze2JvcmRlcjozcHggc29saWQgIzAwYmZmZn0uc3BsaWRlLmlzLWZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cy1pbiAuc3BsaWRlX190cmFjaz4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZTpmb2N1c3tib3JkZXItY29sb3I6IzAwYmZmZn19LnNwbGlkZV9fdG9nZ2xle2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJzb3I6cG9pbnRlcn0uc3BsaWRlX190b2dnbGU6Zm9jdXMtdmlzaWJsZXtvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZTozcHggc29saWQgIzAwYmZmZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMtZm9jdXMtaW4gLnNwbGlkZV9fdG9nZ2xlOmZvY3Vze291dGxpbmU6M3B4IHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xpZCAjMDBiZmZmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlX19hcnJvd3MtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDphdXRvO3JpZ2h0OjFlbX0ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2Zvcm06c2NhbGVYKDEpfS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2FyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvdy0tbmV4dHtsZWZ0OjFlbTtyaWdodDphdXRvfS5zcGxpZGVfX2Fycm93cy0tcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0bCAuc3BsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHJhbnNmb3JtOnNjYWxlWCgtMSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcGxpZGVfX2Fycm93e2xlZnQ6NTAlO3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fuc2Zvcm06dHJhbnNsYXRlKC01MCUpfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlX19hcnJvdy0tcHJldnt0b3A6MWVtfS5zcGxpZGVfX2Fycm93cy0tdHRiIC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19hcnJvdy0tcHJldiBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgtOTBkZWcpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tbmV4dHtib3R0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtOjFlbTt0b3A6YXV0b30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5zcGxpZGVfX3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpbmF0aW9uLS10dGJ7Ym90dG9tOjA7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheTpmbGV4Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC1kaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOmNvbHVtbjtsZWZ0OmF1dG87cGFkZGluZzoxZW0gMDtyaWdodDouNWVtO3RvcDowfScsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9jc3MvdGhlbWVzL3NwbGlkZS1za3libHVlLm1pbi5jc3MnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMjc6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJy5zcGxpZGVfX3RyYWNrLS1uYXY+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZXtib3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyOjNweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjRweDtjdXJzb3I6cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvaW50ZXI7b3BhY2l0eTouN30uc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfX2xpc3Q+JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX3NsaWRlLmlzLWFjdGl2ZXtib3JkZXI6M3B4IHNvbGlkICMyMGIyYWE7b3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNpdHk6MX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvd3tsZWZ0OjUwJScKICAgICAgICAgICAgICAgICAgICAgICAgYic7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZV9fYXJyb3ctLXByZXZ7dG9wOjFlbX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKX0uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3ctLW5leHR7Ym90dG9tOjFlbTt0b3A6YXV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ299LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3ctLW5leHQgc3Zne3RyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2Zvcm06cm90YXRlKDkwZGVnKX0uc3BsaWRlX19wYWdpbmF0aW9uLS10dGJ7Ym90dG9tOicKICAgICAgICAgICAgICAgICAgICAgICAgYicwO2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWRpcmVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsZWZ0OmF1dG87cGFkZGluZzoxZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDA7cmlnaHQ6MWVtO3RvcDowfS5zcGxpZGVfX3BhZ2luYXRpb24tLXR0YiAuc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfcGFnaW5hdGlvbl9fcGFnZXtoZWlnaHQ6MjBweDt3aWR0aDo1cHh9LnNwbGlkZV9fYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293ey1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2N1cnNvcjpwb2ludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsYXk6ZmxleDtoZWlnaHQ6Mi41ZW07LW1zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7cGFkZGluZzowO3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpOycKICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aDoyLjVlbTt6LWluZGV4OjF9LnNwbGlkZV9fYXJyb3cgc3Zne2ZpbGw6IzIwYjJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2E7aGVpZ2h0OjIuNWVtO3RyYW5zaXRpb246ZmlsbCAuMnMgbGluZWFyO3dpZHRoOjIuNWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbX0uc3BsaWRlX19hcnJvdzpob3Zlcjpub3QoOmRpc2FibGVkKSBzdmd7ZmlsbDojNTdlMScKICAgICAgICAgICAgICAgICAgICAgICAgYidkOX0uc3BsaWRlX19hcnJvdzpkaXNhYmxlZHtvcGFjaXR5Oi4zfS5zcGxpZGVfX2Fycm93JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpmb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMyMGIyYWE7b3V0bGluZS1vZmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2V0OjNweH0uc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0OjFlbX0uc3BsaWRlX19hcnJvdycKICAgICAgICAgICAgICAgICAgICAgICAgYictLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zcGxpZGVfX2Fycm93LS1uZXh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tyaWdodDoxZW19LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX19hcnJvdzpmb2N1c3snCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0bGluZTozcHggc29saWQgIzIwYjJhYTtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidfX3BhZ2luYXRpb257Ym90dG9tOjFlbTtsZWZ0OjA7cGFkZGluZzowIDFlbTtwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ246YWJzb2x1dGU7cmlnaHQ6MDt6LWluZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V7YmFja2dyb3VuZDojY2NjO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6Mi41cHg7ZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXk6aW5saW5lLWJsb2NrO2hlaWdodDo1cHg7bWFyZ2luOjNweDtwYWRkaW5nOjA7cG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMnMgbGluZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncjt3aWR0aDoyMHB4fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2UuaXMtYWN0aXZle2JhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrZ3JvdW5kOiMyMGIyYWE7ei1pbmRleDoxfS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hvdmVye2JhY2tncm91bmQ6IzU3ZTFkOTtjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi45fS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmZvY3VzLXZpc2libGV7b3V0bGluZTozcHggcycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbGlkICMyMGIyYWE7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGUuaXMtZm9jdXMtaW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzInCiAgICAgICAgICAgICAgICAgICAgICAgIGInMGIyYWE7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3NsaWRley13ZWJraXQtdGFwLScKICAgICAgICAgICAgICAgICAgICAgICAgYidoaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKTtib3JkZXItcmFkaXVzOjRweH0uc3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZV9fc2xpZGU6Zm9jdXN7b3V0bGluZTowfUBzdXBwb3J0cyhvdXRsaW5lLW9mZnNldDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInLTNweCl7LnNwbGlkZV9fc2xpZGU6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIzIwYjJhYTtvdXRsaW5lLW9mZnNldDotM3B4fX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1oaWdoLWNvbnRyYXN0Om5vbmUpey5zcGxpZGVfX3NsaWRlOmZvY3VzLXZpc2libGV7Ym8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmRlcjozcHggc29saWQgIzIwYjJhYX19QHN1cHBvcnRzKG91dGxpbmUtb2Zmc2V0Oi0zcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid4KXsuc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3NsaWRlOmZvY3Vze291dGxpbmU6JwogICAgICAgICAgICAgICAgICAgICAgICBiJzNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUtb2Zmc2V0Oi0zcHh9fUBtZWRpYSBzY3JlZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6bm9uZSl7LnNwbGlkZS5pcy1mb2N1cy1pbiAucycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yZGVyOjNweCBzb2xpZCAjMjBiMmFhfS5zcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLWZvY3VzLWluIC5zcGxpZGVfX3RyYWNrPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlOmZvY3Vze2JvcmRlci1jb2xvcjojMjBiMmFhfX0uc3BsaWRlX19jb250YWluZXJ7YicKICAgICAgICAgICAgICAgICAgICAgICAgYidveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvbjpyZWxhdGl2ZX0uc3BsaWRlX19saXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGF5OmZsZXg7aGVpZ2h0OjEwMCU7bWFyZ2luOjAhaW1wb3J0YW50O3BhZGRpbmc6MCFpbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0YW50fS5zcGxpZGUuaXMtaW5pdGlhbGl6ZWQ6bm90KC5pcy1hY3RpdmUpIC5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19saXN0e2Rpc3BsYXk6YmxvY2t9LnNwbGlkZV9fcGFnaW5hdGlvbnstbXMtZmxleC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxpZ246Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtkaXNwbGF5Oi1tcy1mbGV4Ym94OycKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNwbGF5OmZsZXg7LW1zLWZsZXgtd3JhcDp3cmFwO2ZsZXgtd3JhcDp3cmFwOy1tcy1mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xleC1wYWNrOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbjowO3BvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyLWV2ZW50czpub25lfS5zcGxpZGVfX3BhZ2luYXRpb24gbGl7ZGlzcGxheTppbmxpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlLWJsb2NrO2xpbmUtaGVpZ2h0OjE7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luOjA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvaW50ZXItZXZlbnRzOmF1dG99LnNwbGlkZTpub3QoLmlzLW92ZXJmbG93KSAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fcGFnaW5hdGlvbntkaXNwbGF5Om5vbmV9LnNwbGlkZV9fcHJvZ3Jlc3NfX2Jhcnt3aScKICAgICAgICAgICAgICAgICAgICAgICAgYidkdGg6MH0uc3BsaWRle3Bvc2l0aW9uOnJlbGF0aXZlO3Zpc2liaWxpdHk6aGlkZGVufS5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlLmlzLWluaXRpYWxpemVkLC5zcGxpZGUuaXMtcmVuZGVyZWR7dmlzaWJpbGl0eTonCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlzaWJsZX0uc3BsaWRlX19zbGlkZXtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZGRlbjtibycKICAgICAgICAgICAgICAgICAgICAgICAgYid4LXNpemluZzpib3JkZXItYm94Oy1tcy1mbGV4LW5lZ2F0aXZlOjA7ZmxleC1zaHJpbms6JwogICAgICAgICAgICAgICAgICAgICAgICBiJzA7bGlzdC1zdHlsZS10eXBlOm5vbmUhaW1wb3J0YW50O21hcmdpbjowO3Bvc2l0aW9uOnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxhdGl2ZX0uc3BsaWRlX19zbGlkZSBpbWd7dmVydGljYWwtYWxpZ246Ym90dG9tfS5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlX19zcGlubmVye2FuaW1hdGlvbjpzcGxpZGUtbG9hZGluZyAxcyBsaW5lYXIgaW5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXRlO2JvcmRlcjoycHggc29saWQgIzIwYjJhYTtib3JkZXItbGVmdC1jb2xvcjp0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czo1MCU7Ym90dG9tOjA7Y29udGFpbjpzdHJpY3Q7ZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDoyMHB4O2xlZnQ6MDttYXJnaW46YXV0bztwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoyMHB4fS5zcGxpZGVfX3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncntjbGlwOnJlY3QoMCAwIDAgMCk7Ym9yZGVyOjA7aGVpZ2h0OjFweDttYXJnaW46LTFweCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B4fS5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnNwbGlkZV9fdG9nZ2xlX19wbGF5LC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX190b2dnbGVfX3BhdXNle2Rpc3BsYXk6bm9uZX0uc3BsaWRlX190b2dnbGUuaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLWFjdGl2ZSAuc3BsaWRlX190b2dnbGVfX3BhdXNle2Rpc3BsYXk6aW5saW5lfS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX190cmFja3tvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInMH1Aa2V5ZnJhbWVzIHNwbGlkZS1sb2FkaW5nezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidve3RyYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0uc3BsaWRlX190cmFjay0tZHJhZ2dhYmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3std2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNwbGlkZV9fdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrLS1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGV7bWFyZ2luOjAhaW1wb3J0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FudDtvcGFjaXR5OjA7ei1pbmRleDowfS5zcGxpZGVfX3RyYWNrLS1mYWRlPi5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX19saXN0Pi5zcGxpZGVfX3NsaWRlLmlzLWFjdGl2ZXtvcGFjaXR5OjE7ei1pbmRleDoxfScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlLS1ydGx7ZGlyZWN0aW9uOnJ0bH0uc3BsaWRlX190cmFjay0tdHRiPi5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19saXN0e2Rpc3BsYXk6YmxvY2t9LnNwbGlkZV9fcHJvZ3Jlc3NfX2JhcntiYWNrZ3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VuZDojY2NjO2hlaWdodDozcHh9LnNwbGlkZV9fdG9nZ2xle2N1cnNvcjpwb2ludGVyfScKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX190b2dnbGU6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMjBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJzJhYTtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX18nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9nZ2xlOmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMyMGIyYWE7b3V0bGluZS1vZmZzZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0OjNweH0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tcHJldntsZWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzphdXRvO3JpZ2h0OjFlbX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLXByZXYgc3Zne3RyYW5zZm9ybTpzY2FsZVgoMSl9LnNwbGlkZV9fYXJyb3dzLS1ydGwgLicKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVfX2Fycm93LS1uZXh0e2xlZnQ6MWVtO3JpZ2h0OmF1dG99LnNwbGlkZV9fYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSl9LnNwbGlkZV9fc2xpZGVyPi5zcGxpZGVfX2Fycm93cyAuc3BsaWRlX19hcnJvdy0tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXZ7bGVmdDotMi41ZW19LnNwbGlkZV9fc2xpZGVyPi5zcGxpZGVfX2Fycm93cyAuc3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZV9fYXJyb3ctLW5leHR7cmlnaHQ6LTIuNWVtfS5zcGxpZGV7cGFkZGluZzozZW19JywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2Nzcy90aGVtZXMvc3BsaWRlLXNlYS1ncmVlbi5taW4uY3NzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInLnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tib3JkZXI6M3B4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NHB4OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdXJzb3I6cG9pbnRlcjtvcGFjaXR5Oi43fS5zcGxpZGVfX3RyYWNrLS1uYXY+LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGUuaXMtYWN0aXZle2JvcmRlcjozcHggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NvbGlkICMyMGIyYWE7b3BhY2l0eToxfS5zcGxpZGVfX2Fycm93cy0tdHRiIC5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlX19hcnJvd3tsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUpfS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tcHJldnt0b3A6MWVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tcHJldiBzdmd7dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZV9fYXJyb3ctLW5leHR7Ym90dG9tOjFlbTt0b3A6YXV0b30uc3BsaWRlX19hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlKDkwZGVnKX0uc3BsaWRlX19wYWdpbmF0aW9uLS10dGJ7Ym90dG9tOjA7ZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWRpcmVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ246Y29sdW1uO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtsZWZ0OmF1dG87cGFkZGluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MWVtIDA7cmlnaHQ6MWVtO3RvcDowfS5zcGxpZGVfX3BhZ2luYXRpb24tLXR0YiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZXtoZWlnaHQ6MjBweDt3aWR0aDo1cHh9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX2Fycm93ey1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6Y2VudGVyO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7Ym9yZGVyLXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWRpdXM6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5Oi1tcy1mbGV4Ym94O2Rpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5OmZsZXg7aGVpZ2h0OjIuNWVtOy1tcy1mbGV4LXBhY2s6Y2VudGVyO2p1c3RpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5LWNvbnRlbnQ6Y2VudGVyO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKTt3aWR0aDoyLjVlbTt6LWluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDoxfS5zcGxpZGVfX2Fycm93IHN2Z3tmaWxsOiMyMGIyYWE7aGVpZ2h0OjIuNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbTt0cmFuc2l0aW9uOmZpbGwgLjJzIGxpbmVhcjt3aWR0aDoyLjVlbX0uc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fYXJyb3c6aG92ZXI6bm90KDpkaXNhYmxlZCkgc3Zne2ZpbGw6IzU3ZTFkOX0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZV9fYXJyb3c6ZGlzYWJsZWR7b3BhY2l0eTouM30uc3BsaWRlX19hcnJvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLW9mZnNldDozcHh9LnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdDoxZW19LnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VfX2Fycm93LS1wcmV2IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKC0xKX0uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfYXJyb3ctLW5leHR7cmlnaHQ6MWVtfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX2Fycm93OmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMyMGIyYWE7b3V0bGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Utb2Zmc2V0OjNweH0uc3BsaWRlX19wYWdpbmF0aW9ue2JvdHRvbToxZW07bGVmdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6MDtwYWRkaW5nOjAgMWVtO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7ei1pbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXg6MX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdle2JhY2tncm91bmQ6I2NjYztiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yZGVyOjA7Ym9yZGVyLXJhZGl1czoyLjVweDtkaXNwbGF5OmlubGluZS1ibG9jaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7aGVpZ2h0OjVweDttYXJnaW46M3B4O3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxhdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIC4ycyBsaW5lYXI7d2lkdGg6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIwcHh9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZS5pcy1hY3RpdmV7YmFja2dybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmQ6IzIwYjJhYTt6LWluZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaG92ZXJ7YmFja2dyb3VuZDojNTdlMWQ5O2N1cnNvcjpwb2ludGVyO29wYWNpdHk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy45fS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXMtdmlzaWJsZXtvdXRsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZTozcHggc29saWQgIzIwYjJhYTtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtZm9jdXMtaW4gLnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1c3tvdXRsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZTozcHggc29saWQgIzIwYjJhYTtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfX3NsaWRley13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtib3JkZXItcmFkaXVzOjRweH0uc3BsaWRlX19zbGlkZTpmb2N1c3tvdXRsaW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzowfUBzdXBwb3J0cyhvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlX19zbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLW9mZnNldDotM3B4fX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0Om5vbmUpey5zcGxpZGVfX3NsaWRlOmZvY3VzLXZpc2libGV7Ym9yZGVyOjNweCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc29saWQgIzIwYjJhYX19QHN1cHBvcnRzKG91dGxpbmUtb2Zmc2V0Oi0zcHgpey4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3NsaWRlOmZvY3Vze291dGxpbmU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUtb2Zmc2V0Oi0zcHh9fUBtZWRpYSBzYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6bm9uZSl7LnNwbGlkZS5pcy1mb2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXMtaW4gLnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yZGVyOjNweCBzb2xpZCAjMjBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzJhYX0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3RyYWNrPi5zcGxpZGVfXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0Pi5zcGxpZGVfX3NsaWRlOmZvY3Vze2JvcmRlci1jb2xvcjojMjBiMmFhfX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNwbGlkZV9fY29udGFpbmVye2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ246cmVsYXRpdmV9LnNwbGlkZV9fbGlzdHtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZW47ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50fS5zcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLWluaXRpYWxpemVkOm5vdCguaXMtYWN0aXZlKSAuc3BsaWRlX19saXN0e2RpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGF5OmJsb2NrfS5zcGxpZGVfX3BhZ2luYXRpb257LW1zLWZsZXgtYWxpZ246Y2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xheTpmbGV4Oy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDstbXMtZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9pbnRlci1ldmVudHM6bm9uZX0uc3BsaWRlX19wYWdpbmF0aW9uIGxpe2Rpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxO2xpc3Qtc3R5bGUtdHlwZTpubycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZTttYXJnaW46MDtwb2ludGVyLWV2ZW50czphdXRvfS5zcGxpZGU6bm90KC5pcy0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlcmZsb3cpIC5zcGxpZGVfX3BhZ2luYXRpb257ZGlzcGxheTpub25lfS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19wcm9ncmVzc19fYmFye3dpZHRoOjB9LnNwbGlkZXtwb3NpdGlvbjpyZWxhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdmU7dmlzaWJpbGl0eTpoaWRkZW59LnNwbGlkZS5pcy1pbml0aWFsaXplZCwuc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5pcy1yZW5kZXJlZHt2aXNpYmlsaXR5OnZpc2libGV9LnNwbGlkZV9fc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rle2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JveC1zaXppbmc6Ym9yZGVyLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidib3g7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowO2xpc3Qtc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLXR5cGU6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmV9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX3NsaWRlIGltZ3t2ZXJ0aWNhbC1hbGlnbjpib3R0b219LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfX3NwaW5uZXJ7YW5pbWF0aW9uOnNwbGlkZS1sb2FkaW5nIDFzIGxpbmVhciBpbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5pdGU7Ym9yZGVyOjJweCBzb2xpZCAjMjBiMmFhO2JvcmRlci1sZWZ0LWNvbG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtib3R0b206MDtjb250YWluOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJpY3Q7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7bGVmdDowO20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzoyMHB4fS5zcGxpZGVfX3Nye2NsaXA6cmVjdCgwIDAgMCAwKTtib3JkZXI6MDtoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHh9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmUgLnNwbGlkZV9fdG9nZ2xlX19wbGF5LC5zcGxpZGVfX3RvZ2dsZV9fcGF1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidle2Rpc3BsYXk6bm9uZX0uc3BsaWRlX190b2dnbGUuaXMtYWN0aXZlIC5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX190b2dnbGVfX3BhdXNle2Rpc3BsYXk6aW5saW5lfS5zcGxpZGVfX3RyYWNre292JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfUBrZXlmcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbWVzIHNwbGlkZS1sb2FkaW5nezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dG97dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5zZm9ybTpyb3RhdGUoMXR1cm4pfX0uc3BsaWRlX190cmFjay0tZHJhZ2dhYmxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3std2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3RyYWNrLS1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGV7bWFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpbjowIWltcG9ydGFudDtvcGFjaXR5OjA7ei1pbmRleDowfS5zcGxpZGVfX3RyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRlLmlzLWFjdGl2ZXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BhY2l0eToxO3otaW5kZXg6MX0uc3BsaWRlLS1ydGx7ZGlyZWN0aW9uOnJ0bH0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZV9fdHJhY2stLXR0Yj4uc3BsaWRlX19saXN0e2Rpc3BsYXk6YmxvY2t9LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVfX3Byb2dyZXNzX19iYXJ7YmFja2dyb3VuZDojY2NjO2hlaWdodDozcHgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfS5zcGxpZGVfX3RvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uc3BsaWRlX190b2dnbGU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgIzIwYjJhYTtvdXRsaW5lLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZmZzZXQ6M3B4fS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fdG9nZ2xlOmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMjBiMmFhO291dGxpbmUtb2Zmc2V0OjNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3h9LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLXByZXZ7bGVmdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6YXV0bztyaWdodDoxZW19LnNwbGlkZV9fYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm93LS1wcmV2IHN2Z3t0cmFuc2Zvcm06c2NhbGVYKDEpfS5zcGxpZGVfX2Fycm93JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tbmV4dHtsZWZ0OjFlbTtyaWdodDphdXRvfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWRlX19hcnJvdy0tbmV4dCBzdmd7dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW5zZm9ybTpzY2FsZVgoLTEpfS5zcGxpZGVfX3NsaWRlcj4uc3BsaWRlX19hcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dzIC5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQ6LTIuNWVtfS5zcGxpZGVfX3NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXI+LnNwbGlkZV9fYXJyb3dzIC5zcGxpZGVfX2Fycm93LS1uZXh0e3JpZ2h0Oi0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMi41ZW19LnNwbGlkZXtwYWRkaW5nOjNlbX0nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvY3NzL3RoZW1lcy9zcGxpZGUtc2VhLWdyZWVuLm1pbi5jc3MnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMjg6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJy5zcGxpZGVfX2NvbnRhaW5lcntib3gtc2l6aW5nOmJvcmRlci1ib3g7cG9zaXRpb246cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGF0aXZlfS5zcGxpZGVfX2xpc3R7YmFja2ZhY2UtdmlzaWJpbGl0eTpoaWRkZW47ZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoxMDAlO21hcmdpbjowIWltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudH0uc3BsaWRlLmlzLWluaXRpYWxpemVkOm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QoLmlzLWFjdGl2ZSkgLnNwbGlkZV9fbGlzdHtkaXNwbGF5OmJsb2NrfS5zcGxpZGVfXycKICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdpbmF0aW9uey1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LXdyYXA6d3JhcDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmxleC13cmFwOndyYXA7LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZW50ZXI7bWFyZ2luOjA7cG9pbnRlci1ldmVudHM6bm9uZX0uc3BsaWRlX19wYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBsaXtkaXNwbGF5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxO2xpc3Qtc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLXR5cGU6bm9uZTttYXJnaW46MDtwb2ludGVyLWV2ZW50czphdXRvfS5zcGxpZGU6bm90KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMtb3ZlcmZsb3cpIC5zcGxpZGVfX3BhZ2luYXRpb257ZGlzcGxheTpub25lfS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19wcm9ncmVzc19fYmFye3dpZHRoOjB9LnNwbGlkZXtwb3NpdGlvbjpyZWxhdGl2ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlzaWJpbGl0eTpoaWRkZW59LnNwbGlkZS5pcy1pbml0aWFsaXplZCwuc3BsaWRlLmlzLScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW5kZXJlZHt2aXNpYmlsaXR5OnZpc2libGV9LnNwbGlkZV9fc2xpZGV7YmFja2ZhY2UtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Zpc2liaWxpdHk6aGlkZGVuO2JveC1zaXppbmc6Ym9yZGVyLWJveDstbXMtZmxleC1uZWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpdmU6MDtmbGV4LXNocmluazowO2xpc3Qtc3R5bGUtdHlwZTpub25lIWltcG9ydGFudCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmV9LnNwbGlkZV9fc2xpZGUgaW1ne3ZlcnRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbC1hbGlnbjpib3R0b219LnNwbGlkZV9fc3Bpbm5lcnthbmltYXRpb246c3BsaWRlLWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2FkaW5nIDFzIGxpbmVhciBpbmZpbml0ZTtib3JkZXI6MnB4IHNvbGlkICM5OTk7Ym9yZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlci1sZWZ0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6NTAlO2JvdHRvbTowJwogICAgICAgICAgICAgICAgICAgICAgICBiJztjb250YWluOnN0cmljdDtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MjBweDtsZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDowO21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoOjIwcHh9LnNwbGlkZV9fc3J7Y2xpcDpyZWN0KDAgMCAwIDApO2JvcmRlcjowO2hlaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInOmFic29sdXRlO3dpZHRoOjFweH0uc3BsaWRlX190b2dnbGUuaXMtYWN0aXZlIC5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlX190b2dnbGVfX3BsYXksLnNwbGlkZV9fdG9nZ2xlX19wYXVzZXtkaXNwbGF5Om5vbmV9JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX3RvZ2dsZS5pcy1hY3RpdmUgLnNwbGlkZV9fdG9nZ2xlX19wYXVzZXtkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxheTppbmxpbmV9LnNwbGlkZV9fdHJhY2t7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWxhdGl2ZTt6LWluZGV4OjB9QGtleWZyYW1lcyBzcGxpZGUtbG9hZGluZ3swJXt0cmFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Nmb3JtOnJvdGF0ZSgwKX10b3t0cmFuc2Zvcm06cm90YXRlKDF0dXJuKX19LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX3RyYWNrLS1kcmFnZ2FibGV7LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYictdXNlci1zZWxlY3Q6bm9uZTstbXMtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZX0uc3BsaWRlX190cmFjay0tZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXttYXJnaW46MCFpbXBvcnRhbnQ7b3BhY2l0eTowO3otaW5kZXg6MH0uc3BsaWRlX190cicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2stLWZhZGU+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZS5pcy1hY3RpdmV7b3BhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NpdHk6MTt6LWluZGV4OjF9LnNwbGlkZS0tcnRse2RpcmVjdGlvbjpydGx9LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX3RyYWNrLS10dGI+LnNwbGlkZV9fbGlzdHtkaXNwbGF5OmJsb2NrfS5zcGxpZGVfX2FycicKICAgICAgICAgICAgICAgICAgICAgICAgYidvd3stbXMtZmxleC1hbGlnbjpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kOiNjY2M7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7ZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4O2hlaWdodDoyZW07LW1zLWZsZXgtcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2s6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7b3BhY2l0eTouNztwYWRkaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJzowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCUpO3dpZHRoOjJlbTt6LWluZGV4OjF9LnNwbGlkZV9fYXJyb3cgc3Zne2ZpbGw6IzAwMCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7aGVpZ2h0OjEuMmVtO3dpZHRoOjEuMmVtfS5zcGxpZGVfX2Fycm93OmhvdmVyOm5vdCg6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc2FibGVkKXtvcGFjaXR5Oi45fS5zcGxpZGVfX2Fycm93OmRpc2FibGVke29wYWNpdHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOi4zfS5zcGxpZGVfX2Fycm93OmZvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgIycKICAgICAgICAgICAgICAgICAgICAgICAgYicwYmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQ6MWVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19hcnJvdy0tcHJldiBzdmd7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX2Fycm93LS1uZXh0e3JpZ2h0OjFlbX0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlX19hcnJvdzpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzozcHh9LnNwbGlkZV9fcGFnaW5hdGlvbntib3R0b206LjVlbTtsZWZ0OjA7cGFkZGluZzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCAxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt6LWluZGV4OjF9LnNwbGlkZV9fcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2luYXRpb25fX3BhZ2V7YmFja2dyb3VuZDojY2NjO2JvcmRlcjowO2JvcmRlci1yYWRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6OHB4O21hcmdpbjozcHg7b3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNpdHk6Ljc7cGFkZGluZzowO3Bvc2l0aW9uOnJlbGF0aXZlO3RyYW5zaXRpb246dHJhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzZm9ybSAuMnMgbGluZWFyO3dpZHRoOjhweH0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pcy1hY3RpdmV7YmFja2dyb3VuZDojZmZmO3RyYW5zZm9ybTpzY2FsZSgxLjQpO3otaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4OjF9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpob3ZlcntjdXJzb3I6cG9pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYic7b3BhY2l0eTouOX0uc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmZvY3VzLXZpc2libGV7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGUuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWZvY3VzLWluIC5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6Zm9jdXN7b3V0bGluZTozcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX3Byb2dyZXNzX19iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fye2JhY2tncm91bmQ6I2NjYztoZWlnaHQ6M3B4fS5zcGxpZGVfX3NsaWRley13ZWJraXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLXRhcC1oaWdobGlnaHQtY29sb3I6cmdiYSgwLDAsMCwwKX0uc3BsaWRlX19zbGlkZTpmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXN7b3V0bGluZTowfUBzdXBwb3J0cyhvdXRsaW5lLW9mZnNldDotM3B4KXsuc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19fc2xpZGU6Zm9jdXMtdmlzaWJsZXtvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLW9mZnNldDotM3B4fX1AbWVkaWEgc2NyZWVuIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6bicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmUpey5zcGxpZGVfX3NsaWRlOmZvY3VzLXZpc2libGV7Ym9yZGVyOjNweCBzb2xpZCAjJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBiZn19QHN1cHBvcnRzKG91dGxpbmUtb2Zmc2V0Oi0zcHgpey5zcGxpZGUuaXMtZm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWluIC5zcGxpZGVfX3NsaWRlOmZvY3Vze291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmUtb2Zmc2V0Oi0zcHh9fUBtZWRpYSBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6bm9uZSl7LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaWRlX19zbGlkZTpmb2N1c3tib3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyOjNweCBzb2xpZCAjMGJmfS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGlkZV9fdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGU6Zm9jdXN7Ym9yZGVyLWNvbG9yOiMwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JmfX0uc3BsaWRlX190b2dnbGV7Y3Vyc29yOnBvaW50ZXJ9LnNwbGlkZV9fdG9nZ2xlOmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1cy12aXNpYmxle291dGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQ6MycKICAgICAgICAgICAgICAgICAgICAgICAgYidweH0uc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3RvZ2dsZTpmb2N1c3tvdXRsaW5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJzozcHggc29saWQgIzBiZjtvdXRsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fdHJhY2stLW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXY+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZXtib3JkZXI6M3B4IHNvbGlkIHRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3BhcmVudDtjdXJzb3I6cG9pbnRlcn0uc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19saXN0Pi5zcGxpZGVfX3NsaWRlLmlzLWFjdGl2ZXtib3JkZXI6M3B4IHNvbGlkICMwMDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQ6YXV0bycKICAgICAgICAgICAgICAgICAgICAgICAgYic7cmlnaHQ6MWVtfS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1wcmV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdmd7dHJhbnNmb3JtOnNjYWxlWCgxKX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fYXJyb3ctLW5leHR7bGVmdDoxZW07cmlnaHQ6YXV0b30uc3BsaWRlX19hcnJvd3MtLScKICAgICAgICAgICAgICAgICAgICAgICAgYidydGwgLnNwbGlkZV9fYXJyb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpzY2FsZVgoLTEpfS5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvd3tsZWZ0OjUwJTt0cmFuc2Zvcm0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInOnRyYW5zbGF0ZSgtNTAlKX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdycKICAgICAgICAgICAgICAgICAgICAgICAgYictLXByZXZ7dG9wOjFlbX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvdy0tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXYgc3Zne3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKX0uc3BsaWRlX19hcnJvd3MtLXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGIgLnNwbGlkZV9fYXJyb3ctLW5leHR7Ym90dG9tOjFlbTt0b3A6YXV0b30uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgYidfYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpyb3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKDkwZGVnKX0uc3BsaWRlX19wYWdpbmF0aW9uLS10dGJ7Ym90dG9tOjA7ZGlzcGxheTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInLW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy1tcy1mbGV4LWRpcmVjdGlvbjpjb2x1bW47ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXgtZGlyZWN0aW9uOmNvbHVtbjtsZWZ0OmF1dG87cGFkZGluZzoxZW0gMDtyaWdodDouJwogICAgICAgICAgICAgICAgICAgICAgICBiJzVlbTt0b3A6MH0nLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvY3NzL3RoZW1lcy9zcGxpZGUtZGVmYXVsdC5taW4uY3NzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInLnNwbGlkZV9fY29udGFpbmVye2JveC1zaXppbmc6Ym9yZGVyLWJveDtwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ246cmVsYXRpdmV9LnNwbGlkZV9fbGlzdHtiYWNrZmFjZS12aXNpYmlsaXR5OmhpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZW47ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO21hcmdpbjowIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50fS5zcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLWluaXRpYWxpemVkOm5vdCguaXMtYWN0aXZlKSAuc3BsaWRlX19saXN0e2RpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGF5OmJsb2NrfS5zcGxpZGVfX3BhZ2luYXRpb257LW1zLWZsZXgtYWxpZ246Y2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xheTpmbGV4Oy1tcy1mbGV4LXdyYXA6d3JhcDtmbGV4LXdyYXA6d3JhcDstbXMtZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9pbnRlci1ldmVudHM6bm9uZX0uc3BsaWRlX19wYWdpbmF0aW9uIGxpe2Rpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5OmlubGluZS1ibG9jaztsaW5lLWhlaWdodDoxO2xpc3Qtc3R5bGUtdHlwZTpubycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZTttYXJnaW46MDtwb2ludGVyLWV2ZW50czphdXRvfS5zcGxpZGU6bm90KC5pcy0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlcmZsb3cpIC5zcGxpZGVfX3BhZ2luYXRpb257ZGlzcGxheTpub25lfS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlX19wcm9ncmVzc19fYmFye3dpZHRoOjB9LnNwbGlkZXtwb3NpdGlvbjpyZWxhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdmU7dmlzaWJpbGl0eTpoaWRkZW59LnNwbGlkZS5pcy1pbml0aWFsaXplZCwuc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5pcy1yZW5kZXJlZHt2aXNpYmlsaXR5OnZpc2libGV9LnNwbGlkZV9fc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rle2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVuO2JveC1zaXppbmc6Ym9yZGVyLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidib3g7LW1zLWZsZXgtbmVnYXRpdmU6MDtmbGV4LXNocmluazowO2xpc3Qtc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLXR5cGU6bm9uZSFpbXBvcnRhbnQ7bWFyZ2luOjA7cG9zaXRpb246cmVsYXRpdmV9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVfX3NsaWRlIGltZ3t2ZXJ0aWNhbC1hbGlnbjpib3R0b219LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfX3NwaW5uZXJ7YW5pbWF0aW9uOnNwbGlkZS1sb2FkaW5nIDFzIGxpbmVhciBpbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5pdGU7Ym9yZGVyOjJweCBzb2xpZCAjOTk5O2JvcmRlci1sZWZ0LWNvbG9yOnRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fuc3BhcmVudDtib3JkZXItcmFkaXVzOjUwJTtib3R0b206MDtjb250YWluOnN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpY3Q7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OjIwcHg7bGVmdDowO21hcmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowO3dpZHRoOjIwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B4fS5zcGxpZGVfX3Nye2NsaXA6cmVjdCgwIDAgMCAwKTtib3JkZXI6MDtoZWlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OjFweDttYXJnaW46LTFweDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZzowO3Bvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbjphYnNvbHV0ZTt3aWR0aDoxcHh9LnNwbGlkZV9fdG9nZ2xlLmlzLWFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgLnNwbGlkZV9fdG9nZ2xlX19wbGF5LC5zcGxpZGVfX3RvZ2dsZV9fcGF1c2V7ZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3BsYXk6bm9uZX0uc3BsaWRlX190b2dnbGUuaXMtYWN0aXZlIC5zcGxpZGVfX3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2dnbGVfX3BhdXNle2Rpc3BsYXk6aW5saW5lfS5zcGxpZGVfX3RyYWNre292ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDowfUBrZXlmcmFtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHNwbGlkZS1sb2FkaW5nezAle3RyYW5zZm9ybTpyb3RhdGUoMCl9dG97dHJhbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9ybTpyb3RhdGUoMXR1cm4pfX0uc3BsaWRlX190cmFjay0tZHJhZ2dhYmxley13JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Via2l0LXRvdWNoLWNhbGxvdXQ6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnNwbGlkZV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3RyYWNrLS1mYWRlPi5zcGxpZGVfX2xpc3Q+LnNwbGlkZV9fc2xpZGV7bWFyZ2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzowIWltcG9ydGFudDtvcGFjaXR5OjA7ei1pbmRleDowfS5zcGxpZGVfX3RyYWNrLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictZmFkZT4uc3BsaWRlX19saXN0Pi5zcGxpZGVfX3NsaWRlLmlzLWFjdGl2ZXtvcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2l0eToxO3otaW5kZXg6MX0uc3BsaWRlLS1ydGx7ZGlyZWN0aW9uOnJ0bH0uc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZV9fdHJhY2stLXR0Yj4uc3BsaWRlX19saXN0e2Rpc3BsYXk6YmxvY2t9LnNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVfX2Fycm93ey1tcy1mbGV4LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyO2JhY2tncm91bmQ6I2NjYztib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Vyc29yOnBvaW50ZXI7ZGlzcGxheTotbXMtZmxleGJveDtkaXNwbGF5OmZsZXg7aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlaWdodDoyZW07LW1zLWZsZXgtcGFjazpjZW50ZXI7anVzdGlmeS1jb250ZW50OmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ZXI7b3BhY2l0eTouNztwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSk7d2lkdGg6MmVtO3otaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4OjF9LnNwbGlkZV9fYXJyb3cgc3Zne2ZpbGw6IzAwMDtoZWlnaHQ6MS4yZW07d2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoOjEuMmVtfS5zcGxpZGVfX2Fycm93OmhvdmVyOm5vdCg6ZGlzYWJsZWQpe29wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaXR5Oi45fS5zcGxpZGVfX2Fycm93OmRpc2FibGVke29wYWNpdHk6LjN9LnNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVfX2Fycm93OmZvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgIzBiZjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQ6MWVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30uc3BsaWRlX19hcnJvdy0tcHJldiBzdmd7dHJhbnNmb3JtOnNjYWxlWCgtMSl9LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVfX2Fycm93LS1uZXh0e3JpZ2h0OjFlbX0uc3BsaWRlLmlzLWZvY3VzLWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAuc3BsaWRlX19hcnJvdzpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RsaW5lLW9mZnNldDozcHh9LnNwbGlkZV9fcGFnaW5hdGlvbntib3R0b206LjVlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7bGVmdDowO3BhZGRpbmc6MCAxZW07cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInei1pbmRleDoxfS5zcGxpZGVfX3BhZ2luYXRpb25fX3BhZ2V7YmFja2dyb3VuZDojJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NjYztib3JkZXI6MDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvY2s7aGVpZ2h0OjhweDttYXJnaW46M3B4O29wYWNpdHk6Ljc7cGFkZGluZzowO3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgbGluZWFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzt3aWR0aDo4cHh9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZS5pcy1hY3RpdmV7YicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2tncm91bmQ6I2ZmZjt0cmFuc2Zvcm06c2NhbGUoMS40KTt6LWluZGV4OjF9LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGVfX3BhZ2luYXRpb25fX3BhZ2U6aG92ZXJ7Y3Vyc29yOnBvaW50ZXI7b3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NpdHk6Ljl9LnNwbGlkZV9fcGFnaW5hdGlvbl9fcGFnZTpmb2N1cy12aXNpYmxleycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5pcy1mb2N1cy1pbiAuc3BsaWRlX19wYWdpbmF0aW9uX19wYWdlOmZvY3Vze291JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtb2Zmc2V0OjNweH0uc3BsaWRlXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfcHJvZ3Jlc3NfX2JhcntiYWNrZ3JvdW5kOiNjY2M7aGVpZ2h0OjNweH0uc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZV9fc2xpZGV7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzApfS5zcGxpZGVfX3NsaWRlOmZvY3Vze291dGxpbmU6MH1Ac3VwcG9ydHMob3V0bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmUtb2Zmc2V0Oi0zcHgpey5zcGxpZGVfX3NsaWRlOmZvY3VzLXZpc2libGV7b3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGxpbmU6M3B4IHNvbGlkICMwYmY7b3V0bGluZS1vZmZzZXQ6LTNweH19QG1lZGlhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzY3JlZW4gYW5kICgtbXMtaGlnaC1jb250cmFzdDpub25lKXsuc3BsaWRlX19zbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGU6Zm9jdXMtdmlzaWJsZXtib3JkZXI6M3B4IHNvbGlkICMwYmZ9fUBzdXBwb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMob3V0bGluZS1vZmZzZXQ6LTNweCl7LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZV9fc2xpZGU6Zm9jdXN7b3V0bGluZTozcHggc29saWQgIzBiZjtvdXRsaW5lLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZmZzZXQ6LTNweH19QG1lZGlhIHNjcmVlbiBhbmQgKC1tcy1oaWdoLWNvbnRyYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDpub25lKXsuc3BsaWRlLmlzLWZvY3VzLWluIC5zcGxpZGVfX3NsaWRlOmZvY3VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tib3JkZXI6M3B4IHNvbGlkICMwYmZ9LnNwbGlkZS5pcy1mb2N1cy1pbiAuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fdHJhY2s+LnNwbGlkZV9fbGlzdD4uc3BsaWRlX19zbGlkZTpmb2N1c3tib3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyLWNvbG9yOiMwYmZ9fS5zcGxpZGVfX3RvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZV9fdG9nZ2xlOmZvY3VzLXZpc2libGV7b3V0bGluZTozcHggc29saWQgIycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwYmY7b3V0bGluZS1vZmZzZXQ6M3B4fS5zcGxpZGUuaXMtZm9jdXMtaW4gLnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVfX3RvZ2dsZTpmb2N1c3tvdXRsaW5lOjNweCBzb2xpZCAjMGJmO291dGxpbmUtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29mZnNldDozcHh9LnNwbGlkZV9fdHJhY2stLW5hdj4uc3BsaWRlX19saXN0Pi5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlX19zbGlkZXtib3JkZXI6M3B4IHNvbGlkIHRyYW5zcGFyZW50O2N1cnNvcjonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9pbnRlcn0uc3BsaWRlX190cmFjay0tbmF2Pi5zcGxpZGVfX2xpc3Q+LnNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VfX3NsaWRlLmlzLWFjdGl2ZXtib3JkZXI6M3B4IHNvbGlkICMwMDB9LnNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1wcmV2e2xlZnQ6YXV0bztyaWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHQ6MWVtfS5zcGxpZGVfX2Fycm93cy0tcnRsIC5zcGxpZGVfX2Fycm93LS1wcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdmd7dHJhbnNmb3JtOnNjYWxlWCgxKX0uc3BsaWRlX19hcnJvd3MtLXJ0bCAucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fYXJyb3ctLW5leHR7bGVmdDoxZW07cmlnaHQ6YXV0b30uc3BsaWRlX18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyb3dzLS1ydGwgLnNwbGlkZV9fYXJyb3ctLW5leHQgc3Zne3RyYW5zZm9ybTpzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbGVYKC0xKX0uc3BsaWRlX19hcnJvd3MtLXR0YiAuc3BsaWRlX19hcnJvd3tsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlKX0uc3BsaWRlX19hcnJvd3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLS10dGIgLnNwbGlkZV9fYXJyb3ctLXByZXZ7dG9wOjFlbX0uc3BsaWRlX19hcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dzLS10dGIgLnNwbGlkZV9fYXJyb3ctLXByZXYgc3Zne3RyYW5zZm9ybTpyb3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKC05MGRlZyl9LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwbGlkZV9fYXJyb3ctLW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0e2JvdHRvbToxZW07dG9wOmF1dG99LnNwbGlkZV9fYXJyb3dzLS10dGIgLnNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVfX2Fycm93LS1uZXh0IHN2Z3t0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZV9fcGFnaW5hdGlvbi0tdHRie2JvdHRvbTowO2Rpc3BsYXk6LW1zLWZsZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYm94O2Rpc3BsYXk6ZmxleDstbXMtZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpcmVjdGlvbjpjb2x1bW47bGVmdDphdXRvO3BhZGRpbmc6MWVtIDA7cmlnaHQ6LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic1ZW07dG9wOjB9JywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2Nzcy90aGVtZXMvc3BsaWRlLWRlZmF1bHQubWluLmNzcycsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdzX3NsaWRlJywKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZScsCiAgICAgICAgICAgICAgICAnbW9kVmFyJzogeydWYXJMaXN0JzogeydBY2NvcmRpb25DYXJkQm9keUNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRIZWFkZXJDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uT3BlbkZpcnN0JzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNCbG9jayc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1DU1NWYXInOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb21tZW50XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BQYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcFBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbVBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZz0yMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgaWQgZm9udCBjb2xvclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvbnRDb2xvcj1fQ29sb3JBX1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgbW9kdWxlIGJhY2tncm91bmRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQmFja2dyb3VuZD1cbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmQnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbW96LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8tYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZFNWRyc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIHN0YXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBmaXhlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUVuZFRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUdQb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1IZWxwJzogJyA8ZGl2IGNsYXNzPSJhbGVydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlciI+IFRvIHNldHVwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2LCBzZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYldlYi5odG1sc1syXVsiVmFycyJdWyJEZXZNc2ciXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIDEuIEluc3RydWN0aW9ucyBhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgcGFnZSBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlLjwvZGl2PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Qb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVJbmMnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIF9Gb250Q29sb3JfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIF9NQmFja2dyb3VuZF9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgI19JRF8ge3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuaGNvbnRlbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLTUwJSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy01MCUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDU3NnB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyBwYWRkaW5nOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBNZWRpdW0gRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rlc2t0b3BzICovIEBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNzY4cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOjAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIExhcmdlIERldmljZXMsIFdpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NjcmVlbnMgKi8gQG1lZGlhIG9ubHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjcmVlbiBhbmQgKG1pbi13aWR0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiA5OTJweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZVRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVZpZGVvQmFja2dyb3VuZCc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaGVhZGVyLXVuaXRfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmlnaHQ6bm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1sZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlkZW97XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIG9iamVjdC1maXQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhQ2xhc3MnOiAnJ319fX0sCiAyOTogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6IGInZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvciknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyBPYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAicHJvdG90eXBlIiwgeyB3cml0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuLyohXG4gKiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLmpzXG4gKiBWZXJzaW9uICA6IDQuMS40XG4gKiBMaWNlbnNlICA6IE1JVFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvcHlyaWdodDogMjAyMiBOYW90b3NoaSBGdWppdGFcbiAqL1xuKGZ1bmN0aW9uIChnJwogICAgICAgICAgICAgICAgICAgICAgICBiImxvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0IgogICAgICAgICAgICAgICAgICAgICAgICBiInlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3J5KCkgOiB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgZGVmaW5lKGZhY3RvcnkpIDogKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAnIgogICAgICAgICAgICAgICAgICAgICAgICBiInVuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5TcGwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgJ3VzZSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaWN0XCc7XG5cbiAgdmFyIE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1RJT04gPSAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIjtcbiAgdmFyIENSRUFURUQgPSAxJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIE1PVU5URUQgPSAyO1xuICB2YXIgSURMRSA9IDM7XG4gIHZhciBNT1ZJTicKICAgICAgICAgICAgICAgICAgICAgICAgYidHID0gNDtcbiAgdmFyIFNDUk9MTElORyA9IDU7XG4gIHZhciBEUkFHR0lORyA9IDY7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgREVTVFJPWUVEID0gNztcbiAgdmFyIFNUQVRFUyA9IHtcbiAgICBDUkVBVEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRDogQ1JFQVRFRCxcbiAgICBNT1VOVEVEOiBNT1VOVEVELFxuICAgIElETEU6IElETEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIE1PVklORzogTU9WSU5HLFxuICAgIFNDUk9MTElORzogU0NST0xMSU5HLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBEUkFHR0lORzogRFJBR0dJTkcsXG4gICAgREVTVFJPWUVEOiBERVNUUk9ZRUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH07XG5cbiAgZnVuY3Rpb24gZW1wdHkoYXJyYXkpIHtcbiAgICBhcnJheS5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoID0gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWNlKGFycmF5TGlrZSwgc3RhcnQsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmQpIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXlMaWsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSwgc3RhcnQsIGVuZCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcHBseShmdW5jKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBmdW5jLmJpbmQuYXBwbHkoZnVuYywgW251bGxdLmNvbmNhdChzbGljZShhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JndW1lbnRzLCAxKSkpO1xuICB9XG5cbiAgdmFyIG5leHRUaWNrID0gc2V0VGltZW91dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZihmdW5jKSB7XG4gICAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYyk7XG4gIH1cblxuICBmdW5jdGlvbiB0eXBlT2YodHlwZSwgc3ViamVjdCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09IHR5cGU7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNPYmplY3Qoc3ViamVjdCkge1xuICAgIHJldHVybiAhaXNOdWxsKHN1YmplY3QpICYmIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlT2YoIm9iamVjdCIsIHN1YmplY3QpO1xuICB9XG5cbiAgdmFyIGlzQXJyYXkgPSBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JyYXkuaXNBcnJheTtcbiAgdmFyIGlzRnVuY3Rpb24gPSBhcHBseSh0eXBlT2YsICJmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24iKTtcbiAgdmFyIGlzU3RyaW5nID0gYXBwbHkodHlwZU9mLCAic3RyaW5nIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgaXNVbmRlZmluZWQgPSBhcHBseSh0eXBlT2YsICJ1bmRlZmluZWQiKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgZnVuY3Rpb24gaXNOdWxsKHN1YmplY3QpIHtcbiAgICByZXR1cm4gc3ViamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgPT09IG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBpc0hUTUxFbGVtZW50KHN1YmplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzdWJqZWN0IGluc3RhbmNlb2YgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzdWJqZWN0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93KS5IVE1MRWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQ7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gIH1cblxuICBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gICAgcmV0dXJuIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3JFYWNoKHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgICB0b0FycmF5KHZhbHVlcykuZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VhY2goaXRlcmF0ZWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSkge1xuICAgIHJldHVybiBhcnJheS5pbmRleE9mKHZhbHVlKSA+IC0xO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIGZ1bmN0aW9uIHB1c2goYXJyYXksIGl0ZW1zKSB7XG4gICAgYXJyYXkucHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2guYXBwbHkoYXJyYXksIHRvQXJyYXkoaXRlbXMpKTtcbiAgICByZXR1cm4gYXJyYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5O1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBhZGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgaWYgKGVsbSkge1xuICAgICAgZm9yRWFjaChjbGFzc2VzLCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBlbG0uY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzTGlzdFthZGQgPyAiYWRkIiA6ICJyZW1vdmUiXShuYW1lKTtcbiAgICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzKGVsbSwgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMpIHtcbiAgICB0b2dnbGVDbGFzcyhlbG0sIGlzU3RyaW5nKGNsYXNzZXMpID8gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMuc3BsaXQoIiAiKSA6IGNsYXNzZXMsIHRydWUpO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGFwcGVuZChwYXJlbnQsIGNoaWxkcmVuKSB7XG4gICAgZm9yRWFjaChjaGlsZHJlbiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudC5hcHBlbmRDaGlsZC5iaW5kKHBhcmVudCkpO1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGJlZm9yZShub2RlcywgcmVmKSB7XG4gICAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhub2RlKSB7XG4gICAgICB2YXIgcGFyZW50ID0gKHJlZiB8fCBub2RlKS5wYXJlbnROb2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZShub2RlLCByZWYpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gbScKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGNoZXMoZWxtLCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBpc0hUTUxFbGVtZW50KGVsbScKICAgICAgICAgICAgICAgICAgICAgICAgYicpICYmIChlbG1bIm1zTWF0Y2hlc1NlbGVjdG9yIl0gfHwgZWxtLm1hdGNoZXMpLmNhbGwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbSwgc2VsZWN0b3IpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hpbGRyZW4ocGFyZW50LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0b3IpIHtcbiAgICB2YXIgY2hpbGRyZW4yID0gcGFyZW50ID8gc2xpY2UocGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudC5jaGlsZHJlbikgOiBbXTtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbjIuZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIHJldHVybiBtYXRjaGVzKGNoaWxkLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0b3IpO1xuICAgIH0pIDogY2hpbGRyZW4yO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoaWxkKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RyZW4ocGFyZW50LCBzZWxlY3RvcilbMF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgdmFyIG93bktleXMgPSBPYmplY3Qua2V5cztcblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yT3duKG9iamVjdCwgaXRlcmF0ZWUsIHJpZ2h0KSB7XG4gICAgaWYgKG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIChyaWdodCA/IG93bktleXMob2JqZWN0KS5yZXZlcnNlKCkgOiBvd25LZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5cyhvYmplY3QpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAga2V5ICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgIl9fcHJvdG9fXyIgJiYgaXRlcmF0ZWUob2JqZWN0W2tleV0sIGtleSk7XG4gICAgICB9KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NpZ24ob2JqZWN0KSB7XG4gICAgc2xpY2UoYXJndW1lbnRzLCAxKS5mb3JFYWNoKGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiAoc291cmNlKSB7XG4gICAgICBmb3JPd24oc291cmNlLCBmdW5jdGlvbiAodmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBrZXkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIG1lcmdlKG9iamVjdCkge1xuICAgIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWFjaChmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gKHNvdXJjZSkge1xuICAgICAgZm9yT3duKHNvdXJjZSwgZnVuY3Rpb24gKHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSwga2V5KSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvYmplY3Rba2V5XSA9IHZhbHVlLnNsaWNlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gbWVyZ2Uoe30sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc09iamVjdChvYmplY3Rba2V5XSkgPyBvYmplY3Rba2V5XSA6IHt9LCB2YWx1ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzKSB7XG4gICAgZm9yRWFjaChrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5cyB8fCBvd25LZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlbGV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0W2tleV07XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKGVsbXMsIGF0dHJzKSB7XG4gICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVsbSAmJiBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgfSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsbXMsIGF0dHJzLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFsdWUpIHtcbiAgICBpZiAoaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgICBmb3JPdycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKGF0dHJzLCBmdW5jdGlvbiAodmFsdWUyLCBuYW1lKSB7XG4gICAgICAgIHNldEF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGUoZWxtcywgbmFtZSwgdmFsdWUyKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtKSB7XG4gICAgICAgIGlzTnVsbCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUpIHx8IHZhbHVlID09PSAiIiA/IHJlbW92ZUF0dHJpYnV0ZShlbG0sIGF0dHJzKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBlbG0uc2V0QXR0cmlidXRlKGF0dHJzLCBTdHJpbmcodmFsdWUpKTtcbiAgICAgIH0pOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGUodGFnLCBhdHRycywgcGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKGF0dHJzKSB7XG4gICAgICBpc1N0cmluZyhhdHRycykgPyBhZGRDbGFzcyhlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidtLCBhdHRycykgOiBzZXRBdHRyaWJ1dGUoZWxtLCBhdHRycyk7XG4gICAgfVxuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudCAmJiBhcHBlbmQocGFyZW50LCBlbG0pO1xuICAgIHJldHVybiBlbG07XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gc3R5bGUoZWxtLCBwcm9wLCB2YWx1ZSkge1xuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoZWxtKVtwcm9wXTtcbiAgICB9XG5cbiAgICBpZiAoIWlzTnVsbCh2YWx1ZSkpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBlbG0uc3R5bGVbcHJvcF0gPSAiIiArIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBkaXNwbGF5KGVsbSwgZGlzcGxheTIpIHtcbiAgICBzdHlsZShlbG0sICJkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheSIsIGRpc3BsYXkyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvY3VzKGVsbSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlbG1bInNldEFjdGl2ZSJdICYmIGVsbVsic2V0QWN0aXZlIl0oKSB8fCBlbG0uZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3VzKHtcbiAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICB9KTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxtLCBhdHRyKSB7XG4gICAgcmV0dXJuIGVsbS5nZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXR0cmlidXRlKGF0dHIpO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzQ2xhc3MoZWxtLCBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NOYW1lKSB7XG4gICAgcmV0dXJuIGVsbSAmJiBlbG0uY2xhc3NMaXN0LmNvbnRhaW5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhjbGFzc05hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjdCh0YXJnZXQpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZW1vdmUobm9kZXMpIHtcbiAgICBmb3JFYWNoKG5vZGVzLCBmdW5jdGlvbiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25vZGUpIHtcbiAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlSHRtbChodG1sKSB7XG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBjaGlsZChuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICJ0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dC9odG1sIikuYm9keSk7XG4gIH1cblxuICBmdW5jdGlvbiBwcmV2ZW50KGUsIHN0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUHJvcGFnYXRpb24pIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0b3BQcm9wYWdhdGlvbikge1xuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBxdWVyeShwYXJlbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHBhcmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHF1ZXJ5QWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8gc2xpY2UocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSA6IFtdO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICAgIHRvZycKICAgICAgICAgICAgICAgICAgICAgICAgYidnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW1lT2YoZSkge1xuICAgIHJldHVybiBlLnRpbWVTdGFtcDtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB1bml0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZhbHVlID8gdmFsdWUgKyAicHgiIDogIiI7XG4gIH1cblxuICB2YXIgUFJPSkVDVF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ09ERSA9ICJzcGxpZGUiO1xuICB2YXIgREFUQV9BVFRSSUJVVEUgPSAiZGF0YS0iICsgUFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0pFQ1RfQ09ERTtcblxuICBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCJbIiArIFBST0pFQ1RfQ09ERSArICJdICIgKyAobWVzc2FnZSB8fCAiIikpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cblxuICB2YXIgbWluID0gTWF0aC5taW4sXG4gICAgICBtYXggPSBNYXRoLm1heCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICBmbG9vciA9IE1hdGguZmxvb3IsXG4gICAgICBjZWlsID0gTWF0aC5jZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbCxcbiAgICAgIGFicyA9IE1hdGguYWJzO1xuXG4gIGZ1bmN0aW9uIGFwcHJveGltYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWx5RXF1YWwoeCwgeSwgZXBzaWxvbikge1xuICAgIHJldHVybiBhYnMoeCAtIHkpIDwgZXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2lsb247XG4gIH1cblxuICBmdW5jdGlvbiBiZXR3ZWVuKG51bWJlciwgeCwgeSwgZXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1c2l2ZSkge1xuICAgIHZhciBtaW5pbXVtID0gbWluKHgsIHkpO1xuICAgIHZhciBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F4aW11bSA9IG1heCh4LCB5KTtcbiAgICByZXR1cm4gZXhjbHVzaXZlID8gbWluaW11bSA8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIgJiYgbnVtYmVyIDwgbWF4aW11bSA6IG1pbmltdW0gPD0gbnVtYmVyICYmIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIgPD0gbWF4aW11bTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsYW1wKG51bWJlciwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gsIHkpIHtcbiAgICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgICB2YXIgbWF4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltdW0gPSBtYXgoeCwgeSk7XG4gICAgcmV0dXJuIG1pbihtYXgobWluaW11bSwgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksIG1heGltdW0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiArKHggPiAwKSAtICsoeCA8IDApO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0KHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbmcsIHJlcGxhY2VtZW50cykge1xuICAgIGZvckVhY2gocmVwbGFjZW1lbnRzLCBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gKHJlcGxhY2VtZW50KSB7XG4gICAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyVzIiwgIiIgKyByZXBsYWNlbWVudCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2c7XG4gIH1cblxuICBmdW5jdGlvbiBwYWQobnVtYmVyKSB7XG4gICAgcmV0dXJuIG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgPCAxMCA/ICIwIiArIG51bWJlciA6ICIiICsgbnVtYmVyO1xuICB9XG5cbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZHMgPSB7fTtcblxuICBmdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuICIiICsgcHJlZml4ICsgcGFkKGlkc1twcmVmaXhdID0gKGlkc1twcmVmaXhdIHx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwKSArIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gRXZlbnRCaW5kZXIoKSB7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBsaXN0ZW5lcnMgPSBbXTtcblxuICAgIGZ1bmN0aW9uIGJpbmQodGFyZ2V0cywgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cywgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICAgIGZvckVhY2hFdmVudCh0YXJnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgZXZlbnRzLCBmdW5jdGlvbiAodGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB2YXIgaXNFdmVudFRhcmdldCA9ICgiYWRkRXZlbnRMaXN0ZW5lciIgaW4gdGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldCk7XG4gICAgICAgIHZhciByZW1vdmVyID0gaXNFdmVudFRhcmdldCA/IHRhcmdldC5yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRhcmdldCwgZXZlbnQsIGNhbGxiYWNrLCBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucykgOiB0YXJnZXRbInJlbW92ZUxpc3RlbmVyIl0uYmluZCh0YXJnZXQsIGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInayk7XG4gICAgICAgIGlzRXZlbnRUYXJnZXQgPyB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQsIGNhbGxiYWNrLCBvcHRpb25zKSA6IHRhcmdldFsiYWRkTGlzdGVuZXIiXShjYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2spO1xuICAgICAgICBsaXN0ZW5lcnMucHVzaChbdGFyZ2V0LCBldmVudCwgbmFtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGFjZSwgY2FsbGJhY2ssIHJlbW92ZXJdKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiB1bmJpbmQodGFyZ2V0cywgZXZlbnRzLCBjYWxsYmFjaykge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2hFdmVudCh0YXJnZXRzLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgbmFtZXNwYWNlKSB7XG4gICAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgIGlmIChsaXN0ZW5lclswXSA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRhcmdldCAmJiBsaXN0ZW5lclsxXSA9PT0gZXZlbnQgJiYgbGlzdGVuZXJbMl0gPT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduYW1lc3BhY2UgJiYgKCFjYWxsYmFjayB8fCBsaXN0ZW5lclszXSA9PT0gY2FsbGJhY2spJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICAgICAgbGlzdGVuZXJbNF0oKTtcbiAgICAgICAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3BhdGNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQsIHR5cGUsIGRldGFpbCkge1xuICAgICAgdmFyIGU7XG4gICAgICB2YXIgYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1YmJsZXMgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIEN1c3RvbUV2ZW50ID09PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgImZ1bmN0aW9uIikge1xuICAgICAgICBlID0gbmV3IEN1c3RvbUV2ZW50KHR5cGUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgICAgYnViYmxlczogYnViYmxlcyxcbiAgICAgICAgICBkZXRhaWw6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXRhaWxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlID0gZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO1xuICAgICAgICBlLmluaXRDdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdG9tRXZlbnQodHlwZSwgYnViYmxlcywgZmFsc2UsIGRldGFpbCk7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChlKTtcbiAgICAgIHJldHVybiBlOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JFYWNoRXZlbnQodGFyZ2V0cywgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgaXRlcmF0ZWUpIHtcbiAgICAgIGZvckVhY2godGFyZ2V0cywgZnVuY3Rpb24gKHRhcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQpIHtcbiAgICAgICAgdGFyZ2V0ICYmIGZvckVhY2goZXZlbnRzLCBmdW5jdGlvbiAoZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIpIHtcbiAgICAgICAgICBldmVudHMyLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKGV2ZW50TlMpIHtcbiAgICAgICAgICAgIHZhciBmcmFnbWVudCA9IGV2ZW50TlMuc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGl0KCIuIik7XG4gICAgICAgICAgICBpdGVyYXRlZSh0YXJnZXQsIGZyYWdtZW50WzBdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnJhZ21lbnRbMV0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgbGlzdGVuZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5mb3JFYWNoKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGRhdGFbNF0oKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB9KTtcbiAgICAgIGVtcHR5KGxpc3RlbmVycyk7XG4gICAgfVxuXG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiB7XG4gICAgICBiaW5kOiBiaW5kLFxuICAgICAgdW5iaW5kOiB1bmJpbmQsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgICAgZGVzdHJveTogZGVzdHJveVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9O1xuICB9XG5cbiAgdmFyIEVWRU5UX01PVU5URUQgPSAibW91bnRlZCI7XG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfUkVBRFkgPSAicmVhZHkiO1xuICB2YXIgRVZFTlRfTU9WRSA9ICJtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gIHZhciBFVkVOVF9NT1ZFRCA9ICJtb3ZlZCI7XG4gIHZhciBFVkVOVF9DTElDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0sgPSAiY2xpY2siO1xuICB2YXIgRVZFTlRfQUNUSVZFID0gImFjdGl2ZSI7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgRVZFTlRfSU5BQ1RJVkUgPSAiaW5hY3RpdmUiO1xuICB2YXIgRVZFTlRfVklTSUJMRSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAidmlzaWJsZSI7XG4gIHZhciBFVkVOVF9ISURERU4gPSAiaGlkZGVuIjtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRUZSRVNIID0gInJlZnJlc2giO1xuICB2YXIgRVZFTlRfVVBEQVRFRCA9ICJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BkYXRlZCI7XG4gIHZhciBFVkVOVF9SRVNJWkUgPSAicmVzaXplIjtcbiAgdmFyIEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9SRVNJWkVEID0gInJlc2l6ZWQiO1xuICB2YXIgRVZFTlRfRFJBRyA9ICJkcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyI7XG4gIHZhciBFVkVOVF9EUkFHR0lORyA9ICJkcmFnZ2luZyI7XG4gIHZhciBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfRFJBR0dFRCA9ICJkcmFnZ2VkIjtcbiAgdmFyIEVWRU5UX1NDUk9MTCA9ICJzY3JvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgdmFyIEVWRU5UX1NDUk9MTEVEID0gInNjcm9sbGVkIjtcbiAgdmFyIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9PVkVSRkxPVyA9ICJvdmVyZmxvdyI7XG4gIHZhciBFVkVOVF9ERVNUUk9ZID0gImRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm95IjtcbiAgdmFyIEVWRU5UX0FSUk9XU19NT1VOVEVEID0gImFycm93czptb3VudGVkIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBFVkVOVF9BUlJPV1NfVVBEQVRFRCA9ICJhcnJvd3M6dXBkYXRlZCI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVEID0gInBhZ2luYXRpb246bW91bnRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICB2YXIgRVZFTlRfUEFHSU5BVElPTl9VUERBVEVEID0gInBhZ2luYXRpb246dXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWQiO1xuICB2YXIgRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gIm5hdmlnYXRpb246bScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50ZWQiO1xuICB2YXIgRVZFTlRfQVVUT1BMQVlfUExBWSA9ICJhdXRvcGxheTpwbGF5IicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBFVkVOVF9BVVRPUExBWV9QTEFZSU5HID0gImF1dG9wbGF5OnBsYXlpbmciOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIEVWRU5UX0FVVE9QTEFZX1BBVVNFID0gImF1dG9wbGF5OnBhdXNlIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBFVkVOVF9MQVpZTE9BRF9MT0FERUQgPSAibGF6eWxvYWQ6bG9hZGVkIjtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBFVkVOVF9TTElERV9LRVlET1dOID0gInNrIjtcbiAgdmFyIEVWRU5UX1NISUZURUQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgInNoIjtcbiAgdmFyIEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEID0gImVpIjtcblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMikge1xuICAgIHZhciBidXMgPSBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMiA/IFNwbGlkZTIuZXZlbnQuYnVzIDogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ21lbnQoKTtcbiAgICB2YXIgYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcblxuICAgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBvbihldmVudHMsIGNhbGxiYWNrKSB7XG4gICAgICBiaW5kZXIuYmluZChidXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0b0FycmF5KGV2ZW50cykuam9pbigiICIpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2suYXBwbHkoY2FsbGJhY2ssIGlzQXJyYXkoZS5kZXRhaWwpID8gZS5kZXRhaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsIDogW10pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdChldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpIHtcbiAgICAgIGJpbmRlci5kaXNwYXRjaChidXMsIGV2ZW50LCBzbGljZShhcmd1bWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLCAxKSk7XG4gICAgfVxuXG4gICAgaWYgKFNwbGlkZTIpIHtcbiAgICAgIFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmV2ZW50Lm9uKEVWRU5UX0RFU1RST1ksIGJpbmRlci5kZXN0cm95KTtcbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmV0dXJuIGFzc2lnbihiaW5kZXIsIHtcbiAgICAgIGJ1czogYnVzLFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9uOiBvbixcbiAgICAgIG9mZjogYXBwbHkoYmluZGVyLnVuYmluZCwgYnVzKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0OiBlbWl0XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBSZXF1ZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVydmFsKGludGVydmFsLCBvbkludGVydmFsLCBvblVwZGF0ZSwgbGltaXQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIG5vdyA9IERhdGUubm93O1xuICAgIHZhciBzdGFydFRpbWU7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciByYXRlID0gMDtcbiAgICB2YXIgaWQ7XG4gICAgdmFyIHBhdXNlZCA9IHRydWU7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBjb3VudCA9IDA7XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCFwYXVzZWQpIHtcbiAgICAgICAgcmF0ZSA9IGludGVydmFsID8gbWluKChub3coKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBzdGFydFRpbWUpIC8gaW50ZXJ2YWwsIDEpIDogMTtcbiAgICAgICAgb25VcGRhdGUgJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmIG9uVXBkYXRlKHJhdGUpO1xuXG4gICAgICAgIGlmIChyYXRlID49IDEpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgb25JbnRlcnZhbCgpO1xuICAgICAgICAgIHN0YXJ0VGltZSA9IG5vdygpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgICAgIGlmIChsaW1pdCAmJiArK2NvdW50ID49IGxpbWl0KSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGlkID0gcmFmKHVwZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHN0YXJ0KHJlc3VtZSkge1xuICAgICAgcmVzdW1lIHx8IGNhbmNlbCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHN0YXJ0VGltZSA9IG5vdygpIC0gKHJlc3VtZSA/IHJhdGUgKiBpbnRlcnZhbCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiAwKTtcbiAgICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgICAgaWQgPSByYWYodXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgICBwYXVzZWQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXdpbmQoKSB7XG4gICAgICBzdGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RUaW1lID0gbm93KCk7XG4gICAgICByYXRlID0gMDtcblxuICAgICAgaWYgKG9uVXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSkge1xuICAgICAgICBvblVwZGF0ZShyYXRlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgaWQgJiYgY2FuY2VsQW5pbWF0aW9uRnJhbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKGlkKTtcbiAgICAgIHJhdGUgPSAwO1xuICAgICAgaWQgPSAwO1xuICAgICAgcGF1c2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KHRpbWUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnZhbCA9IHRpbWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNQYXVzZWQoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgcmV0dXJuIHBhdXNlZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0YXJ0OiBzdGFydCxcbiAgICAgIHJld2luZDogcmV3aW5kLFxuICAgICAgcGF1c2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBwYXVzZSxcbiAgICAgIGNhbmNlbDogY2FuY2VsLFxuICAgICAgc2V0OiBzZXQsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaXNQYXVzZWQ6IGlzUGF1c2VkXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgICB2YXIgc3RhdGUgPSBpbml0aWFsU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuXG4gICAgZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICBzdGF0ZSA9IHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpcyhzdGF0ZXMpIHtcbiAgICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5jbHVkZXModG9BcnJheShzdGF0ZXMpLCBzdGF0ZSk7XG4gICAgfVxuXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB7XG4gICAgICBzZXQ6IHNldCxcbiAgICAgIGlzOiBpc1xuICAgIH07XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gVGhyb3R0bGUoZnVuYywgZHVyYXRpb24pIHtcbiAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKGR1cmF0aW9uIHx8IDAsIGZ1bmMsIG51JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsLCAxKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaW50ZXJ2YWwuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzUGF1c2VkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgICB9O1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIE1lZGlhKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBzdGF0ZSA9IFNwbGlkZTIuc3RhdGU7XG4gICAgdmFyIGJyZWFrcG9pbnRzID0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuYnJlYWtwb2ludHMgfHwge307XG4gICAgdmFyIHJlZHVjZWRNb3Rpb24gPSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5yZWR1Y2VkTW90aW9uIHx8IHt9O1xuICAgIHZhciBiaW5kZXIgPSBFdmVudEJpbmRlcignCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICB2YXIgcXVlcmllcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2V0dXAoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdmFyIGlzTWluID0gb3B0aW9ucy5tZWRpYVF1ZXJ5ID09PSAibWluIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBvd25LZXlzKGJyZWFrcG9pbnRzKS5zb3J0KGZ1bmN0aW9uIChuLCBtKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICByZXR1cm4gaXNNaW4gPyArbiAtICttIDogK20gLSArbjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmVnaXN0ZXIoYnJlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrcG9pbnRzW2tleV0sICIoIiArIChpc01pbiA/ICJtaW4iIDogIm1heCIpICsgIi13aWR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g6IiArIGtleSArICJweCkiKTtcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXIocmVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VjZWRNb3Rpb24sIE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1RJT04pO1xuICAgICAgdXBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGxldGVseSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGlmIChjb21wbGV0ZWx5KSB7XG4gICAgICAgIGJpbmRlci5kZXN0cm95KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2lzdGVyKG9wdGlvbnMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgcXVlcnkpIHtcbiAgICAgIHZhciBxdWVyeUxpc3QgPSBtYXRjaE1lZGlhKHF1ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSk7XG4gICAgICBiaW5kZXIuYmluZChxdWVyeUxpc3QsICJjaGFuZ2UiLCB1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICAgIHF1ZXJpZXMucHVzaChbb3B0aW9uczIsIHF1ZXJ5TGlzdF0pO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICB2YXIgZGVzdHJveWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCA9IHN0YXRlLmlzKERFU1RST1lFRCk7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uO1xuICAgICAgdmFyIG1lcmdlZCA9IHF1ZXJpZXMucmVkdWNlKGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAobWVyZ2VkMiwgZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKG1lcmdlZDInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBlbnRyeVsxXS5tYXRjaGVzID8gZW50cnlbMF0gOiB7fSk7XG4gICAgICB9LCB7fScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgb21pdChvcHRpb25zKTtcbiAgICAgIHNldChtZXJnZWQpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKG9wdGlvbnMuZGVzdHJveSkge1xuICAgICAgICBTcGxpZGUyLmRlc3Ryb3kob3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuZGVzdHJveSA9PT0gImNvbXBsZXRlbHkiKTtcbiAgICAgIH0gZWxzZSBpZiAoZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3llZCkge1xuICAgICAgICBkZXN0cm95KHRydWUpO1xuICAgICAgICBTcGxpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5tb3VudCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGlyZWN0aW9uICE9PSBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5kaXJlY3Rpb24gJiYgU3BsaWRlMi5yZWZyZXNoKCk7XG4gICAgICB9XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZHVjZShlbmFibGUpIHtcbiAgICAgIGlmIChtYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0Y2hNZWRpYShNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OKS5tYXRjaGVzKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBlbmFibGUgPyBtZXJnZShvcHRpb25zLCByZWR1Y2VkTW90aW9uKSA6IG9taXQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMsIG93bktleXMocmVkdWNlZE1vdGlvbikpO1xuICAgICAgfVxuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmdW5jdGlvbiBzZXQob3B0cywgYmFzZSwgbm90aWZ5KSB7XG4gICAgICBtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2Uob3B0aW9ucywgb3B0cyk7XG4gICAgICBiYXNlICYmIG1lcmdlKE9iamVjdC5nZXRQcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG90eXBlT2Yob3B0aW9ucyksIG9wdHMpO1xuXG4gICAgICBpZiAobm90aWZ5IHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgYichc3RhdGUuaXMoQ1JFQVRFRCkpIHtcbiAgICAgICAgU3BsaWRlMi5lbWl0KEVWRU5UX1VQRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBVEVELCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldHVwOiBzZXR1cCxcbiAgICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkdWNlOiByZWR1Y2UsXG4gICAgICBzZXQ6IHNldFxuICAgIH07XG4gIH1cblxuICB2YXIgQScKICAgICAgICAgICAgICAgICAgICAgICAgYidSUk9XID0gIkFycm93IjtcbiAgdmFyIEFSUk9XX0xFRlQgPSBBUlJPVyArICJMZWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gIHZhciBBUlJPV19SSUdIVCA9IEFSUk9XICsgIlJpZ2h0IjtcbiAgdmFyIEFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPV19VUCA9IEFSUk9XICsgIlVwIjtcbiAgdmFyIEFSUk9XX0RPV04gPSBBUlJPVyArICJEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293biI7XG4gIHZhciBSVEwgPSAicnRsIjtcbiAgdmFyIFRUQiA9ICJ0dGIiO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIE9SSUVOVEFUSU9OX01BUCA9IHtcbiAgICB3aWR0aDogWyJoZWlnaHQiXSxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbGVmdDogWyJ0b3AiLCAicmlnaHQiXSxcbiAgICByaWdodDogWyJib3R0b20iLCAibGVmdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciXSxcbiAgICB4OiBbInkiXSxcbiAgICBYOiBbIlkiXSxcbiAgICBZOiBbIlgiXSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgQXJyb3dMZWZ0OiBbQVJST1dfVVAsIEFSUk9XX1JJR0hUXSxcbiAgICBBcnJvd1JpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogW0FSUk9XX0RPV04sIEFSUk9XX0xFRlRdXG4gIH07XG5cbiAgZnVuY3Rpb24gRGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXNvbHZlKHByb3AsIGF4aXNPbmx5LCBkaXJlY3Rpb24pIHtcbiAgICAgIGRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBkaXJlY3Rpb24gfHwgb3B0aW9ucy5kaXJlY3Rpb247XG4gICAgICB2YXIgaW5kZXggPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlyZWN0aW9uID09PSBSVEwgJiYgIWF4aXNPbmx5ID8gMSA6IGRpcmVjdGlvbiA9PT0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RUQiA/IDAgOiAtMTtcbiAgICAgIHJldHVybiBPUklFTlRBVElPTl9NQVBbcHJvcF0gJiYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09SSUVOVEFUSU9OX01BUFtwcm9wXVtpbmRleF0gfHwgcHJvcC5yZXBsYWNlKC93aWR0aHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVmdHxyaWdodC9pLCBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCkge1xuICAgICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlcGxhY2VtZW50ID0gT1JJRU5UQVRJT05fTUFQW21hdGNoLnRvTG93ZXJDYXNlKCldWycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleF0gfHwgbWF0Y2g7XG4gICAgICAgIHJldHVybiBvZmZzZXQgPiAwID8gcmVwbGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVwbGFjZW1lbnQuc2xpY2UoMSkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogcmVwbGFjZW1lbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50KHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgKiAob3B0aW9ucy5kaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBSVEwgPyAxIDogLTEpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzb2x2ZTogcmVzb2x2ZSxcbiAgICAgIG9yaWVudDogb3JpZW50XG4gICAgfTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgUk9MRSA9ICJyb2xlIjtcbiAgdmFyIFRBQl9JTkRFWCA9ICJ0YWJpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3giO1xuICB2YXIgRElTQUJMRUQgPSAiZGlzYWJsZWQiO1xuICB2YXIgQVJJQV9QUkVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lYID0gImFyaWEtIjtcbiAgdmFyIEFSSUFfQ09OVFJPTFMgPSBBUklBX1BSRUZJWCArICJjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udHJvbHMiO1xuICB2YXIgQVJJQV9DVVJSRU5UID0gQVJJQV9QUkVGSVggKyAiY3VycmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiO1xuICB2YXIgQVJJQV9TRUxFQ1RFRCA9IEFSSUFfUFJFRklYICsgInNlbGVjdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCI7XG4gIHZhciBBUklBX0xBQkVMID0gQVJJQV9QUkVGSVggKyAibGFiZWwiO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEFSSUFfTEFCRUxMRURCWSA9IEFSSUFfUFJFRklYICsgImxhYmVsbGVkYnkiO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEFSSUFfSElEREVOID0gQVJJQV9QUkVGSVggKyAiaGlkZGVuIjtcbiAgdmFyIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX09SSUVOVEFUSU9OID0gQVJJQV9QUkVGSVggKyAib3JpZW50YXRpb24iO1xuICB2YXIgQVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfUk9MRURFU0NSSVBUSU9OID0gQVJJQV9QUkVGSVggKyAicm9sZWRlc2NyaXB0aW9uIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBBUklBX0xJVkUgPSBBUklBX1BSRUZJWCArICJsaXZlIjtcbiAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX0JVU1kgPSBBUklBX1BSRUZJWCArICJidXN5IjtcbiAgdmFyIEFSSUFfQVRPTUlDICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IEFSSUFfUFJFRklYICsgImF0b21pYyI7XG4gIHZhciBBTExfQVRUUklCVVRFUyA9IFtSTycKICAgICAgICAgICAgICAgICAgICAgICAgYidMRSwgVEFCX0lOREVYLCBESVNBQkxFRCwgQVJJQV9DT05UUk9MUywgQVJJQV9DVVJSRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgQVJJQV9MQUJFTCwgQVJJQV9MQUJFTExFREJZLCBBUklBX0hJRERFTiwgQVJJQV9PUkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UQVRJT04sIEFSSUFfUk9MRURFU0NSSVBUSU9OXTtcbiAgdmFyIENMQVNTX1BSRUZJWCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBQUk9KRUNUX0NPREUgKyAiX18iO1xuICB2YXIgU1RBVFVTX0NMQVNTX1BSRUZJWCA9ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtIjtcbiAgdmFyIENMQVNTX1JPT1QgPSBQUk9KRUNUX0NPREU7XG4gIHZhciBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfVFJBQ0sgPSBDTEFTU19QUkVGSVggKyAidHJhY2siO1xuICB2YXIgQ0xBU1NfTElTVCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDTEFTU19QUkVGSVggKyAibGlzdCI7XG4gIHZhciBDTEFTU19TTElERSA9IENMQVNTX1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkVGSVggKyAic2xpZGUiO1xuICB2YXIgQ0xBU1NfQ0xPTkUgPSBDTEFTU19TTElERSArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLS1jbG9uZSI7XG4gIHZhciBDTEFTU19DT05UQUlORVIgPSBDTEFTU19TTElERSArICJfX2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb250YWluZXIiO1xuICB2YXIgQ0xBU1NfQVJST1dTID0gQ0xBU1NfUFJFRklYICsgImFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3MiO1xuICB2YXIgQ0xBU1NfQVJST1cgPSBDTEFTU19QUkVGSVggKyAiYXJyb3ciOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIENMQVNTX0FSUk9XX1BSRVYgPSBDTEFTU19BUlJPVyArICItLXByZXYiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIENMQVNTX0FSUk9XX05FWFQgPSBDTEFTU19BUlJPVyArICItLW5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgdmFyIENMQVNTX1BBR0lOQVRJT04gPSBDTEFTU19QUkVGSVggKyAicGFnaW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24iO1xuICB2YXIgQ0xBU1NfUEFHSU5BVElPTl9QQUdFID0gQ0xBU1NfUEFHSU5BVElPTiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyAiX19wYWdlIjtcbiAgdmFyIENMQVNTX1BST0dSRVNTID0gQ0xBU1NfUFJFRklYICsgInAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9ncmVzcyI7XG4gIHZhciBDTEFTU19QUk9HUkVTU19CQVIgPSBDTEFTU19QUk9HUkVTUyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyAiX19iYXIiO1xuICB2YXIgQ0xBU1NfVE9HR0xFID0gQ0xBU1NfUFJFRklYICsgInRvZ2cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGUiO1xuICB2YXIgQ0xBU1NfU1BJTk5FUiA9IENMQVNTX1BSRUZJWCArICJzcGlubmVyIjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBDTEFTU19TUiA9IENMQVNTX1BSRUZJWCArICJzciI7XG4gIHZhciBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfSU5JVElBTElaRUQgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImluaXRpYWxpemVkIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBDTEFTU19BQ1RJVkUgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImFjdGl2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICB2YXIgQ0xBU1NfUFJFViA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAicHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YiO1xuICB2YXIgQ0xBU1NfTkVYVCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibmV4dCI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgQ0xBU1NfVklTSUJMRSA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAidmlzaWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiO1xuICB2YXIgQ0xBU1NfTE9BRElORyA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibG9hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RpbmciO1xuICB2YXIgQ0xBU1NfRk9DVVNfSU4gPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJmb2N1cy1pbiI7XG4gIHZhciBDTEFTU19PVkVSRkxPVyA9IFNUQVRVU19DTEFTU19QUkVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lYICsgIm92ZXJmbG93IjtcbiAgdmFyIFNUQVRVU19DTEFTU0VTID0gW0NMQVNTX0FDVElWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsIENMQVNTX1ZJU0lCTEUsIENMQVNTX1BSRVYsIENMQVNTX05FWFQsIENMQVNTX0xPQUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5HLCBDTEFTU19GT0NVU19JTiwgQ0xBU1NfT1ZFUkZMT1ddO1xuICB2YXIgQ0xBU1NFUyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSB7XG4gICAgc2xpZGU6IENMQVNTX1NMSURFLFxuICAgIGNsb25lOiBDTEFTU19DTE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkUsXG4gICAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gICAgYXJyb3c6IENMQVNTX0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPVyxcbiAgICBwcmV2OiBDTEFTU19BUlJPV19QUkVWLFxuICAgIG5leHQ6IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19BUlJPV19ORVhULFxuICAgIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHBhZ2U6IENMQVNTX1BBR0lOQVRJT05fUEFHRSxcbiAgICBzcGlubmVyOiBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1BJTk5FUlxuICB9O1xuXG4gIGZ1bmN0aW9uIGNsb3Nlc3QoZnJvbSwgc2VsZWN0b3IpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZnJvbS5jbG9zZXN0KSkge1xuICAgICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBmcm9tLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHZhciBlbG0gPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnJvbTtcblxuICAgIHdoaWxlIChlbG0gJiYgZWxtLm5vZGVUeXBlID09PSAxKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKG1hdGNoZXMoZWxtLCBzZWxlY3RvcikpIHtcbiAgICAgICAgYnJlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrO1xuICAgICAgfVxuXG4gICAgICBlbG0gPSBlbG0ucGFyZW50RWxlbWVudDtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgcmV0dXJuIGVsbTtcbiAgfVxuXG4gIHZhciBGUklDVElPTiA9IDU7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgTE9HX0lOVEVSVkFMID0gMjAwO1xuICB2YXIgUE9JTlRFUl9ET1dOX0VWRU5UUyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAidG91Y2hzdGFydCBtb3VzZWRvd24iO1xuICB2YXIgUE9JTlRFUl9NT1ZFX0VWRU5UUyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAidG91Y2htb3ZlIG1vdXNlbW92ZSI7XG4gIHZhciBQT0lOVEVSX1VQX0VWRU5UUyA9ICJ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ291Y2hlbmQgdG91Y2hjYW5jZWwgbW91c2V1cCBjbGljayI7XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gX0V2ZW50SW50ZXJmYWNlLm9uLFxuICAgICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5iaW5kO1xuXG4gICAgdmFyIHJvb3QgPSBTcGxpZGUyLnJvb3Q7XG4gICAgdmFyIGkxOCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduID0gb3B0aW9ucy5pMThuO1xuICAgIHZhciBlbGVtZW50cyA9IHt9O1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVzID0gW107XG4gICAgdmFyIHJvb3RDbGFzc2VzID0gW107XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmFja0NsYXNzZXMgPSBbXTtcbiAgICB2YXIgdHJhY2s7XG4gICAgdmFyIGxpc3Q7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBpc1VzaW5nS2V5O1xuXG4gICAgZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29sbGVjdCgpO1xuICAgICAgaW5pdCgpO1xuICAgICAgdXBkYXRlKCk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRlc3Ryb3kpO1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwgc2V0dXApO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uKEVWRU5UX1VQREFURUQsIHVwZGF0ZSk7XG4gICAgICBiaW5kKGRvY3VtZW50LCBQT0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRFUl9ET1dOX0VWRU5UUyArICIga2V5ZG93biIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpc1VzaW5nS2V5ID0gZS50eXBlID09PSAia2V5ZG93biI7XG4gICAgICB9LCB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGJpbmQocm9vdCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICJmb2N1c2luIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICB0b2dnbGVDbGFzcyhyb290LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfRk9DVVNfSU4sICEhaXNVc2luZ0tleSk7XG4gICAgICB9KTtcbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZnVuY3Rpb24gZGVzdHJveShjb21wbGV0ZWx5KSB7XG4gICAgICB2YXIgYXR0cnMgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQUxMX0FUVFJJQlVURVMuY29uY2F0KCJzdHlsZSIpO1xuICAgICAgZW1wdHkoc2xpZGVzKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICByZW1vdmVDbGFzcyhyb290LCByb290Q2xhc3Nlcyk7XG4gICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3Nlcyk7XG4gICAgICByZW1vdmVBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKFt0cmFjaywgbGlzdF0sIGF0dHJzKTtcbiAgICAgIHJlbW92ZUF0dHJpYnV0ZShyb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcGxldGVseSA/IGF0dHJzIDogWyJzdHlsZSIsIEFSSUFfUk9MRURFU0NSSVBUSU9OJwogICAgICAgICAgICAgICAgICAgICAgICBiJ10pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHJlbW92ZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyhyb290LCByb290Q2xhc3Nlcyk7XG4gICAgICByZW1vdmVDbGFzcyh0cmFjaywgdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrQ2xhc3Nlcyk7XG4gICAgICByb290Q2xhc3NlcyA9IGdldENsYXNzZXMoQ0xBU1NfUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1QpO1xuICAgICAgdHJhY2tDbGFzc2VzID0gZ2V0Q2xhc3NlcyhDTEFTU19UUkFDSycKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgYWRkQ2xhc3Mocm9vdCwgcm9vdENsYXNzZXMpO1xuICAgICAgYWRkQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzKHRyYWNrLCB0cmFja0NsYXNzZXMpO1xuICAgICAgc2V0QXR0cmlidXRlKHJvb3QsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX0xBQkVMLCBvcHRpb25zLmxhYmVsKTtcbiAgICAgIHNldEF0dHJpYnV0ZShyb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQVJJQV9MQUJFTExFREJZLCBvcHRpb25zLmxhYmVsbGVkYnkpO1xuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBjb2xsZWN0KCkge1xuICAgICAgdHJhY2sgPSBmaW5kKCIuIiArIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19UUkFDSyk7XG4gICAgICBsaXN0ID0gY2hpbGQodHJhY2ssICIuIiArIENMQVNTX0xJU1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIGFzc2VydCh0cmFjayAmJiBsaXN0LCAiQSB0cmFjay9saXN0IGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzIG1pc3NpbmcuIik7XG4gICAgICBwdXNoKHNsaWRlcywgY2hpbGRyZW4obGlzdCwgIi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiArIENMQVNTX1NMSURFICsgIjpub3QoLiIgKyBDTEFTU19DTE9ORSArICIpIikpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZvck93bih7XG4gICAgICAgIGFycm93czogQ0xBU1NfQVJST1dTLFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcGFnaW5hdGlvbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgICAgICAgcHJldjogQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0FSUk9XX1BSRVYsXG4gICAgICAgIG5leHQ6IENMQVNTX0FSUk9XX05FWFQsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBiYXI6IENMQVNTX1BST0dSRVNTX0JBUixcbiAgICAgICAgdG9nZ2xlOiBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVE9HR0xFXG4gICAgICB9LCBmdW5jdGlvbiAoY2xhc3NOYW1lLCBrZXkpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVsZW1lbnRzW2tleV0gPSBmaW5kKCIuIiArIGNsYXNzTmFtZSk7XG4gICAgICB9KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBhc3NpZ24oZWxlbWVudHMsIHtcbiAgICAgICAgcm9vdDogcm9vdCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHRyYWNrOiB0cmFjayxcbiAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlczogc2xpZGVzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCgpIHtcbiAgICAgIHZhciBpZCA9IHJvb3QuaWQgfHwgdW5pcXVlSWQoUFJPSkVDVF9DT0QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSk7XG4gICAgICB2YXIgcm9sZSA9IG9wdGlvbnMucm9sZTtcbiAgICAgIHJvb3QuaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaWQ7XG4gICAgICB0cmFjay5pZCA9IHRyYWNrLmlkIHx8IGlkICsgIi10cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICAgICAgbGlzdC5pZCA9IGxpc3QuaWQgfHwgaWQgKyAiLWxpc3QiO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKCFnZXRBdHRyaWJ1dGUocm9vdCwgUk9MRSkgJiYgcm9vdC50YWdOYW1lICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgIlNFQ1RJT04iICYmIHJvbGUpIHtcbiAgICAgICAgc2V0QXR0cmlidXRlKHJvb3QsIFJPTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFLCByb2xlKTtcbiAgICAgIH1cblxuICAgICAgc2V0QXR0cmlidXRlKHJvb3QsIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1JPTEVERVNDUklQVElPTiwgaTE4bi5jYXJvdXNlbCk7XG4gICAgICBzZXRBdHRyaWJ1dGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGxpc3QsIFJPTEUsICJwcmVzZW50YXRpb24iKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZmluZChzZWxlY3Rvcikge1xuICAgICAgdmFyIGVsbSA9IHF1ZXJ5KHJvb3QsIHNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rvcik7XG4gICAgICByZXR1cm4gZWxtICYmIGNsb3Nlc3QoZWxtLCAiLiIgKyBDTEFTU19SJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09PVCkgPT09IHJvb3QgPyBlbG0gOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGdldENsYXNzZXMoYmFzZSkge1xuICAgICAgcmV0dXJuIFtiYXNlICsgIi0tIiArIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLnR5cGUsIGJhc2UgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RyYWcgJiYgYmFzZSArICItLWRyYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiBiYXNlICsgIi0tbmF2IiwgYmFzZSA9PT0gQ0xBU1NfUk9PVCAmJiBDTEFTU19BQ1RJVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzaWduKGVsZW1lbnRzLCB7XG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXA6IHNldHVwLFxuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3lcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBTTElERSA9ICJzbGlkZSI7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgTE9PUCA9ICJsb29wIjtcbiAgdmFyIEZBREUgPSAiZmFkZSI7XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIFNsaWRlJDEoU3BsaWRlMiwgaW5kZXgsIHNsaWRlSW5kZXgsIHNsaWRlKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICAgIHZhciBvbiA9IGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudC5vbixcbiAgICAgICAgZW1pdCA9IGV2ZW50LmVtaXQsXG4gICAgICAgIGJpbmQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXZlbnQuYmluZDtcbiAgICB2YXIgQ29tcG9uZW50cyA9IFNwbGlkZTIuQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIHJvb3QgPSBTcGxpZGUyLnJvb3QsXG4gICAgICAgIG9wdGlvbnMgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgU3BsaWRlMi5vcHRpb25zO1xuICAgIHZhciBpc05hdmlnYXRpb24gPSBvcHRpb25zLmlzTicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdmlnYXRpb24sXG4gICAgICAgIHVwZGF0ZU9uTW92ZSA9IG9wdGlvbnMudXBkYXRlT25NbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZSxcbiAgICAgICAgaTE4biA9IG9wdGlvbnMuaTE4bixcbiAgICAgICAgcGFnaW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gPSBvcHRpb25zLnBhZ2luYXRpb24sXG4gICAgICAgIHNsaWRlRm9jdXMgPSBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy5zbGlkZUZvY3VzO1xuICAgIHZhciByZXNvbHZlID0gQ29tcG9uZW50cy5EaXJlY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnJlc29sdmU7XG4gICAgdmFyIHN0eWxlcyA9IGdldEF0dHJpYnV0ZShzbGlkZSwgInN0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZSIpO1xuICAgIHZhciBsYWJlbCA9IGdldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIHZhciBpc0Nsb25lID0gc2xpZGVJbmRleCA+IC0xO1xuICAgIHZhciBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudGFpbmVyID0gY2hpbGQoc2xpZGUsICIuIiArIENMQVNTX0NPTlRBSU5FUik7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBkZXN0cm95ZWQ7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIWlzQ2xvbmUpIHtcbiAgICAgICAgc2xpZGUuaWQgPSByb290LmlkICsgIi1zbGlkZSIgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFkKGluZGV4ICsgMSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2luYXRpb24gPyAidGFicGFuZWwiIDogImdyb3VwIik7XG4gICAgICAgIHNldEF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBpMThuLnNsaWRlKTtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCwgbGFiZWwgfHwgZm9ybWF0KGkxOCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnNsaWRlTGFiZWwsIFtpbmRleCArIDEsIFNwbGlkZTIubGVuZ3RoXSkpO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgbGlzdGVuKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdGVuKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGJpbmQoc2xpZGUsICJjbGljayIsIGFwcGx5KGVtaXQsIEVWRU5UX0NMSUNLLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZikpO1xuICAgICAgYmluZChzbGlkZSwgImtleWRvd24iLCBhcHBseShlbWl0LCBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfU0xJREVfS0VZRE9XTiwgc2VsZikpO1xuICAgICAgb24oW0VWRU5UX01PVkVELCBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfU0hJRlRFRCwgRVZFTlRfU0NST0xMRURdLCB1cGRhdGUpO1xuICAgICAgb24oRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUX05BVklHQVRJT05fTU9VTlRFRCwgaW5pdE5hdmlnYXRpb24pO1xuXG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKHVwZGF0ZU9uTW92ZSkge1xuICAgICAgICBvbihFVkVOVF9NT1ZFLCBvbk1vdmUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3llZCA9IHRydWU7XG4gICAgICBldmVudC5kZXN0cm95KCk7XG4gICAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vtb3ZlQ2xhc3Moc2xpZGUsIFNUQVRVU19DTEFTU0VTKTtcbiAgICAgIHJlbW92ZUF0dHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dGUoc2xpZGUsIEFMTF9BVFRSSUJVVEVTKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsICJzdHlsZSIsIHN0eWxlcyk7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBQkVMLCBsYWJlbCB8fCAiIik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdE5hdicKICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2F0aW9uKCkge1xuICAgICAgdmFyIGNvbnRyb2xzID0gU3BsaWRlMi5zcGxpZGVzLm1hcCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICB2YXIgU2xpZGUyID0gdGFyZ2V0LnNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUuQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQoaW5kZXgpO1xuICAgICAgICByZXR1cm4gUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMiA/IFNsaWRlMi5zbGlkZS5pZCA6ICIiO1xuICAgICAgfSkuam9pbigiICIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCwgZm9ybWF0KGkxOG4uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlWCwgKGlzQ2xvbmUgPyBzbGlkZUluZGV4IDogaW5kZXgpICsgMSkpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9DT05UUk9MUywgY29udHJvbHMpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgc2xpZGVGb2N1cyA/ICJidXR0b24iIDogIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIHNsaWRlRm9jdXMgJiYgcmVtb3ZlQXR0cmlidXRlKHNsaWRlLCBBUklBX1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0xFREVTQ1JJUFRJT04pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW92ZSgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAoIWRlc3Ryb3llZCkge1xuICAgICAgICB1cGRhdGUoKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKCFkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JveWVkKSB7XG4gICAgICAgIHZhciBjdXJyID0gU3BsaWRlMi5pbmRleDtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHVwZGF0ZUFjdGl2aXR5KCk7XG4gICAgICAgIHVwZGF0ZVZpc2liaWxpdHkoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19QUkVWLCBpbmRleCA9PT0gY3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnIgLSAxKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIENMQVNTX05FWFQsIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCA9PT0gY3VyciArIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVBY3Rpdml0eSgpIHtcbiAgICAgIHZhciBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKGFjdGl2ZSAhPT0gaGFzQ2xhc3Moc2xpZGUsIENMQVNTX0FDVElWRSkpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNsaWRlLCBDTEFTU19BQ1RJVkUsIGFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfQ1VSUkVOVCwgaXNOYXZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhdGlvbiAmJiBhY3RpdmUgfHwgIiIpO1xuICAgICAgICBlbWl0KGFjdGl2ZSA/IEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19BQ1RJVkUgOiBFVkVOVF9JTkFDVElWRSwgc2VsZik7XG4gICAgICB9XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdHkoKSB7XG4gICAgICB2YXIgdmlzaWJsZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBpc1Zpc2libGUoKTtcbiAgICAgIHZhciBoaWRkZW4gPSAhdmlzaWJsZSAmJiAoIWlzQWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSgpIHx8IGlzQ2xvbmUpO1xuXG4gICAgICBpZiAoIVNwbGlkZTIuc3RhdGUuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFtNT1ZJTkcsIFNDUk9MTElOR10pKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEFSSUFfSElEREVOLCBoaWRkZW4gfHwgIiIpO1xuICAgICAgfVxuXG4gICAgICBzZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKHF1ZXJ5QWxsKHNsaWRlLCBvcHRpb25zLmZvY3VzYWJsZU5vZGVzIHx8ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiksIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAiIik7XG5cbiAgICAgIGlmIChzbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVGb2N1cykge1xuICAgICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIFRBQl9JTkRFWCwgaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGRlbiA/IC0xIDogMCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2aXNpYmxlICE9PSBoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FzQ2xhc3Moc2xpZGUsIENMQVNTX1ZJU0lCTEUpKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGlkZSwgQ0xBU1NfVklTSUJMRSwgdmlzaWJsZSk7XG4gICAgICAgIGVtaXQodmlzaWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPyBFVkVOVF9WSVNJQkxFIDogRVZFTlRfSElEREVOLCBzZWxmKTtcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICAgIGlmICghdmlzaWJsZSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT0gc2xpZGUpIHtcbiAgICAgICAgdmFyIFNsaWRlMiA9IENvbXBvbmVudHMuU2xpZGVzLmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdChTcGxpZGUyLmluZGV4KTtcbiAgICAgICAgU2xpZGUyICYmIGZvY3VzKFNsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0eWxlJDEocHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHZhbHVlLCB1c2VDb250YWluZXIpIHtcbiAgICAgIHN0eWxlKHVzZUNvbnRhaW5lciAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29udGFpbmVyIHx8IHNsaWRlLCBwcm9wLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGlzQWN0aXZlKCkge1xuICAgICAgdmFyIGN1cnIgPSBTcGxpZGUyLmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleDtcbiAgICAgIHJldHVybiBjdXJyID09PSBpbmRleCB8fCBvcHRpb25zLmNsb25lU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cyAmJiBjdXJyID09PSBzbGlkZUluZGV4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1Zpc2libGUoKSB7XG4gICAgICBpZiAoU3BsaWRlMi5pcyhGQURFKSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIGlzQWN0aXZlKCk7XG4gICAgICB9XG5cbiAgICAgIHZhciB0cmFja1JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0ID0gcmVjdChDb21wb25lbnRzLkVsZW1lbnRzLnRyYWNrKTtcbiAgICAgIHZhciBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VSZWN0ID0gcmVjdChzbGlkZSk7XG4gICAgICB2YXIgbGVmdCA9IHJlc29sdmUoImxlZnQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdHJ1ZSk7XG4gICAgICB2YXIgcmlnaHQgPSByZXNvbHZlKCJyaWdodCIsIHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIHJldHVybiBmbG9vcih0cmFja1JlY3RbbGVmdF0pIDw9IGNlaWwoc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUmVjdFtsZWZ0XSkgJiYgZmxvb3Ioc2xpZGVSZWN0W3JpZ2h0XSkgPD0gY2VpbCh0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYidSZWN0W3JpZ2h0XSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNXaXRoaW4oZnJvbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRpc3RhbmNlKSB7XG4gICAgICB2YXIgZGlmZiA9IGFicyhmcm9tIC0gaW5kZXgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKCFpc0Nsb25lICYmIChvcHRpb25zLnJld2luZCB8fCBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlMi5pcyhMT09QKSkpIHtcbiAgICAgICAgZGlmZiA9IG1pbihkaWZmLCBTcGxpZGUyLmxlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidndGggLSBkaWZmKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpZmYgPD0gZGlzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0ge1xuICAgICAgaW5kZXg6IGluZGV4LCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHNsaWRlSW5kZXg6IHNsaWRlSW5kZXgsXG4gICAgICBzbGlkZTogc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBpc0Nsb25lOiBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidDbG9uZSxcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIGRlc3Ryb3k6IGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgYid5LFxuICAgICAgdXBkYXRlOiB1cGRhdGUsXG4gICAgICBzdHlsZTogc3R5bGUkMSxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpc1dpdGhpbjogaXNXaXRoaW5cbiAgICB9O1xuICAgIHJldHVybiBzZWxmO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIFNsaWRlcyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlMiA9IEV2ZW50SW50ZXJmYWNlKFNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyKSxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UyLm9uLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1pdCA9IF9FdmVudEludGVyZmFjZTIuZW1pdCxcbiAgICAgICAgYmluZCA9IF9FdmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UyLmJpbmQ7XG5cbiAgICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICBzbGlkZXMgPSBfQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MyJEVsZW1lbnRzLnNsaWRlcyxcbiAgICAgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMubGlzdDtcbiAgICB2YXIgU2xpZGVzMiA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3kpO1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwgaW5pdCk7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBzbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlLCBpbmRleCkge1xuICAgICAgICByZWdpc3RlcihzbGlkZSwgaW5kZXgsIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIFNsaWRlMi5kZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSgpO1xuICAgICAgfSk7XG4gICAgICBlbXB0eShTbGlkZXMyKTtcbiAgICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUyKSB7XG4gICAgICAgIFNsaWRlMi51cGRhdGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmdW5jdGlvbiByZWdpc3RlcihzbGlkZSwgaW5kZXgsIHNsaWRlSW5kZXgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB2YXIgb2JqZWN0ID0gU2xpZGUkMShTcGxpZGUyLCBpbmRleCwgc2xpZGVJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgsIHNsaWRlKTtcbiAgICAgIG9iamVjdC5tb3VudCgpO1xuICAgICAgU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzIucHVzaChvYmplY3QpO1xuICAgICAgU2xpZGVzMi5zb3J0KGZ1bmN0aW9uIChTbGlkZTEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZTIpIHtcbiAgICAgICAgcmV0dXJuIFNsaWRlMS5pbmRleCAtIFNsaWRlMi5pbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3g7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQoZXhjbHVkZUNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMpIHtcbiAgICAgIHJldHVybiBleGNsdWRlQ2xvbmVzID8gZmlsdGVyKGZ1bmN0aW9uICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGUyKSB7XG4gICAgICAgIHJldHVybiAhU2xpZGUyLmlzQ2xvbmU7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSkgOiBTbGlkZXMyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluKHBhZ2UpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB2YXIgQ29udHJvbGxlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXI7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGluZGV4ID0gQ29udHJvbGxlci50b0luZGV4KHBhZ2UpO1xuICAgICAgdmFyIG1heCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBDb250cm9sbGVyLmhhc0ZvY3VzKCkgPyAxIDogb3B0aW9ucy5wZXJQYWdlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBmaWx0ZXIoZnVuY3Rpb24gKFNsaWRlMikge1xuICAgICAgICByZXR1cm4gYicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHdlZW4oU2xpZGUyLmluZGV4LCBpbmRleCwgaW5kZXggKyBtYXggLSAxKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBdChpbmRleCkge1xuICAgICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBmaWx0ZXIoaW5kZXgpWzBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZChpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbXMsIGluZGV4KSB7XG4gICAgICBmb3JFYWNoKGl0ZW1zLCBmdW5jdGlvbiAoc2xpZGUpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIGlmIChpc1N0cmluZyhzbGlkZSkpIHtcbiAgICAgICAgICBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBwYXJzZUh0bWwoc2xpZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTUxFbGVtZW50KHNsaWRlKSkge1xuICAgICAgICAgIHZhciByZWYgPSBzbGlkZXNbaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXTtcbiAgICAgICAgICByZWYgPyBiZWZvcmUoc2xpZGUsIHJlZikgOiBhcHBlbmQobGlzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlKTtcbiAgICAgICAgICBhZGRDbGFzcyhzbGlkZSwgb3B0aW9ucy5jbGFzc2VzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSk7XG4gICAgICAgICAgb2JzZXJ2ZUltYWdlcyhzbGlkZSwgYXBwbHkoZW1pdCwgRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFU0laRSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGVtaXQoRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX1JFRlJFU0gpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZSQxKG1hdGNoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSB7XG4gICAgICByZW1vdmUoZmlsdGVyKG1hdGNoZXIpLm1hcChmdW5jdGlvbiAoU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlMikge1xuICAgICAgICByZXR1cm4gU2xpZGUyLnNsaWRlO1xuICAgICAgfSkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVtaXQoRVZFTlRfUkVGUkVTSCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VhY2gkMShpdGVyYXRlZSwgZXhjbHVkZUNsb25lcykge1xuICAgICAgZ2V0KGV4Y2x1ZGVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVzKS5mb3JFYWNoKGl0ZXJhdGVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsdGVyKG1hdGNoZXIpIHtcbiAgICAgIHJldHVybiBTbGlkZXMyLmZpbHRlcihpc0Z1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihtYXRjaGVyKSA/IG1hdGNoZXIgOiBmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gaXNTdHJpbmcobWF0Y2hlcikgPyBtYXRjaGVzKFNsaWRlMi5zbGlkZSwgbWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXIpIDogaW5jbHVkZXModG9BcnJheShtYXRjaGVyKSwgU2xpZGUyLmluZGV4KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHlsZShwcm9wLCB2YWx1ZSwgdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZUNvbnRhaW5lcikge1xuICAgICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgIFNsaWRlMi5zdHlsZShwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvYnNlcnZlSW1hZ2VzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbG0sIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgaW1hZ2VzID0gcXVlcnlBbGwoZWxtLCAiaScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZyIpO1xuICAgICAgdmFyIGxlbmd0aCA9IGltYWdlcy5sZW5ndGg7XG5cbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAobGVuZ3RoKSB7XG4gICAgICAgIGltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgZnVuY3Rpb24gKCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgICAgIGlmICghIC0tbGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBmdW5jdGlvbiBnZXRMZW5ndGgoZXhjbHVkZUNsb25lcykge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBleGNsdWRlQ2xvbmVzID8gc2xpZGVzLmxlbmd0aCA6IFNsaWRlczIubGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0Vub3VnaCgpIHtcbiAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gU2xpZGVzMi5sZW5ndGggPiBvcHRpb25zLnBlclBhZ2U7XG4gICAgfVxuXG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidveSxcbiAgICAgIHVwZGF0ZTogdXBkYXRlLFxuICAgICAgcmVnaXN0ZXI6IHJlZ2lzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcixcbiAgICAgIGdldDogZ2V0LFxuICAgICAgZ2V0SW46IGdldEluLFxuICAgICAgZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEF0OiBnZXRBdCxcbiAgICAgIGFkZDogYWRkLFxuICAgICAgcmVtb3ZlOiByZW1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJDEsXG4gICAgICBmb3JFYWNoOiBmb3JFYWNoJDEsXG4gICAgICBmaWx0ZXI6IGZpbHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsXG4gICAgICBzdHlsZTogc3R5bGUsXG4gICAgICBnZXRMZW5ndGg6IGdldExlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGgsXG4gICAgICBpc0Vub3VnaDogaXNFbm91Z2hcbiAgICB9O1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIExheW91dChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0V2ZW50SW50ZXJmYWNlMyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gPSBfRXZlbnRJbnRlcmZhY2UzLm9uLFxuICAgICAgICBiaW5kID0gX0V2ZW50SW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZTMuYmluZCxcbiAgICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTMuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgICB2YXIgU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZGVzO1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVzb2x2ZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICAgIHZhciBfQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyJEVsZW1lbnRzMiA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCA9IF9Db21wb25lbnRzMiRFbGVtZW50czIucm9vdCxcbiAgICAgICAgdHJhY2sgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0NvbXBvbmVudHMyJEVsZW1lbnRzMi50cmFjayxcbiAgICAgICAgbGlzdCA9IF9Db21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIkRWxlbWVudHMyLmxpc3Q7XG4gICAgdmFyIGdldEF0ID0gU2xpZGVzLmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdCxcbiAgICAgICAgc3R5bGVTbGlkZXMgPSBTbGlkZXMuc3R5bGU7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXJ0aWNhbDtcbiAgICB2YXIgcm9vdFJlY3Q7XG4gICAgdmFyIG92ZXJmbG93O1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgYmluZCh3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZG93LCAicmVzaXplIGxvYWQiLCBUaHJvdHRsZShhcHBseShlbWl0LCBFVkVOVF9SRVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVpFKSkpO1xuICAgICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCBpbmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCk7XG4gICAgICBvbihFVkVOVF9SRVNJWkUsIHJlc2l6ZSk7XG4gICAgfVxuXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2ZXJ0aWNhbCA9IG9wdGlvbnMuZGlyZWN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0gVFRCO1xuICAgICAgc3R5bGUocm9vdCwgIm1heFdpZHRoIiwgdW5pdChvcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aCkpO1xuICAgICAgc3R5bGUodHJhY2ssIHJlc29sdmUoInBhZGRpbmdMZWZ0IiksICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NQYWRkaW5nKGZhbHNlKSk7XG4gICAgICBzdHlsZSh0cmFjaywgcmVzb2x2ZSgicGFkZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmdSaWdodCIpLCBjc3NQYWRkaW5nKHRydWUpKTtcbiAgICAgIHJlc2l6ZSh0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVzaXplKGZvcmNlKSB7XG4gICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5ld1JlY3QgPSByZWN0KHJvb3QpO1xuXG4gICAgICBpZiAoZm9yY2UgfHwgcm9vdFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LndpZHRoICE9PSBuZXdSZWN0LndpZHRoIHx8IHJvb3RSZWN0LmhlaWdodCAhPT0gbicKICAgICAgICAgICAgICAgICAgICAgICAgYidld1JlY3QuaGVpZ2h0KSB7XG4gICAgICAgIHN0eWxlKHRyYWNrLCAiaGVpZ2h0IiwgY3NzVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYWNrSGVpZ2h0KCkpO1xuICAgICAgICBzdHlsZVNsaWRlcyhyZXNvbHZlKCJtYXJnaW5SaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQiKSwgdW5pdChvcHRpb25zLmdhcCkpO1xuICAgICAgICBzdHlsZVNsaWRlcygid2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoIiwgY3NzU2xpZGVXaWR0aCgpKTtcbiAgICAgICAgc3R5bGVTbGlkZXMoImhlaWdodCIsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NTbGlkZUhlaWdodCgpLCB0cnVlKTtcbiAgICAgICAgcm9vdFJlY3QgPSBuZXdSZWN0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgZW1pdChFVkVOVF9SRVNJWkVEKTtcblxuICAgICAgICBpZiAob3ZlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG93ICE9PSAob3ZlcmZsb3cgPSBpc092ZXJmbG93KCkpKSB7XG4gICAgICAgICAgdG9nZ2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUNsYXNzKHJvb3QsIENMQVNTX09WRVJGTE9XLCBvdmVyZmxvdyk7XG4gICAgICAgICAgZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQoRVZFTlRfT1ZFUkZMT1csIG92ZXJmbG93KTtcbiAgICAgICAgfVxuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG5cbiAgICBmdW5jdGlvbiBjc3NQYWRkaW5nKHJpZ2h0KSB7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICB2YXIgcHJvcCA9IHJlc29sdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlKHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7XG4gICAgICByZXR1cm4gcGFkZGluZyAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdW5pdChwYWRkaW5nW3Byb3BdIHx8IChpc09iamVjdChwYWRkaW5nKSA/IDAgOiBwYWRkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZykpIHx8ICIwcHgiO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNzc1RyYWNrSGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodCgpIHtcbiAgICAgIHZhciBoZWlnaHQgPSAiIjtcblxuICAgICAgaWYgKHZlcnRpY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCkge1xuICAgICAgICBoZWlnaHQgPSBjc3NIZWlnaHQoKTtcbiAgICAgICAgYXNzZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChoZWlnaHQsICJoZWlnaHQgb3IgaGVpZ2h0UmF0aW8gaXMgbWlzc2luZy4iKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGhlaWdodCA9ICJjYWxjKCIgKyBoZWlnaHQgKyAiIC0gIiArIGNzc1BhZGRpbmcoZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHNlKSArICIgLSAiICsgY3NzUGFkZGluZyh0cnVlKSArICIpIjtcbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3NzSGVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCgpIHtcbiAgICAgIHJldHVybiB1bml0KG9wdGlvbnMuaGVpZ2h0IHx8IHJlY3QobGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpLndpZHRoICogb3B0aW9ucy5oZWlnaHRSYXRpbyk7XG4gICAgfVxuXG4gICAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGNzc1NsaWRlV2lkdGgoKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoID8gbnVsbCA6IHVuaXQob3B0aW9ucy5maXhlZFdpZHRoKSB8fCAodmVydGljYWwgPyAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIgOiBjc3NTbGlkZVNpemUoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3NzU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlSGVpZ2h0KCkge1xuICAgICAgcmV0dXJuIHVuaXQob3B0aW9ucy5maXhlZEhlaWdodCkgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8ICh2ZXJ0aWNhbCA/IG9wdGlvbnMuYXV0b0hlaWdodCA/IG51bGwgOiBjc3NTbGlkZVNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3plKCkgOiBjc3NIZWlnaHQoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3NzU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlU2l6ZSgpIHtcbiAgICAgIHZhciBnYXAgPSB1bml0KG9wdGlvbnMuZ2FwKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gImNhbGMoKDEwMCUiICsgKGdhcCAmJiAiICsgIiArIGdhcCkgKyAiKS8iJwogICAgICAgICAgICAgICAgICAgICAgICBiJyArIChvcHRpb25zLnBlclBhZ2UgfHwgMSkgKyAoZ2FwICYmICIgLSAiICsgZ2FwKSArICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFNpemUoKSB7XG4gICAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHJlY3QobGlzdClbcmVzb2x2ZSgid2lkdGgiKV07XG4gICAgfVxuXG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHNsaWRlU2l6ZShpbmRleCwgd2l0aG91dEdhcCkge1xuICAgICAgdmFyIFNsaWRlID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEF0KGluZGV4IHx8IDApO1xuICAgICAgcmV0dXJuIFNsaWRlID8gcmVjdChTbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUpW3Jlc29sdmUoIndpZHRoIildICsgKHdpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpKSA6IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG90YWxTaXplKGluZGV4LCB3aXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG91dEdhcCkge1xuICAgICAgdmFyIFNsaWRlID0gZ2V0QXQoaW5kZXgpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKFNsaWRlKSB7XG4gICAgICAgIHZhciByaWdodCA9IHJlY3QoU2xpZGUuc2xpZGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tyZXNvbHZlKCJyaWdodCIpXTtcbiAgICAgICAgdmFyIGxlZnQgPSByZWN0KGxpc3QpW3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NvbHZlKCJsZWZ0IildO1xuICAgICAgICByZXR1cm4gYWJzKHJpZ2h0IC0gbGVmdCkgKyAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2xpZGVyU2l6ZSh3aXRob3V0R2FwKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgcmV0dXJuIHRvdGFsU2l6ZShTcGxpZGUyLmxlbmd0aCAtIDEpIC0gdG90YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2l6ZSgwKSArIHNsaWRlU2l6ZSgwLCB3aXRob3V0R2FwKTtcbiAgICB9XG5cbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZ2V0R2FwKCkge1xuICAgICAgdmFyIFNsaWRlID0gZ2V0QXQoMCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmV0dXJuIFNsaWRlICYmIHBhcnNlRmxvYXQoc3R5bGUoU2xpZGUuc2xpZGUsIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlKCJtYXJnaW5SaWdodCIpKSkgfHwgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gZ2V0UGFkZGluZyhyaWdodCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoc3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrLCByZXNvbHZlKCJwYWRkaW5nIiArIChyaWdodCA/ICJSaWdodCIgOiAiTGVmdCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSkpKSB8fCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT3ZlcmZsb3coKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIFNwbGlkZTIuaXMoRkFERSkgfHwgc2xpZGVyU2l6ZSh0cnVlKSA+IGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0U2l6ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgcmVzaXplOiByZXNpemUsXG4gICAgICBsaXN0U2l6ZTogbGlzdFNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgc2xpZGVTaXplOiBzbGlkZVNpemUsXG4gICAgICBzbGlkZXJTaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVyU2l6ZSxcbiAgICAgIHRvdGFsU2l6ZTogdG90YWxTaXplLFxuICAgICAgZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFBhZGRpbmc6IGdldFBhZGRpbmcsXG4gICAgICBpc092ZXJmbG93OiBpc092ZXJmbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd1xuICAgIH07XG4gIH1cblxuICB2YXIgTVVMVElQTElFUiA9IDI7XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIENsb25lcyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgICB2YXIgb24gPSBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicub247XG4gICAgdmFyIEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbWVudHMsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG4gICAgdmFyIHJlc29sdmUgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gICAgdmFyIGNsb25lcyA9IFtdOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgY2xvbmVDb3VudDtcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9uKEVWRU5UX1JFRlJFU0gsIHJlbW91bnQpO1xuICAgICAgb24oW0VWRU5UX1VQREFUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VELCBFVkVOVF9SRVNJWkVdLCBvYnNlcnZlKTtcblxuICAgICAgaWYgKGNsb25lQ291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ID0gY29tcHV0ZUNsb25lQ291bnQoKSkge1xuICAgICAgICBnZW5lcmF0ZShjbG9uZUNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCk7XG4gICAgICAgIENvbXBvbmVudHMyLkxheW91dC5yZXNpemUodHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgICBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSgpO1xuICAgICAgbW91bnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidveSgpIHtcbiAgICAgIHJlbW92ZShjbG9uZXMpO1xuICAgICAgZW1wdHkoY2xvbmVzKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBldmVudC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb2JzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VydmUoKSB7XG4gICAgICB2YXIgY291bnQgPSBjb21wdXRlQ2xvbmVDb3VudCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaWYgKGNsb25lQ291bnQgIT09IGNvdW50KSB7XG4gICAgICAgIGlmIChjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVDb3VudCA8IGNvdW50IHx8ICFjb3VudCkge1xuICAgICAgICAgIGV2ZW50LmVtaXQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1JFRlJFU0gpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGdlbmVyYXRlKGNvdW50KSB7XG4gICAgICB2YXIgc2xpZGVzID0gU2xpZGVzLmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoKS5zbGljZSgpO1xuICAgICAgdmFyIGxlbmd0aCA9IHNsaWRlcy5sZW5ndGg7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIHdoaWxlIChzbGlkZXMubGVuZ3RoIDwgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KSB7XG4gICAgICAgICAgcHVzaChzbGlkZXMsIHNsaWRlcyk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICAgICAgcHVzaChzbGlkZXMuc2xpY2UoLWNvdW50KSwgc2xpZGVzLnNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSgwLCBjb3VudCkpLmZvckVhY2goZnVuY3Rpb24gKFNsaWRlLCBpbmRleCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB2YXIgaXNIZWFkID0gaW5kZXggPCBjb3VudDtcbiAgICAgICAgICB2YXIgY2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlID0gY2xvbmVEZWVwKFNsaWRlLnNsaWRlLCBpbmRleCk7XG4gICAgICAgICAgaXNIZWFkICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IGJlZm9yZShjbG9uZSwgc2xpZGVzWzBdLnNsaWRlKSA6IGFwcGVuZChFbGVtZW50cy5sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdCwgY2xvbmUpO1xuICAgICAgICAgIHB1c2goY2xvbmVzLCBjbG9uZSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIFNsaWRlcy5yZWdpc3RlcihjbG9uZSwgaW5kZXggLSBjb3VudCArIChpc0hlYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gMCA6IGxlbmd0aCksIFNsaWRlLmluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lRGVlcChlbG0sIGluZGV4KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGNsb25lID0gZWxtLmNsb25lTm9kZSh0cnVlKTtcbiAgICAgIGFkZENsYXNzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbG9uZSwgb3B0aW9ucy5jbGFzc2VzLmNsb25lKTtcbiAgICAgIGNsb25lLmlkID0gU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIucm9vdC5pZCArICItY2xvbmUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGNsb25lO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIHZhciBjbG9uZXMyID0gb3B0aW9ucy5jbG9uZXM7XG5cbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAoIVNwbGlkZTIuaXMoTE9PUCkpIHtcbiAgICAgICAgY2xvbmVzMiA9IDA7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSBlbHNlIGlmIChpc1VuZGVmaW5lZChjbG9uZXMyKSkge1xuICAgICAgICB2YXIgZml4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkU2l6ZSA9IG9wdGlvbnNbcmVzb2x2ZSgiZml4ZWRXaWR0aCIpXSAmJiBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInczIuTGF5b3V0LnNsaWRlU2l6ZSgwKTtcbiAgICAgICAgdmFyIGZpeGVkQ291bnQgPSBmaXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWRTaXplICYmIGNlaWwocmVjdChFbGVtZW50cy50cmFjaylbcmVzb2x2ZSgid2lkdGgiKScKICAgICAgICAgICAgICAgICAgICAgICAgYiddIC8gZml4ZWRTaXplKTtcbiAgICAgICAgY2xvbmVzMiA9IGZpeGVkQ291bnQgfHwgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnNbcmVzb2x2ZSgiYXV0b1dpZHRoIildICYmIFNwbGlkZTIubGVuZ3RoIHx8IG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zLnBlclBhZ2UgKiBNVUxUSVBMSUVSO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lczI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBkZXN0cm95OiBkZXN0cm95XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIE1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmZhY2U0ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEludGVyZmFjZTQub24sXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U0LmVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0O1xuXG4gICAgdmFyIHNldCA9IFNwbGlkZTIuc3RhdGUuc2V0O1xuICAgIHZhciBfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyJExheW91dCA9IENvbXBvbmVudHMyLkxheW91dCxcbiAgICAgICAgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlU2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQuc2xpZGVTaXplLFxuICAgICAgICBnZXRQYScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZGluZyA9IF9Db21wb25lbnRzMiRMYXlvdXQuZ2V0UGFkZGluZyxcbiAgICAgICAgdG90YScKICAgICAgICAgICAgICAgICAgICAgICAgYidsU2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQudG90YWxTaXplLFxuICAgICAgICBsaXN0UycKICAgICAgICAgICAgICAgICAgICAgICAgYidpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0Lmxpc3RTaXplLFxuICAgICAgICBzbGlkZXJTaScKICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQuc2xpZGVyU2l6ZTtcbiAgICB2YXIgX0NvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiREaXJlY3RpbyA9IENvbXBvbmVudHMyLkRpcmVjdGlvbixcbiAgICAgICAgcmVzbycKICAgICAgICAgICAgICAgICAgICAgICAgYidsdmUgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8ucmVzb2x2ZSxcbiAgICAgICAgb3JpZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IF9Db21wb25lbnRzMiREaXJlY3Rpby5vcmllbnQ7XG4gICAgdmFyIF9Db21wb25lbnRzMicKICAgICAgICAgICAgICAgICAgICAgICAgYickRWxlbWVudHMzID0gQ29tcG9uZW50czIuRWxlbWVudHMsXG4gICAgICAgIGxpc3QgPSBfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyJEVsZW1lbnRzMy5saXN0LFxuICAgICAgICB0cmFjayA9IF9Db21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0czIkRWxlbWVudHMzLnRyYWNrO1xuICAgIHZhciBUcmFuc2l0aW9uO1xuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG1vdW50KCkge1xuICAgICAgVHJhbnNpdGlvbiA9IENvbXBvbmVudHMyLlRyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uO1xuICAgICAgb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1JFU0laRUQsIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIXSwgcmVwb3NpdGlvbik7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIHJlcG9zaXRpb24oKSB7XG4gICAgICBpZiAoIUNvbXBvbmVudHMyLkNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sbGVyLmlzQnVzeSgpKSB7XG4gICAgICAgIENvbXBvbmVudHMyLlNjcm9sbC5jYW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsKCk7XG4gICAgICAgIGp1bXAoU3BsaWRlMi5pbmRleCk7XG4gICAgICAgIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMi5TbGlkZXMudXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIG1vdmUoZGVzdCwgaW5kZXgsIHByZXYsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgIT09IGluZGV4ICYmIGNhblNoaWZ0KGRlc3QgPiBwcmV2KSkge1xuICAgICAgICBjYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VsKCk7XG4gICAgICAgIHRyYW5zbGF0ZShzaGlmdChnZXRQb3NpdGlvbigpLCBkZXN0ID4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXYpLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgc2V0KE1PVklORyk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZW1pdChFVkVOVF9NT1ZFLCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgICBUcmFuc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbi5zdGFydChpbmRleCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXQoSURMRSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBlbWl0KEVWRU5UX01PVkVELCBpbmRleCwgcHJldiwgZGVzdCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZ1bmN0aW9uIGp1bXAoaW5kZXgpIHtcbiAgICAgIHRyYW5zbGF0ZSh0b1Bvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbihpbmRleCwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24sIHByZXZlbnRMb29wKSB7XG4gICAgICBpZiAoIVNwbGlkZTIuaXMoRkFERSkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHByZXZlbnRMb29wID8gcG9zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbG9vcChwb3NpdGlvbik7XG4gICAgICAgIHN0eWxlKGxpc3QsICJ0cmFuc2Zvcm0iLCAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYW5zbGF0ZSIgKyByZXNvbHZlKCJYIikgKyAiKCIgKyBkZXN0aW5hdGlvbiArICJweCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIik7XG4gICAgICAgIHBvc2l0aW9uICE9PSBkZXN0aW5hdGlvbiAmJiBlbWl0KEVWRU5UX1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSElGVEVEKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb29wKHBvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbikge1xuICAgICAgaWYgKFNwbGlkZTIuaXMoTE9PUCkpIHtcbiAgICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCA9IHRvSW5kZXgocG9zaXRpb24pO1xuICAgICAgICB2YXIgZXhjZWVkZWRNYXggPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXggPiBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEVuZCgpO1xuICAgICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGV4Y2VlZGVkTWluID0gaW5kZXggPCAwO1xuXG4gICAgICAgIGlmIChleGNlZWRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidNaW4gfHwgZXhjZWVkZWRNYXgpIHtcbiAgICAgICAgICBwb3NpdGlvbiA9IHNoaWZ0KHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiwgZXhjZWVkZWRNYXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gcG9zaXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hpZnQocG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBiYWNrd2FyZHMpIHtcbiAgICAgIHZhciBleGNlc3MgPSBwb3NpdGlvbiAtIGdldExpbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdChiYWNrd2FyZHMpO1xuICAgICAgdmFyIHNpemUgPSBzbGlkZXJTaXplKCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcG9zaXRpb24gLT0gb3JpZW50KHNpemUgKiAoY2VpbChhYnMoZXhjZXNzKSAvIHNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3plKSB8fCAxKSkgKiAoYmFja3dhcmRzID8gMSA6IC0xKTtcbiAgICAgIHJldHVybiBwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgdHJhbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGF0ZShnZXRQb3NpdGlvbigpLCB0cnVlKTtcbiAgICAgIFRyYW5zaXRpb24uY2FuY2VsKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW5kZXgocG9zaXRpb24pIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZGVzLmdldCgpO1xuICAgICAgdmFyIGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleCA9IDA7XG4gICAgICB2YXIgbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcblxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvciAodmFyIGkgPSAwOyBpIDwgU2xpZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgc2xpZGVJbmRleCA9IFNsaWRlc1tpXS5pbmRleDtcbiAgICAgICAgdmFyIGRpc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9IGFicyh0b1Bvc2l0aW9uKHNsaWRlSW5kZXgsIHRydWUpIC0gcG9zaXRpb24pJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgICBpZiAoZGlzdGFuY2UgPD0gbWluRGlzdGFuY2UpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgICBpbmRleCA9IHNsaWRlSScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHRvUG9zaXRpb24oaW5kZXgsIHRyaW1taW5nKSB7XG4gICAgICB2YXIgcG9zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uID0gb3JpZW50KHRvdGFsU2l6ZShpbmRleCAtIDEpIC0gb2Zmc2V0KGluZGV4KSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmV0dXJuIHRyaW1taW5nID8gdHJpbShwb3NpdGlvbikgOiBwb3NpdGlvbjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UG9zaXRpb24oKSB7XG4gICAgICB2YXIgbGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSByZXNvbHZlKCJsZWZ0Iik7XG4gICAgICByZXR1cm4gcmVjdChsaXN0KVtsZWZ0XSAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZWN0KHRyYWNrKVtsZWZ0XSArIG9yaWVudChnZXRQYWRkaW5nKGZhbHNlKSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGZ1bmN0aW9uIHRyaW0ocG9zaXRpb24pIHtcbiAgICAgIGlmIChvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy50cmltU3BhY2UgJiYgU3BsaWRlMi5pcyhTTElERSkpIHtcbiAgICAgICAgcG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduID0gY2xhbXAocG9zaXRpb24sIDAsIG9yaWVudChzbGlkZXJTaXplKHRydWUpIC0gbGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RTaXplKCkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQoaW5kZXgpIHtcbiAgICAgIHZhciBmb2N1cyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLmZvY3VzO1xuICAgICAgcmV0dXJuIGZvY3VzID09PSAiY2VudGVyIiA/IChsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdFNpemUoKSAtIHNsaWRlU2l6ZShpbmRleCwgdHJ1ZSkpIC8gMiA6ICtmb2N1cyAqIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVNpemUoaW5kZXgpIHx8IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0TGltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0KG1heCkge1xuICAgICAgcmV0dXJuIHRvUG9zaXRpb24obWF4ID8gQ29tcG9uZW50czIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbnRyb2xsZXIuZ2V0RW5kKCkgOiAwLCAhIW9wdGlvbnMudHJpbVNwYWNlKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgZnVuY3Rpb24gY2FuU2hpZnQoYmFja3dhcmRzKSB7XG4gICAgICB2YXIgcycKICAgICAgICAgICAgICAgICAgICAgICAgYidoaWZ0ZWQgPSBvcmllbnQoc2hpZnQoZ2V0UG9zaXRpb24oKSwgYmFja3dhcmRzKSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGJhY2t3YXJkcyA/IHNoaWZ0ZWQgPj0gMCA6IHNoaWZ0ZWQgPD0gbGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RbcmVzb2x2ZSgic2Nyb2xsV2lkdGgiKV0gLSByZWN0KHRyYWNrKVtyZXNvbHZlKCJ3aWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGgiKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhjZWVkZWRMaW1pdChtYXgsIHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbikge1xuICAgICAgcG9zaXRpb24gPSBpc1VuZGVmaW5lZChwb3NpdGlvbikgPyBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0UG9zaXRpb24oKSA6IHBvc2l0aW9uO1xuICAgICAgdmFyIGV4Y2VlZGVkTWluID0gbWF4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAhPT0gdHJ1ZSAmJiBvcmllbnQocG9zaXRpb24pIDwgb3JpZW50KGdldExpbWl0KGZhbHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpO1xuICAgICAgdmFyIGV4Y2VlZGVkTWF4ID0gbWF4ICE9PSBmYWxzZSAmJiBvcmllbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHBvc2l0aW9uKSA+IG9yaWVudChnZXRMaW1pdCh0cnVlKSk7XG4gICAgICByZXR1cm4gZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VlZGVkTWluIHx8IGV4Y2VlZGVkTWF4O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbW91bnQ6IG1vdW50LFxuICAgICAgbW92ZTogbW92ZSxcbiAgICAgIGp1bXA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidqdW1wLFxuICAgICAgdHJhbnNsYXRlOiB0cmFuc2xhdGUsXG4gICAgICBzaGlmdDogcycKICAgICAgICAgICAgICAgICAgICAgICAgYidoaWZ0LFxuICAgICAgY2FuY2VsOiBjYW5jZWwsXG4gICAgICB0b0luZGV4OiB0b0luZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleCxcbiAgICAgIHRvUG9zaXRpb246IHRvUG9zaXRpb24sXG4gICAgICBnZXRQb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb246IGdldFBvc2l0aW9uLFxuICAgICAgZ2V0TGltaXQ6IGdldExpbWl0LFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGV4Y2VlZGVkTGltaXQ6IGV4Y2VlZGVkTGltaXQsXG4gICAgICByZXBvc2l0aW9uOiByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3NpdGlvblxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb250cm9sbGVyKFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2U1JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9IF9FdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2U1Lm9uLFxuICAgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlNS5lbWl0O1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBNb3ZlID0gQ29tcG9uZW50czIuTW92ZTtcbiAgICB2YXIgZ2V0UG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbiAgICAgICAgZ2V0TGltaXQgPSBNb3ZlLmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RMaW1pdCxcbiAgICAgICAgdG9Qb3NpdGlvbiA9IE1vdmUudG9Qb3NpdGlvbjtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIF9Db21wb25lbnRzMiRTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXMsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpc0Vub3VnaCA9IF9Db21wb25lbnRzMiRTbGlkZXMuaXNFbm91Z2gsXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRMZW5ndGggPSBfQ29tcG9uZW50czIkU2xpZGVzLmdldExlbmd0aDtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29taXRFbmQgPSBvcHRpb25zLm9taXRFbmQ7XG4gICAgdmFyIGlzTG9vcCA9IFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKExPT1ApO1xuICAgIHZhciBpc1NsaWRlID0gU3BsaWRlMi5pcyhTTElERSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBnZXROZXh0ID0gYXBwbHkoZ2V0QWRqYWNlbnQsIGZhbHNlKTtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldFByZXYgPSBhcHBseShnZXRBZGphY2VudCwgdHJ1ZSk7XG4gICAgdmFyIGN1cnJJbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ggPSBvcHRpb25zLnN0YXJ0IHx8IDA7XG4gICAgdmFyIGVuZEluZGV4O1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgcHJldkluZGV4ID0gY3VyckluZGV4O1xuICAgIHZhciBzbGlkZUNvdW50O1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgcGVyTW92ZTtcbiAgICB2YXIgcGVyUGFnZTtcblxuICAgIGZ1bmN0aW9uIG1vdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpIHtcbiAgICAgIGluaXQoKTtcbiAgICAgIG9uKFtFVkVOVF9VUERBVEVELCBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVGUkVTSCwgRVZFTlRfRU5EX0lOREVYX0NIQU5HRURdLCBpbml0KTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihFVkVOVF9SRVNJWkVELCBvblJlc2l6ZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBpbml0KCkge1xuICAgICAgc2xpZGVDb3VudCA9IGdldExlbmd0aCh0cnVlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBwZXJNb3ZlID0gb3B0aW9ucy5wZXJNb3ZlO1xuICAgICAgcGVyUGFnZSA9IG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLnBlclBhZ2U7XG4gICAgICBlbmRJbmRleCA9IGdldEVuZCgpO1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBpbmRleCA9IGNsYW1wKGN1cnJJbmRleCwgMCwgb21pdEVuZCA/IGVuZEluZGV4IDogcycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlQ291bnQgLSAxKTtcblxuICAgICAgaWYgKGluZGV4ICE9PSBjdXJySW5kZXgpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIGN1cnJJbmRleCA9IGluZGV4O1xuICAgICAgICBNb3ZlLnJlcG9zaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25SZXNpemVkKCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIGlmIChlbmRJbmRleCAhPT0gZ2V0RW5kKCkpIHtcbiAgICAgICAgZW1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBnbyhjb250cm9sLCBhbGxvd1NhbWVJbmRleCwgY2FsbGJhY2spIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoIWlzQnVzeSgpKSB7XG4gICAgICAgIHZhciBkZXN0ID0gcGFyc2UoY29udHJvbCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB2YXIgaW5kZXggPSBsb29wKGRlc3QpO1xuXG4gICAgICAgIGlmIChpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggPiAtMSAmJiAoYWxsb3dTYW1lSW5kZXggfHwgaW5kZXggIT09IGN1cnJJbmRleCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgICAgc2V0SW5kZXgoaW5kZXgpO1xuICAgICAgICAgIE1vdmUubW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoZGVzdCwgaW5kZXgsIHByZXZJbmRleCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbChkZXN0aW5hdGlvbiwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R1cmF0aW9uLCBzbmFwLCBjYWxsYmFjaykge1xuICAgICAgQ29tcG9uZW50czIuU2Nyb2xsJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCBmdW5jdGlvbiAoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICB2YXIgaW5kZXggPSBsb29wKE1vdmUudG9JbmRleChnZXRQb3NpdGlvbigpKSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICBzZXRJbmRleChvbWl0RW5kID8gbWluKGluZGV4LCBlbmRJbmRleCkgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXgpO1xuICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlKGNvbnRyb2wpIHtcbiAgICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXggPSBjdXJySW5kZXg7XG5cbiAgICAgIGlmIChpc1N0cmluZyhjb250cm9sKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgICAgdmFyIF9yZWYgPSBjb250cm9sLm1hdGNoKC8oWytcXC08Pl0pKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXGQrKT8vKSB8fCBbXSxcbiAgICAgICAgICAgIGluZGljYXRvciA9IF9yZWZbMV0sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgICAgbnVtYmVyID0gX3JlZlsyXTtcblxuICAgICAgICBpZiAoaW5kaWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRvciA9PT0gIisiIHx8IGluZGljYXRvciA9PT0gIi0iKSB7XG4gICAgICAgICAgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gY29tcHV0ZURlc3RJbmRleChjdXJySW5kZXggKyArKCIiICsgaW5kaWNhdG9yICsgKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicrbnVtYmVyIHx8IDEpKSwgY3VyckluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRpYycKICAgICAgICAgICAgICAgICAgICAgICAgYidhdG9yID09PSAiPiIpIHtcbiAgICAgICAgICBpbmRleCA9IG51bWJlciA/IHRvSW5kZXgoKycKICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIpIDogZ2V0TmV4dCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbmRpY2F0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyID09PSAiPCIpIHtcbiAgICAgICAgICBpbmRleCA9IGdldFByZXYodHJ1ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleCA9IGlzTG9vcCA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb250cm9sIDogY2xhbXAoY29udHJvbCwgMCwgZW5kSW5kZXgpO1xuICAgICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFkamFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudChwcmV2LCBkZXN0aW5hdGlvbikge1xuICAgICAgdmFyIG51bWJlciA9IHBlck1vdmUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IChoYXNGb2N1cygpID8gMSA6IHBlclBhZ2UpO1xuICAgICAgdmFyIGRlc3QgPSBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZURlc3RJbmRleChjdXJySW5kZXggKyBudW1iZXIgKiAocHJldiA/IC0xIDogMSksIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJySW5kZXgsICEocGVyTW92ZSB8fCBoYXNGb2N1cygpKSk7XG5cbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA9PT0gLTEgJiYgaXNTbGlkZSkge1xuICAgICAgICBpZiAoIWFwcHJveGltYXRlbHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXF1YWwoZ2V0UG9zaXRpb24oKSwgZ2V0TGltaXQoIXByZXYpLCAxKSkge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gcHJldiA/IDAgOiBlbmRJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uID8gZGVzdCA6IGxvb3AoZGVzdCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVEZXN0SW5kZXgoZGVzdCwgZnJvbSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NuYXBQYWdlKSB7XG4gICAgICBpZiAoaXNFbm91Z2goKSB8fCBoYXNGb2N1cygpKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICB2YXIgaW5kZXggPSBjb21wdXRlTW92YWJsZURlc3RJbmRleChkZXN0KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICAgICAgaWYgKGluZGV4ICE9PSBkZXN0KSB7XG4gICAgICAgICAgZnJvbSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0O1xuICAgICAgICAgIGRlc3QgPSBpbmRleDtcbiAgICAgICAgICBzbmFwUGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXN0IDwgMCB8fCBkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCA+IGVuZEluZGV4KSB7XG4gICAgICAgICAgaWYgKCFwZXJNb3ZlICYmIChiZXR3ZWVuKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwLCBkZXN0LCBmcm9tLCB0cnVlKSB8fCBiZXR3ZWVuKGVuZEluZGV4LCBmcm9tLCBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdHJ1ZSkpKSB7XG4gICAgICAgICAgICBkZXN0ID0gdG9JbmRleCh0b1BhZ2UoZGVzdCkpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzTG9vcCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgICAgZGVzdCA9IHNuYXBQYWdlID8gZGVzdCA8IDAgPyAtKHNsaWRlQ291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ICUgcGVyUGFnZSB8fCBwZXJQYWdlKSA6IHNsaWRlQ291bnQgOiBkZXN0O1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5yZXdpbmQpIHtcbiAgICAgICAgICAgICAgZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBkZXN0IDwgMCA/IGVuZEluZGV4IDogMDtcbiAgICAgICAgICAgIH0gZWxzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICAgICAgICBkZXN0ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc25hcFBhZ2UgJiYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QgIT09IGZyb20pIHtcbiAgICAgICAgICAgIGRlc3QgPSB0b0luZGV4KHRvUGFnZShmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbSkgKyAoZGVzdCA8IGZyb20gPyAtMSA6IDEpKTtcbiAgICAgICAgICB9XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXN0ID0gLTE7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmFibGVEZXN0SW5kZXgoZGVzdCkge1xuICAgICAgaWYgKGlzU2xpZGUgJiYgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicudHJpbVNwYWNlID09PSAibW92ZSIgJiYgZGVzdCAhPT0gY3VyckluZGV4KSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgcG9zaXRpb24gPSBnZXRQb3NpdGlvbigpO1xuXG4gICAgICAgIHdoaWxlICcKICAgICAgICAgICAgICAgICAgICAgICAgYicocG9zaXRpb24gPT09IHRvUG9zaXRpb24oZGVzdCwgdHJ1ZSkgJiYgYmV0d2VlbihkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgMCwgU3BsaWRlMi5sZW5ndGggLSAxLCAhb3B0aW9ucy5yZXdpbmQpKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlc3QgPCBjdXJySW5kZXggPyAtLWRlc3QgOiArK2Rlc3Q7XG4gICAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZXN0O1xuICAgIH1cblxuICAgIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBsb29wKGluZGV4KSB7XG4gICAgICByZXR1cm4gaXNMb29wID8gKGluZGV4ICsgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlQ291bnQpICUgc2xpZGVDb3VudCB8fCAwIDogaW5kZXg7XG4gICAgfVxuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGdldEVuZCgpIHtcbiAgICAgIHZhciBlbmQgPSBzbGlkZUNvdW50IC0gKGhhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NGb2N1cygpIHx8IGlzTG9vcCAmJiBwZXJNb3ZlID8gMSA6IHBlclBhZ2UpO1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgd2hpbGUgKG9taXRFbmQgJiYgZW5kLS0gPiAwKSB7XG4gICAgICAgIGlmICh0b1BvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbihzbGlkZUNvdW50IC0gMSwgdHJ1ZSkgIT09IHRvUG9zaXRpb24oZW5kLCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpIHtcbiAgICAgICAgICBlbmQrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNsYW1wKGVuZCwgMCwgc2xpZGVDb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSAxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0luZGV4KHBhZ2UpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gY2xhbXAoaGFzRm9jdXMoKSA/IHBhZ2UgOiBwZXJQYWdlICogcGFnZSwgMCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVuZEluZGV4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b1BhZ2UoaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICByZXR1cm4gaGFzRm9jdXMoKSA/IG1pbihpbmRleCwgZW5kSW5kZXgpIDogZmxvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yKChpbmRleCA+PSBlbmRJbmRleCA/IHNsaWRlQ291bnQgLSAxIDogaW5kZXgpIC8gcGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclBhZ2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGVzdChkZXN0aW5hdGlvbikgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHZhciBjbG9zZXN0ID0gTW92ZS50b0luZGV4KGRlc3RpbmF0aW9uKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gaXNTbGlkZSA/IGNsYW1wKGNsb3Nlc3QsIDAsIGVuZEluZGV4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBjbG9zZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldEluZGV4KGluZGV4KSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaWYgKGluZGV4ICE9PSBjdXJySW5kZXgpIHtcbiAgICAgICAgcHJldkluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCA9IGN1cnJJbmRleDtcbiAgICAgICAgY3VyckluZGV4ID0gaW5kZXg7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEluZGV4KHByZXYpIHtcbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJbmRleDtcbiAgICB9XG5cbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaGFzRm9jdXMoKSB7XG4gICAgICByZXR1cm4gIWlzVW5kZWZpbmVkKG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmZvY3VzKSB8fCBvcHRpb25zLmlzTmF2aWdhdGlvbjtcbiAgICB9XG5cbiAgICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gaXNCdXN5KCkge1xuICAgICAgcmV0dXJuIFNwbGlkZTIuc3RhdGUuaXMoW01PVicKICAgICAgICAgICAgICAgICAgICAgICAgYidJTkcsIFNDUk9MTElOR10pICYmICEhb3B0aW9ucy53YWl0Rm9yVHJhbnNpdGlvbjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIGdvOiBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ28sXG4gICAgICBzY3JvbGw6IHNjcm9sbCxcbiAgICAgIGdldE5leHQ6IGdldE5leHQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgZ2V0UHJldjogZ2V0UHJldixcbiAgICAgIGdldEFkamFjZW50OiBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RqYWNlbnQsXG4gICAgICBnZXRFbmQ6IGdldEVuZCxcbiAgICAgIHNldEluZGV4OiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0SW5kZXgsXG4gICAgICBnZXRJbmRleDogZ2V0SW5kZXgsXG4gICAgICB0b0luZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogdG9JbmRleCxcbiAgICAgIHRvUGFnZTogdG9QYWdlLFxuICAgICAgdG9EZXN0OiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29EZXN0LFxuICAgICAgaGFzRm9jdXM6IGhhc0ZvY3VzLFxuICAgICAgaXNCdXN5OiBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NCdXN5XG4gICAgfTtcbiAgfVxuXG4gIHZhciBYTUxfTkFNRV9TUEFDRSA9ICJodHRwOi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInL3d3dy53My5vcmcvMjAwMC9zdmciO1xuICB2YXIgUEFUSCA9ICJtMTUuNSAwLjkzMi00LjMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuNiA0LjQtNC4zLScKICAgICAgICAgICAgICAgICAgICAgICAgYic0LjQtNC40LTE0LjYtMTQuNnoiO1xuICB2YXIgU0laRSA9IDQwO1xuXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBBcnJvd3MoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gICAgdmFyIG9uID0gZXZlbnQub24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBiaW5kID0gZXZlbnQuYmluZCxcbiAgICAgICAgZW1pdCA9IGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5lbWl0O1xuICAgIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jbGFzc2VzLFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInczIuRWxlbWVudHMsXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGxlcjtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5hcnJvd3MsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB0cmFjayA9IEVsZW1lbnRzLnRyYWNrO1xuICAgIHZhciB3cmFwcGVyID0gcGxhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG9sZGVyO1xuICAgIHZhciBwcmV2ID0gRWxlbWVudHMucHJldjtcbiAgICB2YXIgbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHQgPSBFbGVtZW50cy5uZXh0O1xuICAgIHZhciBjcmVhdGVkO1xuICAgIHZhciB3cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlckNsYXNzZXM7XG4gICAgdmFyIGFycm93cyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgb24oRVZFTlRfVVBEQVRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW91bnQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSgpO1xuICAgICAgbW91bnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdCgpIHtcbiAgICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5hcnJvd3M7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoZW5hYmxlZCAmJiAhKHByZXYgJiYgbmV4dCkpIHtcbiAgICAgICAgY3JlYXRlQXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm93cygpO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBhc3NpZ24oYXJyb3dzLCB7XG4gICAgICAgICAgcHJldjogcHJldixcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbmV4dDogbmV4dFxuICAgICAgICB9KTtcbiAgICAgICAgZGlzcGxheSh3cmFwcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciwgZW5hYmxlZCA/ICIiIDogIm5vbmUiKTtcbiAgICAgICAgYWRkQ2xhc3Mod3JhcHBlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHdyYXBwZXJDbGFzc2VzID0gQ0xBU1NfQVJST1dTICsgIi0tIiArIG9wdGlvbnMuZGlyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbik7XG5cbiAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICBsaXN0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduKCk7XG4gICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgICAgc2V0QXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidbcHJldiwgbmV4dF0sIEFSSUFfQ09OVFJPTFMsIHRyYWNrLmlkKTtcbiAgICAgICAgICBlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdChFVkVOVF9BUlJPV1NfTU9VTlRFRCwgcHJldiwgbmV4dCk7XG4gICAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIGV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5kZXN0cm95KCk7XG4gICAgICByZW1vdmVDbGFzcyh3cmFwcGVyLCB3cmFwcGVyQ2xhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMpO1xuXG4gICAgICBpZiAoY3JlYXRlZCkge1xuICAgICAgICByZW1vdmUocGxhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlaG9sZGVyID8gW3ByZXYsIG5leHRdIDogd3JhcHBlcik7XG4gICAgICAgIHByZXYgPSBuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dCA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKFtwcmV2LCBuZXh0XSwgQUxMX0FUVFJJQlVURVMpO1xuICAgICAgfVxuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBsaXN0ZW4oKSB7XG4gICAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX01PVkVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9TQ1JPTExFRCwgRVZFTlRfRU5EX0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkRFWF9DSEFOR0VEXSwgdXBkYXRlKTtcbiAgICAgIGJpbmQobmV4dCwgImNsaWNrIiwgYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGx5KGdvLCAiPiIpKTtcbiAgICAgIGJpbmQocHJldiwgImNsaWNrIiwgYXBwbHkoZ28sICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInPCIpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnbyhjb250cm9sKSB7XG4gICAgICBDbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudHJvbGxlci5nbyhjb250cm9sLCB0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3JlYXRlQXJyb3dzKCkge1xuICAgICAgd3JhcHBlciA9IHBsYWNlaG9sZGVyIHx8IGNyZWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoImRpdiIsIGNsYXNzZXMuYXJyb3dzKTtcbiAgICAgIHByZXYgPSBjcmVhdGVBcnJvdygnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ1ZSk7XG4gICAgICBuZXh0ID0gY3JlYXRlQXJyb3coZmFsc2UpO1xuICAgICAgY3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWF0ZWQgPSB0cnVlO1xuICAgICAgYXBwZW5kKHdyYXBwZXIsIFtwcmV2LCBuZXh0XScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgIXBsYWNlaG9sZGVyICYmIGJlZm9yZSh3cmFwcGVyLCB0cmFjayk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFycm93KHByZXYyKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGFycm93ID0gIjxidXR0b24gY2xhc3M9XFwiIiArIGNsYXNzZXMuYXJyb3cgKyAiICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsgKHByZXYyID8gY2xhc3Nlcy5wcmV2IDogY2xhc3Nlcy5uZXh0KSArICJcXCIgdHlwZT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFwiYnV0dG9uXFwiPjxzdmcgeG1sbnM9XFwiIiArIFhNTF9OQU1FX1NQQUNFICsgIlxcIicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmlld0JveD1cXCIwIDAgIiArIFNJWkUgKyAiICIgKyBTSVpFICsgIlxcIiB3aWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9XFwiIiArIFNJWkUgKyAiXFwiIGhlaWdodD1cXCIiICsgU0laRSArICJcXCIgZm9jdXNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JsZT1cXCJmYWxzZVxcIj48cGF0aCBkPVxcIiIgKyAob3B0aW9ucy5hcnJvd1BhdGggfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IFBBVEgpICsgIlxcIiAvPiI7XG4gICAgICByZXR1cm4gcGFyc2VIdG1sKGFycm93KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKHByZXYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYmIG5leHQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gU3BsaWRlMi5pbmRleDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHZhciBwcmV2SW5kZXggPSBDb250cm9sbGVyLmdldFByZXYoKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBuZXh0SW5kZXggPSBDb250cm9sbGVyLmdldE5leHQoKTtcbiAgICAgICAgdmFyIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2TGFiZWwgPSBwcmV2SW5kZXggPiAtMSAmJiBpbmRleCA8IHByZXZJbmRleCA/IGkxOG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmxhc3QgOiBpMThuLnByZXY7XG4gICAgICAgIHZhciBuZXh0TGFiZWwgPSBuZXh0SW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID4gLTEgJiYgaW5kZXggPiBuZXh0SW5kZXggPyBpMThuLmZpcnN0IDogaTE4bi5uZXh0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgcHJldi5kaXNhYmxlZCA9IHByZXZJbmRleCA8IDA7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXh0LmRpc2FibGVkID0gbmV4dEluZGV4IDwgMDtcbiAgICAgICAgc2V0QXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGFiZWwpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUobicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHQsIEFSSUFfTEFCRUwsIG5leHRMYWJlbCk7XG4gICAgICAgIGVtaXQoRVZFTlRfQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgYidXU19VUERBVEVELCBwcmV2LCBuZXh0LCBwcmV2SW5kZXgsIG5leHRJbmRleCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhcnJvd3M6IGFycm93cyxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgICAgdScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZTogdXBkYXRlXG4gICAgfTtcbiAgfVxuXG4gIHZhciBJTlRFUlZBTF9EQVRBX0FUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RSSUJVVEUgPSBEQVRBX0FUVFJJQlVURSArICItaW50ZXJ2YWwiO1xuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBBdXRvcGxheShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgX0V2ZW50SW50ZXJmYWNlNiA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgb24gPSBfRXZlbnRJbnRlcmZhY2U2Lm9uLFxuICAgICAgICBiaW5kID0gX0V2ZW50SW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZTYuYmluZCxcbiAgICAgICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTYuZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQ7XG5cbiAgICB2YXIgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwob3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW50ZXJ2YWwsIFNwbGlkZTIuZ28uYmluZChTcGxpZGUyLCAiPiIpLCBvbkFuaW1hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidGcmFtZSk7XG4gICAgdmFyIGlzUGF1c2VkID0gaW50ZXJ2YWwuaXNQYXVzZWQ7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICBfQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMyJEVsZW1lbnRzNCA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICBybycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdCA9IF9Db21wb25lbnRzMiRFbGVtZW50czQucm9vdCxcbiAgICAgICAgdG9nZ2xlID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMiRFbGVtZW50czQudG9nZ2xlO1xuICAgIHZhciBhdXRvcGxheSA9IG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmF1dG9wbGF5O1xuICAgIHZhciBob3ZlcmVkO1xuICAgIHZhciBmb2N1c2VkOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgc3RvcHBlZCA9IGF1dG9wbGF5ID09PSAicGF1c2UiO1xuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG1vdW50KCkge1xuICAgICAgaWYgKGF1dG9wbGF5KSB7XG4gICAgICAgIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0ZW4oKTtcbiAgICAgICAgdG9nZ2xlICYmIHNldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0NPTlRST0xTLCBFbGVtZW50cy50cmFjay5pZCk7XG4gICAgICAgIHN0b3BwZWQgfHwgcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXkoKTtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGxpc3RlbigpIHtcbiAgICAgIGlmIChvcHRpb25zLnBhdXNlT25Ib3ZlcikgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgYmluZChyb290LCAibW91c2VlbnRlciBtb3VzZWxlYXZlIiwgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIChlKSB7XG4gICAgICAgICAgaG92ZXJlZCA9IGUudHlwZSA9PT0gIm1vdXNlZW50ZXIiOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgICBhdXRvVG9nZ2xlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKG9wdGlvbnMucGF1c2VPbkZvY3VzKSB7XG4gICAgICAgIGJpbmQocm9vdCwgIicKICAgICAgICAgICAgICAgICAgICAgICAgYidmb2N1c2luIGZvY3Vzb3V0IiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICBmb2N1c2VkICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGUudHlwZSA9PT0gImZvY3VzaW4iO1xuICAgICAgICAgIGF1dG9Ub2dnbGUoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodG9nZ2xlKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBiaW5kKHRvZ2dsZSwgImNsaWNrIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0b3BwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkID8gcGxheSgpIDogcGF1c2UodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgb24oW0VWRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfUkVGUkVTSF0sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnZhbC5yZXdpbmQpO1xuICAgICAgb24oRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgZnVuY3Rpb24gcGxheSgpIHtcbiAgICAgIGlmIChpc1BhdXNlZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSAmJiBDb21wb25lbnRzMi5TbGlkZXMuaXNFbm91Z2goKSkge1xuICAgICAgICBpbnRlcnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWwuc3RhcnQoIW9wdGlvbnMucmVzZXRQcm9ncmVzcyk7XG4gICAgICAgIGZvY3VzZWQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG92ZXJlZCA9IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdXBkYXRlKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBlbWl0KEVWRU5UX0FVVE9QTEFZX1BMQVkpO1xuICAgICAgfVxuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBmdW5jdGlvbiBwYXVzZShzdG9wKSB7XG4gICAgICBpZiAoc3RvcCA9PT0gdm9pZCAwKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgc3RvcHBlZCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAhIXN0b3A7XG4gICAgICB1cGRhdGUoKTtcblxuICAgICAgaWYgKCFpc1BhdXNlZCgpKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBpbnRlcnZhbC5wYXVzZSgpO1xuICAgICAgICBlbWl0KEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgYidBVVRPUExBWV9QQVVTRSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29Ub2dnbGUoKSB7XG4gICAgICBpZiAoIXN0b3BwZWQpIHtcbiAgICAgICAgaG92ZXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgfHwgZm9jdXNlZCA/IHBhdXNlKGZhbHNlKSA6IHBsYXkoKTtcbiAgICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKHRvZ2dsZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgdG9nZ2xlQ2xhc3ModG9nZ2xlLCBDTEFTU19BQ1RJVkUsICFzdG9wcGVkKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgIHNldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUFfTEFCRUwsIG9wdGlvbnMuaScKICAgICAgICAgICAgICAgICAgICAgICAgYicxOG5bc3RvcHBlZCA/ICJwbGF5IiA6ICJwYXVzZSJdKTtcbiAgICAgIH1cbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZShyYXRlKSB7XG4gICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGJhciA9IEVsZW1lbnRzLmJhcjtcbiAgICAgIGJhciAmJiBzdHlsZShiYXIsICJ3aWR0aCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCByYXRlICogMTAwICsgIiUiKTtcbiAgICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUExBWUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkcsIHJhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uTW92ZShpbmRleCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHZhciBTbGlkZSA9IENvbXBvbmVudHMyLlNsaWRlcy5nZXRBdChpbmRleCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaW50ZXJ2YWwuc2V0KFNsaWRlICYmICtnZXRBdHRyaWJ1dGUoU2xpZGUuc2xpZGUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSkgfHwgb3B0aW9ucy5pbnRlcnZhbCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneTogaW50ZXJ2YWwuY2FuY2VsLFxuICAgICAgcGxheTogcGxheSxcbiAgICAgIHBhdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogcGF1c2UsXG4gICAgICBpc1BhdXNlZDogaXNQYXVzZWRcbiAgICB9O1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIENvdmVyKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBfRXZlbnRJbnRlcmZhY2U3ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBvbiA9IF9FdmVudEludGVyZmFjZTcub247XG5cbiAgICBmdW5jdGlvbiBtb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQoKSB7XG4gICAgICBpZiAob3B0aW9ucy5jb3Zlcikge1xuICAgICAgICBvbihFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfTEFaWUxPQURfTE9BREVELCBhcHBseSh0b2dnbGUsIHRydWUpKTtcbiAgICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIXSwgYXBwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KGNvdmVyLCB0cnVlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY292JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyKGNvdmVyMikge1xuICAgICAgQ29tcG9uZW50czIuU2xpZGVzLmZvckVhY2goZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIChTbGlkZSkge1xuICAgICAgICB2YXIgaW1nID0gY2hpbGQoU2xpZGUuY29udGFpbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCBTbGlkZS5zbGlkZSwgImltZyIpO1xuXG4gICAgICAgIGlmIChpbWcgJiYgaW1nJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcmMpIHtcbiAgICAgICAgICB0b2dnbGUoY292ZXIyLCBpbWcsIFNsaWRlKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvZ2dsZShjb3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIyLCBpbWcsIFNsaWRlKSB7XG4gICAgICBTbGlkZS5zdHlsZSgiYmFja2dyb3VuZCIsIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlcjIgPyAiY2VudGVyL2NvdmVyIG5vLXJlcGVhdCB1cmwoXFwiIiArIGltZy5zcmMgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIlxcIikiIDogIiIsIHRydWUpO1xuICAgICAgZGlzcGxheShpbWcsIGNvdmVyMiA/ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbm9uZSIgOiAiIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsXG4gICAgICBkZXN0cm95OiBhcHBseShjb3ZlciwgZmFsc2UpXG4gICAgfTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICB2YXIgQk9VTkNFX0RJRkZfVEhSRVNIT0xEID0gMTA7XG4gIHZhciBCT1VOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NFX0RVUkFUSU9OID0gNjAwO1xuICB2YXIgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIEJBU0VfVkVMT0NJVFkgPSAxLjU7XG4gIHZhciBNSU5fRFVSQVRJT04gPSA4MDA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIFNjcm9sbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlOCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UyKSxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U4Lm9uLFxuICAgICAgICBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21pdCA9IF9FdmVudEludGVyZmFjZTguZW1pdDtcblxuICAgIHZhciBzZXQgPSBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMi5zdGF0ZS5zZXQ7XG4gICAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgZ2V0UG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgICBnZXRMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltaXQgPSBNb3ZlLmdldExpbWl0LFxuICAgICAgICBleGNlZWRlZExpbWl0ID0gTW92ZS5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hjZWVkZWRMaW1pdCxcbiAgICAgICAgdHJhbnNsYXRlID0gTW92ZS50cmFuc2xhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHZhciBpc1NsaWRlID0gU3BsaWRlMi5pcyhTTElERSk7XG4gICAgdmFyIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcnZhbDtcbiAgICB2YXIgY2FsbGJhY2s7XG4gICAgdmFyIGZyaWN0aW9uID0gMTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIG9uKEVWRU5UX01PVkUsIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vhcik7XG4gICAgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSF0sIGNhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCBzbmFwLCBvblNjcm9sbGVkLCBub0NvbnN0cmFpbikge1xuICAgICAgdmFyIGZybycKICAgICAgICAgICAgICAgICAgICAgICAgYidtID0gZ2V0UG9zaXRpb24oKTtcbiAgICAgIGNsZWFyKCk7XG5cbiAgICAgIGlmIChzbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncCAmJiAoIWlzU2xpZGUgfHwgIWV4Y2VlZGVkTGltaXQoKSkpIHtcbiAgICAgICAgdmFyIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXplID0gQ29tcG9uZW50czIuTGF5b3V0LnNsaWRlclNpemUoKTtcbiAgICAgICAgdmFyIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmZzZXQgPSBzaWduKGRlc3RpbmF0aW9uKSAqIHNpemUgKiBmbG9vcihhYnMoZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKSAvIHNpemUpIHx8IDA7XG4gICAgICAgIGRlc3RpbmF0aW9uID0gTW92ZS50b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihDb21wb25lbnRzMi5Db250cm9sbGVyLnRvRGVzdChkZXN0aW5hdGlvbiAlIHNpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3plKSkgKyBvZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIHZhciBub0Rpc3RhbmNlID0gYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcHJveGltYXRlbHlFcXVhbChmcm9tLCBkZXN0aW5hdGlvbiwgMSk7XG4gICAgICBmcmljdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gPSAxO1xuICAgICAgZHVyYXRpb24gPSBub0Rpc3RhbmNlID8gMCA6IGR1cmF0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYid8fCBtYXgoYWJzKGRlc3RpbmF0aW9uIC0gZnJvbSkgLyBCQVNFX1ZFTE9DSVRZLCBNSU5fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RVUkFUSU9OKTtcbiAgICAgIGNhbGxiYWNrID0gb25TY3JvbGxlZDtcbiAgICAgIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiwgb25FbmQsIGFwcGx5KHVwZGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cmFpbiksIDEpO1xuICAgICAgc2V0KFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1JPTExJTkcpO1xuICAgICAgZW1pdChFVkVOVF9TQ1JPTEwpO1xuICAgICAgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25FbmQoKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0KElETEUpO1xuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0KEVWRU5UX1NDUk9MTEVEKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZyb20sIHRvLCBub0NvbnN0cmFpbiwgcmF0ZSkge1xuICAgICAgdmFyIHBvc2l0aW9uID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldFBvc2l0aW9uKCk7XG4gICAgICB2YXIgdGFyZ2V0ID0gZnJvbSArICh0byAtIGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSAqIGVhc2luZyhyYXRlKTtcbiAgICAgIHZhciBkaWZmID0gKHRhcmdldCAtIHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbikgKiBmcmljdGlvbjtcbiAgICAgIHRyYW5zbGF0ZShwb3NpdGlvbiArIGRpZmYpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKGlzU2xpZGUgJiYgIW5vQ29uc3RyYWluICYmIGV4Y2VlZGVkTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbWl0KCkpIHtcbiAgICAgICAgZnJpY3Rpb24gKj0gRlJJQ1RJT05fRkFDVE9SO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBpZiAoYWJzKGRpZmYpIDwgQk9VTkNFX0RJRkZfVEhSRVNIT0xEKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHNjcm9sbChnZXRMaW1pdChleGNlZWRlZExpbWl0KHRydWUpKSwgQk9VTkNFXycKICAgICAgICAgICAgICAgICAgICAgICAgYidEVVJBVElPTiwgZmFsc2UsIGNhbGxiYWNrLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIGlmIChpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J2YWwpIHtcbiAgICAgICAgaW50ZXJ2YWwuY2FuY2VsKCk7XG4gICAgICB9XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgIGlmIChpbnRlcnZhbCAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIWludGVydmFsLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgY2xlYXIoKTtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uRW5kKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZWFzaW5nKHQpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICB2YXIgZWFzaW5nRnVuYyA9IG9wdGlvbnMuZWFzaW5nRnVuYztcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gZWFzaW5nRnVuYyA/IGVhc2luZ0Z1bmModCkgOiAxIC0gTWF0aC5wb3coJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEgLSB0LCA0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCxcbiAgICAgIGRlc3Ryb3k6IGNsZWFyLFxuICAgICAgc2Nyb2xsOiBzY3JvbGwsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgY2FuY2VsOiBjYW5jZWxcbiAgICB9O1xuICB9XG5cbiAgdmFyIFNDUk9MTF9MSVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEVORVJfT1BUSU9OUyA9IHtcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICBjYXB0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogdHJ1ZVxuICB9O1xuXG4gIGZ1bmN0aW9uIERyYWcoU3BsaWRlMiwgQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEludGVyZmFjZTkgPSBFdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlOS5vbiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U5LmVtaXQsXG4gICAgICAgIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kID0gX0V2ZW50SW50ZXJmYWNlOS5iaW5kLFxuICAgICAgICB1bmJpbmQgPSBfRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW50ZXJmYWNlOS51bmJpbmQ7XG5cbiAgICB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmUsXG4gICAgICAgIFNjcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGwgPSBDb21wb25lbnRzMi5TY3JvbGwsXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIuQ29udHJvbGxlcixcbiAgICAgICAgdHJhY2sgPSBDb21wb25lbnRzMi5FbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMudHJhY2ssXG4gICAgICAgIHJlZHVjZSA9IENvbXBvbmVudHMyLk1lZGlhLnJlZHVjZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIF9Db21wb25lbnRzMiREaXJlY3RpbzIgPSBDb21wb25lbnRzMi5EaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLFxuICAgICAgICByZXNvbHZlID0gX0NvbXBvbmVudHMyJERpcmVjdGlvMi5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSxcbiAgICAgICAgb3JpZW50ID0gX0NvbXBvbmVudHMyJERpcmVjdGlvMi5vcmllbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuICAgIHZhciBnZXRQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24sXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBleGNlZWRlZExpbWl0ID0gTW92ZS5leGNlZWRlZExpbWl0O1xuICAgIHZhciBiYXNlUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uO1xuICAgIHZhciBiYXNlRXZlbnQ7XG4gICAgdmFyIHByZXZCYXNlRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuICAgIHZhciBpc0ZyZWU7XG4gICAgdmFyIGRyYWdnaW5nO1xuICAgIHZhciBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWQgPSBmYWxzZTtcbiAgICB2YXIgY2xpY2tQcmV2ZW50ZWQ7XG4gICAgdmFyIGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNhYmxlZDtcbiAgICB2YXIgdGFyZ2V0O1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgYmluZCh0cmFjaywgUE9JTlRFUl9NT1ZFX0VWRU5UUywgbm9vcCwgU0NST0xMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19MSVNURU5FUl9PUFRJT05TKTtcbiAgICAgIGJpbmQodHJhY2ssIFBPSU5URVJfVVBfRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UUywgbm9vcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgYmluZCh0cmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ssIFBPSU5URVJfRE9XTl9FVkVOVFMsIG9uUG9pbnRlckRvd24sIFNDUk9MTF9MSVNURU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVJfT1BUSU9OUyk7XG4gICAgICBiaW5kKHRyYWNrLCAiY2xpY2siLCBvbkNsaWNrLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBjYXB0dXJlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGJpbmQodHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrLCAiZHJhZ3N0YXJ0IiwgcHJldmVudCk7XG4gICAgICBvbihbRVZFTlRfTU9VTlRFRCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX1VQREFURURdLCBpbml0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICAgIHZhciBkcmFnID0gb3B0aW9ucy5kcmFnO1xuICAgICAgZGlzYWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoIWRyYWcpO1xuICAgICAgaXNGcmVlID0gZHJhZyA9PT0gImZyZWUiO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGUpIHtcbiAgICAgIGNsaWNrUHJldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgaXNUb3VjaCA9IGlzVG91Y2hFdmVudChlKTtcblxuICAgICAgICBpZiAoaXNEcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dhYmxlKGUudGFyZ2V0KSAmJiAoaXNUb3VjaCB8fCAhZS5idXR0b24pKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmICghQ29udHJvbGxlci5pc0J1c3koKSkge1xuICAgICAgICAgICAgdGFyZ2V0ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzVG91Y2ggPyB0cmFjayA6IHdpbmRvdztcbiAgICAgICAgICAgIGRyYWdnaW5nID0gc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlLmlzKFtNT1ZJTkcsIFNDUk9MTElOR10pO1xuICAgICAgICAgICAgcHJldkJhc2VFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgPSBudWxsO1xuICAgICAgICAgICAgYmluZCh0YXJnZXQsIFBPSU5URVJfTU9WRV9FVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRTLCBvblBvaW50ZXJNb3ZlLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgYmluZCh0YXJnZXQsIFBPSU5URVJfVVBfRVZFTlRTLCBvblBvaW50ZXJVcCwgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICAgICAgICAgIE1vdmUuY2FuY2VsJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgICAgICAgICAgU2Nyb2xsLmNhbmNlbCgpO1xuICAgICAgICAgICAgc2F2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByZXZlbnQoZSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBvblBvaW50ZXJNb3ZlKGUpIHtcbiAgICAgIGlmICghc3RhdGUuaXMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RSQUdHSU5HKSkge1xuICAgICAgICBzdGF0ZS5zZXQoRFJBR0dJTkcpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1pdChFVkVOVF9EUkFHKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGUuY2FuY2VsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGUpIHtcbiAgICAgICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICAgICAgTW92ZS50cicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbnNsYXRlKGJhc2VQb3NpdGlvbiArIGNvbnN0cmFpbihkaWZmQ29vcmQoZSkpKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgdmFyIGV4cGlyZWQgPSBkaWZmVGltZShlKSA+IExPR19JTlRFUlZBTDtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgdmFyIGhhc0V4Y2VlZGVkID0gZXhjZWVkZWQgIT09IChleGNlZWRlZCA9IGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlZWRlZExpbWl0KCkpO1xuXG4gICAgICAgICAgaWYgKGV4cGlyZWQgfHwgaGFzRXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkKSB7XG4gICAgICAgICAgICBzYXZlKGUpO1xuICAgICAgICAgIH1cblxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBjbGlja1ByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgICAgZW1pdChFVkVOVF9EUkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0dJTkcpO1xuICAgICAgICAgIHByZXZlbnQoZSk7XG4gICAgICAgIH0gZWxzZSBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGlzU2xpZGVyRGlyZWN0aW9uKGUpKSB7XG4gICAgICAgICAgZHJhZ2dpbmcgPSBzaG91bGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3RhcnQoZSk7XG4gICAgICAgICAgcHJldmVudChlKTtcbiAgICAgICAgfVxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJVcChlKSB7XG4gICAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHN0YXRlLmlzKERSQUdHSU5HKSkge1xuICAgICAgICBzdGF0ZS5zZXQoSURMRSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBlbWl0KEVWRU5UX0RSQUdHRUQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RyYWdnaW5nKSB7XG4gICAgICAgIG1vdmUoZSk7XG4gICAgICAgIHByZXZlbnQoZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgfVxuXG4gICAgICB1bmJpbmQodGFyZ2V0LCBQT0lOVEVSX01PVkVfRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUUywgb25Qb2ludGVyTW92ZSk7XG4gICAgICB1bmJpbmQodGFyZ2V0LCBQT0lOVEVSX1VQXycKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVFMsIG9uUG9pbnRlclVwKTtcbiAgICAgIGRyYWdnaW5nID0gZmFsc2U7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgICAgaWYgKCFkaXNhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgJiYgY2xpY2tQcmV2ZW50ZWQpIHtcbiAgICAgICAgcHJldmVudChlLCB0cnVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2F2ZShlKSB7XG4gICAgICBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldkJhc2VFdmVudCA9IGJhc2VFdmVudDtcbiAgICAgIGJhc2VFdmVudCA9IGU7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgYmFzZVBvc2l0aW9uID0gZ2V0UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gbW92ZShlKSB7XG4gICAgICB2YXIgdmVsb2NpdHkgPSBjb21wdXRlVmVsb2NpdHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpO1xuICAgICAgdmFyIGRlc3RpbmF0aW9uID0gY29tcHV0ZURlc3RpbmF0aW9uKHZlbG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2l0eSk7XG4gICAgICB2YXIgcmV3aW5kID0gb3B0aW9ucy5yZXdpbmQgJiYgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV3aW5kQnlEcmFnO1xuICAgICAgcmVkdWNlKGZhbHNlKTtcblxuICAgICAgaWYgKGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ZyZWUpIHtcbiAgICAgICAgQ29udHJvbGxlci5zY3JvbGwoZGVzdGluYXRpb24sIDAsIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLnNuYXApO1xuICAgICAgfSBlbHNlIGlmIChTcGxpZGUyLmlzKEZBREUpKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICBDb250cm9sbGVyLmdvKG9yaWVudChzaWduKHZlbG9jaXR5KSkgPCAwID8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJld2luZCA/ICI8IiA6ICItIiA6IHJld2luZCA/ICI+IiA6ICIrIik7XG4gICAgICB9IGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHNlIGlmIChTcGxpZGUyLmlzKFNMSURFKSAmJiBleGNlZWRlZCAmJiByZXdpbmQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIENvbnRyb2xsZXIuZ28oZXhjZWVkZWRMaW1pdCh0cnVlKSA/ICI+IiA6ICI8IicKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgQ29udHJvbGxlci5nbyhDb250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlci50b0Rlc3QoZGVzdGluYXRpb24pLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHVjZSh0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzaG91bGRTdGFydChlKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdmFyIHRocmVzaG9sZHMgPSBvcHRpb25zLmRyYWdNaW5UaHJlc2hvbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgdmFyIGlzT2JqID0gaXNPYmplY3QodGhyZXNob2xkcyk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIG1vdXNlID0gaXNPYmogJiYgdGhyZXNob2xkcy5tb3VzZSB8fCAwO1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB0b3VjaCA9IChpc09iaiA/IHRocmVzaG9sZHMudG91Y2ggOiArdGhyZXNob2xkcykgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IDEwO1xuICAgICAgcmV0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gKGlzVG91Y2hFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkgPyB0b3VjaCA6IG1vdXNlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJEaXJlY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gYWInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyhkaWZmQ29vcmQoZSwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlVmVsb2NpdHkoZSkge1xuICAgICAgaWYgKFNwbGlkZTIuaXMoTE9PUCkgfHwgIWV4Y2VlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZCkge1xuICAgICAgICB2YXIgdGltZSA9IGRpZmZUaW1lKGUpO1xuXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAodGltZSAmJiB0aW1lIDwgTE9HX0lOVEVSVkFMKSB7XG4gICAgICAgICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkaWZmQ29vcmQoZSkgLyB0aW1lO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRGVzdGluYXRpb24odicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbG9jaXR5KSB7XG4gICAgICByZXR1cm4gZ2V0UG9zaXRpb24oKSArIHNpZ24odmVsb2NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KSAqIG1pbihhYnModmVsb2NpdHkpICogKG9wdGlvbnMuZmxpY2tQb3dlciB8fCA2MDApJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgaXNGcmVlID8gSW5maW5pdHkgOiBDb21wb25lbnRzMi5MYXlvdXQubGlzdFNpemUoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiAob3B0aW9ucy5mbGlja01heFBhZ2VzIHx8IDEpKTtcbiAgICB9XG5cbiAgICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gZGlmZkNvb3JkKGUsIG9ydGhvZ29uYWwpIHtcbiAgICAgIHJldHVybiBjb29yZE9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlLCBvcnRob2dvbmFsKSAtIGNvb3JkT2YoZ2V0QmFzZUV2ZW50KGUpLCBvcnRob2dvbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZlRpbWUoZSkge1xuICAgICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiB0aW1lT2YoZSkgLSB0aW1lT2YoZ2V0QmFzZUV2ZW50KGUpKTtcbiAgICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZnVuY3Rpb24gZ2V0QmFzZUV2ZW50KGUpIHtcbiAgICAgIHJldHVybiBiYXNlRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBlICYmIHByZXZCYXNlRXZlbnQgfHwgYmFzZUV2ZW50O1xuICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBjb29yZE9mKGUsIG9ydGhvZ29uYWwpIHtcbiAgICAgIHJldHVybiAoaXNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291Y2hFdmVudChlKSA/IGUuY2hhbmdlZFRvdWNoZXNbMF0gOiBlKVsicGFnZSIgKyByZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2x2ZShvcnRob2dvbmFsID8gIlkiIDogIlgiKV07XG4gICAgfVxuXG4gICAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGNvbnN0cmFpbihkaWZmKSB7XG4gICAgICByZXR1cm4gZGlmZiAvIChleGNlZWRlZCAmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYgU3BsaWRlMi5pcyhTTElERSkgPyBGUklDVElPTiA6IDEpO1xuICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBpc0RyYWdnYWJsZSh0YXJnZXQyKSB7XG4gICAgICB2YXIgbm9EcmFnID0gbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMubm9EcmFnO1xuICAgICAgcmV0dXJuICFtYXRjaGVzKHRhcmdldDIsICIuIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19QQUdJTkFUSU9OX1BBR0UgKyAiLCAuIiArIENMQVNTX0FSUk9XKSAmJiAoIW5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RyYWcgfHwgIW1hdGNoZXModGFyZ2V0Miwgbm9EcmFnKSk7XG4gICAgfVxuXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGlzVG91Y2hFdmVudChlKSB7XG4gICAgICByZXR1cm4gdHlwZW9mIFRvdWNoRScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50ICE9PSAidW5kZWZpbmVkIiAmJiBlIGluc3RhbmNlb2YgVG91Y2hFdmVudDtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gaXNEcmFnZ2luZygpIHtcbiAgICAgIHJldHVybiBkcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dpbmc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlzYWJsZSh2YWx1ZSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGRpc2FibGVkID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudDogbW91bnQsXG4gICAgICBkaXNhYmxlOiBkaXNhYmxlLFxuICAgICAgaXNEcmFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dpbmc6IGlzRHJhZ2dpbmdcbiAgICB9O1xuICB9XG5cbiAgdmFyIE5PUk1BTElaQVRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX01BUCA9IHtcbiAgICBTcGFjZWJhcjogIiAiLFxuICAgIFJpZ2h0OiBBUlJPV19SSUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSFQsXG4gICAgTGVmdDogQVJST1dfTEVGVCxcbiAgICBVcDogQVJST1dfVVAsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Rvd246IEFSUk9XX0RPV05cbiAgfTtcblxuICBmdW5jdGlvbiBub3JtYWxpemVLZXkoaycKICAgICAgICAgICAgICAgICAgICAgICAgYidleSkge1xuICAgIGtleSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkua2V5O1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gTk9STUFMSVpBVElPTl9NQVBba2V5XSB8fCBrZXk7XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEtFWUJPQVJEX0VWRU5UID0gImtleWRvd24iO1xuXG4gIGZ1bmN0aW9uIEtleWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2FyZChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW50ZXJmYWNlMTAgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0V2ZW50SW50ZXJmYWNlMTAub24sXG4gICAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMTAuYmluZCxcbiAgICAgICAgdW5iaW5kID0gX0V2ZW50SW50ZXJmYWNlMTAudW5iaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZDtcblxuICAgIHZhciByb290ID0gU3BsaWRlMi5yb290O1xuICAgIHZhciByZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICAgIHZhciB0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuICAgIHZhciBkaXNhYmxlZDtcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGluaXQoKTtcbiAgICAgIG9uKEVWRU5UX1VQREFURUQsIGRlc3Ryb3kpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9uKEVWRU5UX1VQREFURUQsIGluaXQpO1xuICAgICAgb24oRVZFTlRfTU9WRSwgb25NJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInYm9hcmQgPSBvcHRpb25zLmtleWJvYXJkO1xuXG4gICAgICBpZiAoa2V5Ym9hcmQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHRhcmdldCA9IGtleWJvYXJkID09PSAiZ2xvYmFsIiA/IHdpbmRvdyA6IHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb290O1xuICAgICAgICBiaW5kKHRhcmdldCwgS0VZQk9BUkRfRVZFTlQsIG9uS2V5ZG93biknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5iaW5kKHRhcmdldCwgS0VZQk9BUkRfRVZFTlQpO1xuICAgIH1cblxuICAgIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBkaXNhYmxlKHZhbHVlKSB7XG4gICAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdmUoKSB7XG4gICAgICB2YXIgX2Rpc2FibGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGRpc2FibGVkO1xuICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgbmV4dFRpYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGlzYWJsZWQgPSBfZGlzYWJsZWQ7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25LZXlkb3duKGUpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXkoZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfTEVGVCkpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgU3BsaWRlMi5nbygiPCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlc29sdmUoQVJST1dfUklHSFQpKSB7XG4gICAgICAgICAgU3BsaWRlMi5nbygiPiIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICAgIGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NhYmxlOiBkaXNhYmxlXG4gICAgfTtcbiAgfVxuXG4gIHZhciBTUkNfREFUQV9BVFRSSUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVRFID0gREFUQV9BVFRSSUJVVEUgKyAiLWxhenkiO1xuICB2YXIgU1JDU0VUX0RBVEFfQVQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVFJJQlVURSA9IFNSQ19EQVRBX0FUVFJJQlVURSArICItc3Jjc2V0IjtcbiAgdmFyIElNQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRV9TRUxFQ1RPUiA9ICJbIiArIFNSQ19EQVRBX0FUVFJJQlVURSArICJdLCBbIiArIFNSQycKICAgICAgICAgICAgICAgICAgICAgICAgYidTRVRfREFUQV9BVFRSSUJVVEUgKyAiXSI7XG5cbiAgZnVuY3Rpb24gTGF6eUxvYWQoUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UxMSA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9IF9FdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJbnRlcmZhY2UxMS5vbixcbiAgICAgICAgb2ZmID0gX0V2ZW50SW50ZXJmYWNlMTEub2ZmLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTExLmJpbmQsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMTEuZW1pdDtcblxuICAgIHZhciBpc1NlcXVlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0aWFsID0gb3B0aW9ucy5sYXp5TG9hZCA9PT0gInNlcXVlbnRpYWwiO1xuICAgIHZhciBldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzID0gW0VWRU5UX01PVkVELCBFVkVOVF9TQ1JPTExFRF07XG4gICAgdmFyIGVudHJpZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzID0gW107XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGlmIChvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5sYXp5TG9hZCkge1xuICAgICAgICBpbml0KCk7XG4gICAgICAgIG9uKEVWRU5UX1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUZSRVNILCBpbml0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIGVtcHR5KGVudHJpZXMpO1xuICAgICAgcmVnaXN0ZXIoKTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmIChpc1NlcXVlbnRpYWwpIHtcbiAgICAgICAgbG9hZE5leHQoKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9IGVsc2Uge1xuICAgICAgICBvZmYoZXZlbnRzKTtcbiAgICAgICAgb24oZXZlbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgY2hlY2spO1xuICAgICAgICBjaGVjaygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZWdpc3RlcigpIHtcbiAgICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFYWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbiAoU2xpZGUpIHtcbiAgICAgICAgcXVlcnlBbGwoU2xpZGUuc2xpZGUsIElNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHRV9TRUxFQ1RPUikuZm9yRWFjaChmdW5jdGlvbiAoaW1nKSB7XG4gICAgICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzcmMgPSBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgc3Jjc2V0ID0gZ2V0QXR0cmlidXRlKGltZywgU1JDU0VUX0RBVEFfQVRUUkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQlVURSk7XG5cbiAgICAgICAgICBpZiAoc3JjICE9PSBpbWcuc3JjIHx8IHNyY3NldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09IGltZy5zcmNzZXQpIHtcbiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5jbGFzc2VzLnNwaW5uZXI7XG4gICAgICAgICAgICB2YXIgcGFyZW50ID0gaW1nLnBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRFbGVtZW50O1xuICAgICAgICAgICAgdmFyIHNwaW5uZXIgPSBjaGlsZChwYXJlbnQsICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLiIgKyBjbGFzc05hbWUpIHx8IGNyZWF0ZSgic3BhbiIsIGNsYXNzTmFtZSwgcGFyZW50KScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goW2ltZywgU2xpZGUsIHNwaW5uZXJdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICAgICAgICBpbWcuc3JjIHx8IGRpc3BsYXkoaW1nLCAibm9uZSIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGNoZWNrKCkge1xuICAgICAgZW50cmllcyA9IGVudHJpZXMuZmlsdGVyKGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiAoZGF0YSkge1xuICAgICAgICB2YXIgZGlzdGFuY2UgPSBvcHRpb25zLnBlclBhZ2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogKChvcHRpb25zLnByZWxvYWRQYWdlcyB8fCAxKSArIDEpIC0gMTtcbiAgICAgICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBkYXRhWzFdLmlzV2l0aGluKFNwbGlkZTIuaW5kZXgsIGRpc3RhbmNlKSA/IGxvYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGRhdGEpIDogdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgZW50cmllcy5sZW5ndGggfHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9mZihldmVudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWQoZGF0YSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHZhciBpbWcgPSBkYXRhWzBdO1xuICAgICAgYWRkQ2xhc3MoZGF0YVsxXS5zbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX0xPQURJTkcpO1xuICAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgYXBwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KG9uTG9hZCwgZGF0YSkpO1xuICAgICAgc2V0QXR0cmlidXRlKGltZywgInNyYyIsIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpKTtcbiAgICAgIHNldEF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGUoaW1nLCAic3Jjc2V0IiwgZ2V0QXR0cmlidXRlKGltZywgU1JDU0VUX0RBVEFfQVRUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQlVURSkpO1xuICAgICAgcmVtb3ZlQXR0cmlidXRlKGltZywgU1JDX0RBVEFfQVRUUklCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VURSk7XG4gICAgICByZW1vdmVBdHRyaWJ1dGUoaW1nLCBTUkNTRVRfREFUQV9BVFRSSUJVJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RFKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkxvYWQoZGF0YSwgZSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbWcgPSBkYXRhWzBdLFxuICAgICAgICAgIFNsaWRlID0gZGF0YVsxXTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZW1vdmVDbGFzcyhTbGlkZS5zbGlkZSwgQ0xBU1NfTE9BRElORyk7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoZS50eXBlICE9PSAiZXJyb3IiKSB7XG4gICAgICAgIHJlbW92ZShkYXRhWzInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSk7XG4gICAgICAgIGRpc3BsYXkoaW1nLCAiIik7XG4gICAgICAgIGVtaXQoRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0xBWllMT0FEX0xPQURFRCwgaW1nLCBTbGlkZSk7XG4gICAgICAgIGVtaXQoRVZFTlRfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0laRSk7XG4gICAgICB9XG5cbiAgICAgIGlzU2VxdWVudGlhbCAmJiBsb2FkTmV4dCgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTmV4dCgpIHtcbiAgICAgIGVudHJpZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmxlbmd0aCAmJiBsb2FkKGVudHJpZXMuc2hpZnQoKSk7XG4gICAgfVxuXG4gICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBhcHBseShlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wdHksIGVudHJpZXMpLFxuICAgICAgY2hlY2s6IGNoZWNrXG4gICAgfTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBQYWdpbmF0aW9uKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgb24gPSBldmVudC5vbixcbiAgICAgICAgZW1pdCA9IGV2ZW50LmVtaXQsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBiaW5kID0gZXZlbnQuYmluZDtcbiAgICB2YXIgU2xpZGVzID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlNsaWRlcyxcbiAgICAgICAgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgaGFzRm9jdXMgPSBDb250cm9sbGVyLmhhc0ZvY3VzLFxuICAgICAgICBnZXRJbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggPSBDb250cm9sbGVyLmdldEluZGV4LFxuICAgICAgICBnbyA9IENvbnRyb2xsZXIuZycKICAgICAgICAgICAgICAgICAgICAgICAgYidvO1xuICAgIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlO1xuICAgIHZhciBwbGFjZWhvbGRlciA9IEVsZW1lbnRzLnBhZ2luYXRpb247XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBpdGVtcyA9IFtdO1xuICAgIHZhciBsaXN0O1xuICAgIHZhciBwYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbkNsYXNzZXM7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgYid5KCk7XG4gICAgICBvbihbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRScKICAgICAgICAgICAgICAgICAgICAgICAgYidORF9JTkRFWF9DSEFOR0VEXSwgbW91bnQpO1xuICAgICAgdmFyIGVuYWJsZWQgPSBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy5wYWdpbmF0aW9uO1xuICAgICAgcGxhY2Vob2xkZXIgJiYgZGlzcGxheShwbGFjZWhvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXIsIGVuYWJsZWQgPyAiIiA6ICJub25lIik7XG5cbiAgICAgIGlmIChlbmFibGVkKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBvbihbRVZFTlRfTU9WRSwgRVZFTlRfU0NST0xMLCBFVkVOVF9TQ1JPTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMRURdLCB1cGRhdGUpO1xuICAgICAgICBjcmVhdGVQYWdpbmF0aW9uKCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB1cGRhdGUoKTtcbiAgICAgICAgZW1pdChFVkVOVF9QQUdJTkFUSU9OX01PVU5URUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgICBpdGVtczogaXRlbXNcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIH0sIGdldEF0KFNwbGlkZTIuaW5kZXgpKTtcbiAgICAgIH1cbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIGlmIChsaXN0KSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZW1vdmUocGxhY2Vob2xkZXIgPyBzbGljZShsaXN0LmNoaWxkcmVuKSA6IGxpc3QpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgcmVtb3ZlQ2xhc3MobGlzdCwgcGFnaW5hdGlvbkNsYXNzZXMpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgZW1wdHkoaXRlbXMpO1xuICAgICAgICBsaXN0ID0gbnVsbDtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYXRlUGFnaW5hdGlvbigpIHtcbiAgICAgIHZhciBsZW5ndGggPSBTcGxpZGUyLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2g7XG4gICAgICB2YXIgY2xhc3NlcyA9IG9wdGlvbnMuY2xhc3NlcyxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaTE4biA9IG9wdGlvbnMuaTE4bixcbiAgICAgICAgICBwZXJQYWdlID0gb3B0aW9ucy5wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyUGFnZTtcbiAgICAgIHZhciBtYXggPSBoYXNGb2N1cygpID8gQ29udHJvbGxlci5nZXRFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kKCkgKyAxIDogY2VpbChsZW5ndGggLyBwZXJQYWdlKTtcbiAgICAgIGxpc3QgPSBwbGFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vob2xkZXIgfHwgY3JlYXRlKCJ1bCIsIGNsYXNzZXMucGFnaW5hdGlvbiwgRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRyYWNrLnBhcmVudEVsZW1lbnQpO1xuICAgICAgYWRkQ2xhc3MobGlzdCwgcGFnaW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25DbGFzc2VzID0gQ0xBU1NfUEFHSU5BVElPTiArICItLSIgKyBnZXREaXJlY3Rpb24oKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgc2V0QXR0cmlidXRlKGxpc3QsIFJPTEUsICJ0YWJsaXN0Iik7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgc2V0QXR0cmlidXRlKGxpc3QsIEFSSUFfTEFCRUwsIGkxOG4uc2VsZWN0KTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXRBdHRyaWJ1dGUobGlzdCwgQVJJQV9PUklFTlRBVElPTiwgZ2V0RGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuXG4gICAgICBmb3IgKHZhciBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IDA7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICB2YXIgbGkgPSBjcmVhdGUoImxpIiwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bGwsIGxpc3QpO1xuICAgICAgICB2YXIgYnV0dG9uID0gY3JlYXRlKCJidXR0b24iLCB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICAgIGNsYXNzOiBjbGFzc2VzLnBhZ2UsXG4gICAgICAgICAgdHlwZTogJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJidXR0b24iXG4gICAgICAgIH0sIGxpKTtcbiAgICAgICAgdmFyIGNvbnRyb2xzID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlcy5nZXRJbihpKS5tYXAoZnVuY3Rpb24gKFNsaWRlKSB7XG4gICAgICAgICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBTbGlkZS5zbGlkZS5pZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB0ZXh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICFoYXNGb2N1cygpICYmIHBlclBhZ2UgPiAxID8gaTE4bi5wYWdlWCA6IGkxOG4uc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlWDtcbiAgICAgICAgYmluZChidXR0b24sICJjbGljayIsIGFwcGx5KG9uQ2xpY2ssIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbktleWJvYXJkKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgIGJpbmQoYnV0dG9uLCAia2V5ZG93biIsIGFwcGx5KG9uS2V5ZG93biwgaSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldEF0dHJpYnV0ZShsaSwgUk9MRSwgInByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzZW50YXRpb24iKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvbiwgUk9MRSwgInRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2IiKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvbiwgQVJJQV9DT05UUk9MUywgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb2xzLmpvaW4oIiAiKSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBQkVMLCBmb3JtYXQodGV4dCwgaSArIDEpKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKGJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R0b24sIFRBQl9JTkRFWCwgLTEpO1xuICAgICAgICBpdGVtcy5wdXNoKHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgbGk6IGxpLFxuICAgICAgICAgIGJ1dHRvbjogYnV0dG9uLFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwYWdlOiBpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbkNsaWNrKHBhZ2UpIHtcbiAgICAgIGdvKCI+IiArIHBhZ2UsIHRydWUpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvbktleWRvd24ocGFnZSwgZSkge1xuICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW5ndGggPSBpdGVtcy5sZW5ndGg7XG4gICAgICB2YXIga2V5ID0gbm9ybWFsaXplS2V5KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICAgIHZhciBkaXIgPSBnZXREaXJlY3Rpb24oKTtcbiAgICAgIHZhciBuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dFBhZ2UgPSAtMTtcblxuICAgICAgaWYgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19SSScKICAgICAgICAgICAgICAgICAgICAgICAgYidHSFQsIGZhbHNlLCBkaXIpKSB7XG4gICAgICAgIG5leHRQYWdlID0gKytwYWdlICUgbGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX0xFRlQsIGZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSwgZGlyKSkge1xuICAgICAgICBuZXh0UGFnZSA9ICgtLXBhZ2UgKyBsZW5ndGgpICUgbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmd0aDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAiSG9tZSIpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG5leHRQYWdlID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAiRW5kIikgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgbmV4dFBhZ2UgPSBsZW5ndGggLSAxO1xuICAgICAgfVxuXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGl0ZW0gPSBpdGVtc1tuZXh0UGFnZV07XG5cbiAgICAgIGlmIChpdGVtKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBmb2N1cyhpdGVtLmJ1dHRvbik7XG4gICAgICAgIGdvKCI+IiArIG5leHRQYWdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGdldERpcmVjdGlvbigpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnBhZ2luJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uRGlyZWN0aW9uIHx8IG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBnZXRBdChpbmRleCkge1xuICAgICAgcmV0dXJuIGl0ZW1zW0NvbnRyb2xsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyLnRvUGFnZShpbmRleCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB2YXIgcHJldiA9IGdldEF0KGdldEluZGV4KHRydWUpKTtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgY3VyciA9IGdldEF0KGdldEluZGV4KCkpO1xuXG4gICAgICBpZiAocHJldikge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgdmFyIGJ1dHRvbiA9IHByZXYuYnV0dG9uO1xuICAgICAgICByZW1vdmVDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoYnV0dG9uLCBDTEFTU19BQ1RJVkUpO1xuICAgICAgICByZW1vdmVBdHRyaWJ1dGUoYnV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvbiwgQVJJQV9TRUxFQ1RFRCk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JfSU5ERVgsIC0xKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN1cnIpIHtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBfYnV0dG9uID0gY3Vyci5idXR0b247XG4gICAgICAgIGFkZENsYXNzKF9idXR0b24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBDTEFTU19BQ1RJVkUpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0VMRUNURUQsIHRydWUpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgVEFCX0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTkRFWCwgIiIpO1xuICAgICAgfVxuXG4gICAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VQREFURUQsIHtcbiAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgaXRlbXM6IGl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vtc1xuICAgICAgfSwgcHJldiwgY3Vycik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpdGVtczogaXRlbXMsXG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JveTogZGVzdHJveSxcbiAgICAgIGdldEF0OiBnZXRBdCxcbiAgICAgIHVwZGF0ZTogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VwZGF0ZVxuICAgIH07XG4gIH1cblxuICB2YXIgVFJJR0dFUl9LRVlTID0gWyIgIiwgIkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlciJdO1xuXG4gIGZ1bmN0aW9uIFN5bmMoU3BsaWRlMiwgQ29tcG9uZW50czIsIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zKSB7XG4gICAgdmFyIGlzTmF2aWdhdGlvbiA9IG9wdGlvbnMuaXNOYXZpZ2F0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbixcbiAgICAgICAgc2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpZGVGb2N1cztcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGV2ZW50cyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlMi5zcGxpZGVzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKCF0YXJnZXQuaXNQYXJlbnQpIHtcbiAgICAgICAgICBzeW5jKFNwbGlkZTIsIHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Quc3BsaWRlKTtcbiAgICAgICAgICBzeW5jKHRhcmdldC5zcGxpZGUsIFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChpc05hdmlnYXRpb24pICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIG5hdmlnYXRlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGRlc3Ryb3koKSB7XG4gICAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICAgIH0pO1xuICAgICAgZW1wdHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGV2ZW50cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3VudCgpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95KCk7XG4gICAgICBtb3VudCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jKHNwbGlkZSwgdGFyZ2V0KSB7XG4gICAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Uoc3BsaWRlKTtcbiAgICAgIGV2ZW50Lm9uKEVWRU5UX01PVkUsIGZ1bmN0aW9uIChpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gsIHByZXYsIGRlc3QpIHtcbiAgICAgICAgdGFyZ2V0LmdvKHRhcmdldC5pcyhMT09QKSA/JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0IDogaW5kZXgpO1xuICAgICAgfSk7XG4gICAgICBldmVudHMucHVzaChldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5hdmlnYXRlKCkge1xuICAgICAgdmFyIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICAgICAgdmFyIG9uID0gZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm9uO1xuICAgICAgb24oRVZFTlRfQ0xJQ0ssIG9uQ2xpY2spO1xuICAgICAgb24oRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1NMSURFX0tFWURPV04sIG9uS2V5ZG93bik7XG4gICAgICBvbihbRVZFTlRfTU9VTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIEVWRU5UX1VQREFURURdLCB1cGRhdGUpO1xuICAgICAgZXZlbnRzLnB1c2goZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIGV2ZW50LmVtaXQoRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVELCBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMi5zcGxpZGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0QXR0cmlidXRlKENvbXBvbmVudHMyLkVsZW1lbnRzLmxpc3QsIEFSSUFfT1JJRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FUSU9OLCBvcHRpb25zLmRpcmVjdGlvbiA9PT0gVFRCID8gInZlcnRpY2FsIiA6ICIiKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbGljayhTbGlkZSkge1xuICAgICAgU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIuZ28oU2xpZGUuaW5kZXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uS2V5ZG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd24oU2xpZGUsIGUpIHtcbiAgICAgIGlmIChpbmNsdWRlcyhUUklHR0VSX0tFWVMsIG5vcm0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxpemVLZXkoZSkpKSB7XG4gICAgICAgIG9uQ2xpY2soU2xpZGUpO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldmVudChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVwOiBhcHBseShDb21wb25lbnRzMi5NZWRpYS5zZXQsIHtcbiAgICAgICAgc2xpZGVGb2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXM6IGlzVW5kZWZpbmVkKHNsaWRlRm9jdXMpID8gaXNOYXZpZ2F0aW9uIDogc2xpZGVGbycKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXNcbiAgICAgIH0sIHRydWUpLFxuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3k6IGRlc3Ryb3ksXG4gICAgICByZW1vdW50OiByZW1vdW50XG4gICAgfTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBXaGVlbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlMTIgPSBFdmVudEludGVyZmFjZShTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMiksXG4gICAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMi5iaW5kO1xuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBsYXN0VGltZSA9IDA7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAob3B0aW9ucy53aGVlbCkge1xuICAgICAgICBiaW5kKENvbXBvbmVudHMyLkVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy50cmFjaywgIndoZWVsIiwgb25XaGVlbCwgU0NST0xMX0xJU1RFTkVSX09QVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYidTKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbldoZWVsKGUpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAoZS5jYW5jZWxhYmxlKSB7XG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmRlbHRhWScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgIHZhciBiYWNrd2FyZHMgPSBkZWx0YVkgPCAwO1xuICAgICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHRpbWVTdGFtcCA9IHRpbWVPZihlKTtcblxuICAgICAgICB2YXIgX21pbiA9IG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLndoZWVsTWluVGhyZXNob2xkIHx8IDA7XG5cbiAgICAgICAgdmFyIHNsZWVwICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IG9wdGlvbnMud2hlZWxTbGVlcCB8fCAwO1xuXG4gICAgICAgIGlmIChhYnMoZGVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhWSkgPiBfbWluICYmIHRpbWVTdGFtcCAtIGxhc3RUaW1lID4gc2xlZXApIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgU3BsaWRlMi5nbyhiYWNrd2FyZHMgPyAiPCIgOiAiPiIpO1xuICAgICAgICAgIGxhcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0VGltZSA9IHRpbWVTdGFtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNob3VsZFByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50KGJhY2t3YXJkcykgJiYgcHJldmVudChlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gc2hvdWxkUHJldmVudChiYWNrd2FyZHMpIHtcbiAgICAgIHJldHVybiAhbycKICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMucmVsZWFzZVdoZWVsIHx8IFNwbGlkZTIuc3RhdGUuaXMoTU9WSU5HKSB8fCBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czIuQ29udHJvbGxlci5nZXRBZGphY2VudChiYWNrd2FyZHMpICE9PSAtMTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuICB9XG5cbiAgdmFyIFNSX1JFTU9WQUxfREVMQVkgPSA5MDtcblxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgTGl2ZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlMTMgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgX0V2ZW50SW50ZXJmYWNlMTMub247XG5cbiAgICB2YXIgdHJhY2sgPSBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0czIuRWxlbWVudHMudHJhY2s7XG4gICAgdmFyIGVuYWJsZWQgPSBvcHRpb25zLmxpdmUgJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmICFvcHRpb25zLmlzTmF2aWdhdGlvbjtcbiAgICB2YXIgc3IgPSBjcmVhdGUoInNwYW4iLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfU1IpO1xuICAgIHZhciBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChTUl9SRScKICAgICAgICAgICAgICAgICAgICAgICAgYidNT1ZBTF9ERUxBWSwgYXBwbHkodG9nZ2xlLCBmYWxzZSkpO1xuXG4gICAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIG1vdW50KCkge1xuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgZGlzYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIUNvbXBvbmVudHMyLkF1dG9wbGF5LmlzUGF1c2VkKCkpO1xuICAgICAgICBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHRyYWNrLCBBUklBX0FUT01JQywgdHJ1ZSk7XG4gICAgICAgIHNyLnRleHRDb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9ICJcXHUyMDI2IjtcbiAgICAgICAgb24oRVZFTlRfQVVUT1BMQVlfUExBWSwgYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5KGRpc2FibGUsIHRydWUpKTtcbiAgICAgICAgb24oRVZFTlRfQVVUT1BMQVlfUEFVUycKICAgICAgICAgICAgICAgICAgICAgICAgYidFLCBhcHBseShkaXNhYmxlLCBmYWxzZSkpO1xuICAgICAgICBvbihbRVZFTlRfTU9WRUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9TQ1JPTExFRF0sIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpO1xuICAgICAgfVxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICBmdW5jdGlvbiB0b2dnbGUoYWN0aXZlKSB7XG4gICAgICBzZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmlidXRlKHRyYWNrLCBBUklBX0JVU1ksIGFjdGl2ZSk7XG5cbiAgICAgIGlmIChhY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlKSB7XG4gICAgICAgIGFwcGVuZCh0cmFjaywgc3IpO1xuICAgICAgICBpbnRlcnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWwuc3RhcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbW92ZShzcik7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBpbnRlcnZhbC5jYW5jZWwoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIHJlbW92ZUF0dHJpYnV0ZSh0cmFjaywgW0FSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0xJVkUsIEFSSUFfQVRPTUlDLCBBUklBX0JVU1ldKTtcbiAgICAgIHJlbW92ZShzcicKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc2FibGUoZGlzYWJsZWQpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoZW5hYmxlZCkge1xuICAgICAgICBzZXRBdHRyaWJ1dGUodHJhY2ssIEFSSUFfTElWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsIGRpc2FibGVkID8gIm9mZiIgOiAicG9saXRlIik7XG4gICAgICB9XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkaXNhYmxlOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzYWJsZSxcbiAgICAgIGRlc3Ryb3k6IGRlc3Ryb3lcbiAgICB9O1xuICB9XG5cbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBDb21wb25lbnRDb25zdHJ1Y3RvcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBNZWRpYTogTWVkaWEsXG4gICAgRGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbjogRGlyZWN0aW9uLFxuICAgIEVsZW1lbnRzOiBFbGVtZW50cyxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGVzOiBTbGlkZXMsXG4gICAgTGF5b3V0OiBMYXlvdXQsXG4gICAgQ2xvbmVzOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xvbmVzLFxuICAgIE1vdmU6IE1vdmUsXG4gICAgQ29udHJvbGxlcjogQ29udHJvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsXG4gICAgQXJyb3dzOiBBcnJvd3MsXG4gICAgQXV0b3BsYXk6IEF1dG9wbGF5LFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBDb3ZlcjogQ292ZXIsXG4gICAgU2Nyb2xsOiBTY3JvbGwsXG4gICAgRHJhZzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RyYWcsXG4gICAgS2V5Ym9hcmQ6IEtleWJvYXJkLFxuICAgIExhenlMb2FkOiBMYXp5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xvYWQsXG4gICAgUGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgICBTeW5jOiBTeW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBXaGVlbDogV2hlZWwsXG4gICAgTGl2ZTogTGl2ZVxuICB9KTtcbiAgdmFyIEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInMThOID0ge1xuICAgIHByZXY6ICJQcmV2aW91cyBzbGlkZSIsXG4gICAgbmV4dDogIk4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0IHNsaWRlIixcbiAgICBmaXJzdDogIkdvIHRvIGZpcnN0IHNsaWRlIixcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzdDogIkdvIHRvIGxhc3Qgc2xpZGUiLFxuICAgIHNsaWRlWDogIkdvIHRvIHNsaWRlICUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsXG4gICAgcGFnZVg6ICJHbyB0byBwYWdlICVzIixcbiAgICBwbGF5OiAiU3RhcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGF1dG9wbGF5IixcbiAgICBwYXVzZTogIlBhdXNlIGF1dG9wbGF5IixcbiAgICBjYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VzZWw6ICJjYXJvdXNlbCIsXG4gICAgc2xpZGU6ICJzbGlkZSIsXG4gICAgc2VsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDogIlNlbGVjdCBhIHNsaWRlIHRvIHNob3ciLFxuICAgIHNsaWRlTGFiZWw6ICIlcyBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJXMiXG4gIH07XG4gIHZhciBERUZBVUxUUyA9IHtcbiAgICB0eXBlOiAic2xpZGUiLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByb2xlOiAicmVnaW9uIixcbiAgICBzcGVlZDogNDAwLFxuICAgIHBlclBhZ2U6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicxLFxuICAgIGNsb25lU3RhdHVzOiB0cnVlLFxuICAgIGFycm93czogdHJ1ZSxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnaW5hdGlvbjogdHJ1ZSxcbiAgICBwYWdpbmF0aW9uS2V5Ym9hcmQ6IHRydWUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGludGVydmFsOiA1ZTMsXG4gICAgcGF1c2VPbkhvdmVyOiB0cnVlLFxuICAgIHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXVzZU9uRm9jdXM6IHRydWUsXG4gICAgcmVzZXRQcm9ncmVzczogdHJ1ZSxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFzaW5nOiAiY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAuNSwgMSkiLFxuICAgIGRyYWc6IHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlLFxuICAgIGRpcmVjdGlvbjogImx0ciIsXG4gICAgdHJpbVNwYWNlOiB0cnVlLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmb2N1c2FibGVOb2RlczogImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGlucHV0LCBzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LCBpZnJhbWUiLFxuICAgIGxpdmU6IHRydWUsXG4gICAgY2xhc3NlczogQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVMsXG4gICAgaTE4bjogSTE4TixcbiAgICByZWR1Y2VkTW90aW9uOiB7XG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlZWQ6IDAsXG4gICAgICByZXdpbmRTcGVlZDogMCxcbiAgICAgIGF1dG9wbGF5OiAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdXNlIlxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBGYWRlKFNwbGlkZTIsIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBFdmVudEludGVyZmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoU3BsaWRlMikub24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1JFRlJFU0hdLCBpbml0KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIFNsaWRlcy5mb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaChmdW5jdGlvbiAoU2xpZGUpIHtcbiAgICAgICAgU2xpZGUuc3R5bGUoInRyYW5zZm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCAidHJhbnNsYXRlWCgtIiArIDEwMCAqIFNsaWRlLmluZGV4ICsgIiUpIik7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnQoaW5kZXgsIGRvbmUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBTbGlkZXMuc3R5bGUoInRyYW5zaXRpb24iLCAib3BhY2l0eSAiICsgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3BlZWQgKyAibXMgIiArIG9wdGlvbnMuZWFzaW5nKTtcbiAgICAgIG5leHRUaWNrKGRvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0YXJ0OiBzdGFydCxcbiAgICAgIGNhbmNlbDogbm9vcFxuICAgIH07XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gU2xpZGUoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlLFxuICAgICAgICBDb250cm9sbGVyID0gQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLkNvbnRyb2xsZXIsXG4gICAgICAgIFNjcm9sbCA9IENvbXBvbmVudHMyLlMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3JvbGw7XG4gICAgdmFyIGxpc3QgPSBDb21wb25lbnRzMi5FbGVtZW50cy5saXN0OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgdHJhbnNpdGlvbiA9IGFwcGx5KHN0eWxlLCBsaXN0LCAidHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbiAgICB2YXIgZW5kQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBFdmVudEludGVyZmFjZShTcGxpZGUyKS5iaW5kKGxpc3QsICJ0cmFuc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVuZCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGlmIChlLnRhcmdldCA9PT0gbGlzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgZW5kQ2FsbGJhY2spIHtcbiAgICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kQ2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHN0YXJ0KGluZGV4LCBkb25lKSB7XG4gICAgICB2YXIgZGVzdGluYXRpb24gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZS50b1Bvc2l0aW9uKGluZGV4LCB0cnVlKTtcbiAgICAgIHZhciBwb3NpdGlvbiA9IE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlLmdldFBvc2l0aW9uKCk7XG4gICAgICB2YXIgc3BlZWQgPSBnZXRTcGVlZChpbmRleCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgICBpZiAoYWJzKGRlc3RpbmF0aW9uIC0gcG9zaXRpb24pID49IDEgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNwZWVkID49IDEpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlU2Nyb2xsKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIFNjcm9sbC5zY3JvbGwoZGVzdGluYXRpb24sIHNwZWVkLCBmYWxzZSwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyYW5zaXRpb24oInRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduc2Zvcm0gIiArIHNwZWVkICsgIm1zICIgKyBvcHRpb25zLmVhc2luZyk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIE1vdmUudHJhbnNsYXRlKGRlc3RpbmF0aW9uLCB0cnVlKTtcbiAgICAgICAgICBlbmRDYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2sgPSBkb25lO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZS5qdW1wKGluZGV4KTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgICB0cmFuc2l0aW9uKCIiKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBTY3JvbGwuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3BlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKGluZGV4KSB7XG4gICAgICB2YXIgcmV3aW5kU3BlZWQgPSBvcHRpb25zLnJld2luZFNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZDtcblxuICAgICAgaWYgKFNwbGlkZTIuaXMoU0xJREUpICYmIHJld2luZFNwZWVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICB2YXIgcHJldiA9IENvbnRyb2xsZXIuZ2V0SW5kZXgodHJ1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB2YXIgZW5kID0gQ29udHJvbGxlci5nZXRFbmQoKTtcblxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKHByZXYgPT09IDAgJiYgaW5kZXggPj0gZW5kIHx8IHByZXYgPj0gZW5kICYmIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiByZXdpbmRTcGVlZDtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnMuc3BlZWQ7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBzdGFydDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXJ0LFxuICAgICAgY2FuY2VsOiBjYW5jZWxcbiAgICB9O1xuICB9XG5cbiAgdmFyIF9TJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBfU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZXZlbnQgPSBFdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UoKTtcbiAgICAgIHRoaXMuQ29tcG9uZW50cyA9IHt9O1xuICAgICAgdGhpcy5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUgPSBTdGF0ZShDUkVBVEVEKTtcbiAgICAgIHRoaXMuc3BsaWRlcyA9IFtdO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHRoaXMuX28gPSB7fTtcbiAgICAgIHRoaXMuX0UgPSB7fTtcbiAgICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igcm9vdCA9IGlzU3RyaW5nKHRhcmdldCkgPyBxdWVyeShkb2N1bWVudCwgdGFyZ2V0KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiB0YXJnZXQ7XG4gICAgICBhc3NlcnQocm9vdCwgcm9vdCArICIgaXMgaW52YWxpZC4iKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB0aGlzLnJvb3QgPSByb290O1xuICAgICAgb3B0aW9ucyA9IG1lcmdlKHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGxhYmVsOiBnZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTCkgfHwgIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBsYWJlbGxlZGJ5OiBnZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRURCWSkgfHwgIiJcbiAgICAgIH0sIERFRkFVTFRTLCBfU3BsaWRlLmRlZmF1bHRzLCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyB8fCB7fSk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG1lcmdlKG9wdGlvbnMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBKU09OLnBhcnNlKGdldEF0dHJpYnV0ZShyb290LCBEQVRBX0FUVFJJQlVURSkpKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGFzc2VydChmYWxzZSwgIkludmFsaWQgSlNPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ04iKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbyA9IE9iamVjdC5jcmVhdGUobWVyZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKHt9LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgdmFyIF9wcm90byA9IF9TcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5tb3VudCA9IGZ1bmN0aW9uIG1vdW50KEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHRlbnNpb25zLCBUcmFuc2l0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMgPSB0aGlzOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIgPSB0aGlzLkNvbXBvbmVudHM7XG4gICAgICBhc3NlcnQoc3RhdGUuaXMoW0NSRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEVELCBERVNUUk9ZRURdKSwgIkFscmVhZHkgbW91bnRlZCEiKTtcbiAgICAgIHN0YXRlLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQoQ1JFQVRFRCk7XG4gICAgICB0aGlzLl9DID0gQ29tcG9uZW50czI7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5fVCA9IFRyYW5zaXRpb24gfHwgdGhpcy5fVCB8fCAodGhpcy5pcyhGQURFKSA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidGYWRlIDogU2xpZGUpO1xuICAgICAgdGhpcy5fRSA9IEV4dGVuc2lvbnMgfHwgdGhpcy5fRScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB2YXIgQ29uc3RydWN0b3JzID0gYXNzaWduKHt9LCBDb21wb25lbnRDb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidydWN0b3JzLCB0aGlzLl9FLCB7XG4gICAgICAgIFRyYW5zaXRpb246IHRoaXMuX1RcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9KTtcbiAgICAgIGZvck93bihDb25zdHJ1Y3RvcnMsIGZ1bmN0aW9uIChDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50LCBrZXkpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudCA9IENvbXBvbmVudChfdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIENvbXBvbmVudHMyLCBfdGhpcy5fbyk7XG4gICAgICAgIENvbXBvbmVudHMyW2tleV0gPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcG9uZW50O1xuICAgICAgICBjb21wb25lbnQuc2V0dXAgJiYgY29tcG9uZW50LnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cCgpO1xuICAgICAgfSk7XG4gICAgICBmb3JPd24oQ29tcG9uZW50czIsIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAoY29tcG9uZW50KSB7XG4gICAgICAgIGNvbXBvbmVudC5tb3VudCAmJiBjb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0Lm1vdW50KCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZW1pdChFVkVOVF9NT1VOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFRCk7XG4gICAgICBhZGRDbGFzcyh0aGlzLnJvb3QsIENMQVNTX0lOSVRJQUxJWkVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICBzdGF0ZS5zZXQoSURMRSk7XG4gICAgICB0aGlzLmVtaXQoRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFQURZKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc3knCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmMgPSBmdW5jdGlvbiBzeW5jKHNwbGlkZSkge1xuICAgICAgdGhpcy5zcGxpZGVzLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHtcbiAgICAgICAgc3BsaWRlOiBzcGxpZGVcbiAgICAgIH0pO1xuICAgICAgc3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zcGxpZGVzLnB1c2goe1xuICAgICAgICBzcGxpZGU6IHRoaXMsXG4gICAgICAgIGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BhcmVudDogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnN0YXRlLmlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJRExFKSkge1xuICAgICAgICB0aGlzLl9DLlN5bmMucmVtb3VudCgpO1xuXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBzcGxpZGUuQ29tcG9uZW50cy5TeW5jLnJlbW91bnQoKTtcbiAgICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZ28gPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZ28oY29udHJvbCkge1xuICAgICAgdGhpcy5fQy5Db250cm9sbGVyLmdvKGNvbnRyb2wpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIF9wcm90by5vbiA9IGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBvbihldmVudHMsIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmV2ZW50Lm9uKGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3RvLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudHMpIHtcbiAgICAgIHRoaXMuZXZlbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29mZihldmVudHMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIF9wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcyRldmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7XG5cbiAgICAgIChfdGhpcyRldmVudCA9IHRoaXMuZXZlbnQpLmVtaXQuYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKF90aGlzJGV2ZW50LCBbZXZlbnRdLmNvbmNhdChzbGljZShhcmd1bWVudHMsIDEpKSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgX3Byb3RvLmFkZCA9IGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBhZGQoc2xpZGVzLCBpbmRleCkge1xuICAgICAgdGhpcy5fQy5TbGlkZXMuYWRkKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXMsIGluZGV4KTtcblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG1hdGNoZXIpIHtcbiAgICAgIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLl9DLlNsaWRlcy5yZW1vdmUobWF0Y2hlcik7XG5cbiAgICAgIHJldHVybiB0aGlzOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9O1xuXG4gICAgX3Byb3RvLmlzID0gZnVuY3Rpb24gaXModHlwZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiB0aGlzLl9vLnR5cGUgPT09IHR5cGU7XG4gICAgfTtcblxuICAgIF9wcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG8ucmVmcmVzaCA9IGZ1bmN0aW9uIHJlZnJlc2goKSB7XG4gICAgICB0aGlzLmVtaXQoRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX1JFRlJFU0gpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIF9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koY29tcGxldGVseSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChjb21wbGV0ZWx5ID09PSB2b2lkIDApIHtcbiAgICAgICAgY29tcGxldGVseSA9IHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VlO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLmV2ZW50LFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzdGF0ZSA9IHRoaXMuc3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZS5pcyhDUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVRFRCkpIHtcbiAgICAgICAgRXZlbnRJbnRlcmZhY2UodGhpcykub24oRVZFTlRfUkVBRFknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0aGlzLmRlc3Ryb3kuYmluZCh0aGlzLCBjb21wbGV0ZWx5KSk7XG4gICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgZm9yT3duKHRoaXMuX0MsIGZ1bmN0aW9uIChjb21wb25lbnQpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgICAgY29tcG9uZW50LmRlc3Ryb3kgJiYgY29tcG9uZW50LmRlc3Ryb3koYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBsZXRlbHkpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgZXZlbnQuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfREVTVFJPWSk7XG4gICAgICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNvbXBsZXRlbHkgJiYgZW1wdHkodGhpcy5zcGxpZGVzKTtcbiAgICAgICAgc3RhdGUucycKICAgICAgICAgICAgICAgICAgICAgICAgYidldChERVNUUk9ZRUQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIF9jcmVhdGVDbGFzcyhfU3BsaWRlLCBbe1xuICAgICAga2V5OiAib3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5fbztcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducykge1xuICAgICAgICB0aGlzLl9DLk1lZGlhLnNldChvcHRpb25zLCB0cnVlLCB0cnVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAibGVuZ3RoIixcbiAgICAgIGdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX0MuU2xpZGVzLmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RMZW5ndGgodHJ1ZSk7XG4gICAgICB9XG4gICAgfSwge1xuICAgICAga2V5OiAiaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4IixcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuX0MuQ29udHJvbGxlci5nZXRJbmRleCgpO1xuICAgICAgfVxuICAgIH1dKTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gX1NwbGlkZTtcbiAgfSgpO1xuXG4gIHZhciBTcGxpZGUgPSBfU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZTtcbiAgU3BsaWRlLmRlZmF1bHRzID0ge307XG4gIFNwbGlkZS5TVEFURVMgPSBTVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBVEVTO1xuICByZXR1cm4gU3BsaWRlO1xufSk7XG4nLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLmpzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsgd3JpdGFibGU6IGZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qIVxuICogU3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqc1xuICogVmVyc2lvbiAgOiA0LjEuNFxuICogTGljZW5zZSAgOiBNSVRcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb3B5cmlnaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhXG4gKi9cbihmdW5jdGlvbiAoZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzID0gZmFjdG9yeSgpIDogdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6IChnbG9iYWwgPSB0eXBlb2YgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgc2VsZiwgZ2xvYmFsLlNwbGlkZSA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIE1FRElBX1BSIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VGRVJTX1JFRFVDRURfTU9USU9OID0gIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVkdWNlKSI7XG4gIHZhciBDUkVBVEVEID0gMTtcbiAgdmFyIE1PVU5URUQgPSAyOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIElETEUgPSAzO1xuICB2YXIgTU9WSU5HID0gNDtcbiAgdmFyIFNDUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPTExJTkcgPSA1O1xuICB2YXIgRFJBR0dJTkcgPSA2O1xuICB2YXIgREVTVFJPWUVEICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IDc7XG4gIHZhciBTVEFURVMgPSB7XG4gICAgQ1JFQVRFRDogQ1JFQVRFRCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgTU9VTlRFRDogTU9VTlRFRCxcbiAgICBJRExFOiBJRExFLFxuICAgIE1PVklORycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IE1PVklORyxcbiAgICBTQ1JPTExJTkc6IFNDUk9MTElORyxcbiAgICBEUkFHR0lORycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IERSQUdHSU5HLFxuICAgIERFU1RST1lFRDogREVTVFJPWUVEXG4gIH07XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGVtcHR5KGFycmF5KSB7XG4gICAgYXJyYXkubGVuZ3RoID0gMDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICBmdW5jdGlvbiBzbGljZShhcnJheUxpa2UsIHN0YXJ0LCBlbmQpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycmF5TGlrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXBwbHkoZnVuYykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICByZXR1cm4gZnVuYy5iaW5kLmFwcGx5KGZ1bmMsIFtudWxsXS5jb25jYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHNsaWNlKGFyZ3VtZW50cywgMSkpKTtcbiAgfVxuXG4gIHZhciBuZXh0VGljayAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBzZXRUaW1lb3V0O1xuXG4gIHZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7fTtcblxuICBmdW5jdGlvbiByYWYoZnVuYykge1xuICAgIHJldHVybiByZXF1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdEFuaW1hdGlvbkZyYW1lKGZ1bmMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPZih0eXBlLCBzdWJqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuICFpc051bGwoc3ViamVjdCkgJiYgdHlwZU9mKCJvYmplY3QiLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3ViamVjdCk7XG4gIH1cblxuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgaXNGdW5jdGlvbiA9IGFwcGx5KHR5cGVPZiwgImZ1bmN0aW9uIik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgaXNTdHJpbmcgPSBhcHBseSh0eXBlT2YsICJzdHJpbmciKTtcbiAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc1VuZGVmaW5lZCA9IGFwcGx5KHR5cGVPZiwgInVuZGVmaW5lZCIpO1xuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBpc051bGwoc3ViamVjdCkge1xuICAgIHJldHVybiBzdWJqZWN0ID09PSBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQoc3ViamVjdCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHN1YmplY3QgaW5zdGFuY2VvZiAoc3ViJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Qub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLkhUTUxFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIGZvckVhY2godmFsdWVzLCBpdGVyYXRlZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0b0FycmF5KHZhbHVlcykuZm9yRWFjaChpdGVyYXRlZSk7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIGFycmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneS5pbmRleE9mKHZhbHVlKSA+IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcHVzaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXksIGl0ZW1zKSB7XG4gICAgYXJyYXkucHVzaC5hcHBseShhcnJheSwgdG9BcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkoaXRlbXMpKTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBhZGQpIHtcbiAgICBpZiAoZWxtKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgZm9yRWFjaChjbGFzc2VzLCBmdW5jdGlvbiAobmFtZSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBlbG0uY2xhc3NMaXN0W2FkZCA/ICJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RkIiA6ICJyZW1vdmUiXShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZENsYXNzKGVsbSwgY2xhc3NlcykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB0b2dnbGVDbGFzcyhlbG0sIGlzU3RyaW5nKGNsYXNzZXMpID8gY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuc3BsaXQoIiAiKSA6IGNsYXNzZXMsIHRydWUpO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGFwcGVuZChwYXJlbnQsIGNoaWxkcmVuKSB7XG4gICAgZm9yRWFjaChjaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW4sIHBhcmVudC5hcHBlbmRDaGlsZC5iaW5kKHBhcmVudCkpO1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGJlZm9yZShub2RlcywgcmVmKSB7XG4gICAgZm9yRWFjaChub2RlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgcGFyZW50ID0gKHJlZiB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbm9kZSkucGFyZW50Tm9kZTtcblxuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCByZWYpO1xuICAgICAgfVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hdGNoZXMoZWxtLCBzZWxlY3Rvcikge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gaXNIVE1MRWxlbWVudChlbG0pICYmIChlbG1bIm1zTWF0Y2hlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTZWxlY3RvciJdIHx8IGVsbS5tYXRjaGVzKS5jYWxsKGVsbSwgc2VsZWN0b3IpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIGNoaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIGNoaWxkcmVuMiA9IHBhcmVudCA/IHNsaWNlKHBhcmVudC5jaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW4pIDogW107XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gY2hpbGRyZW4yLmZpbHRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlcyhjaGlsZCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yKTtcbiAgICB9KSA6IGNoaWxkcmVuMjtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjaGlsZChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciA/IGNoaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpWzBdIDogcGFyZW50LmZpcnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRDaGlsZDtcbiAgfVxuXG4gIHZhciBvd25LZXlzID0gT2JqZWN0LmtlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lzO1xuXG4gIGZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlLCByaWdodCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBpZiAob2JqZWN0KSB7XG4gICAgICAocmlnaHQgPyBvd25LZXlzKG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QpLnJldmVyc2UoKSA6IG93bktleXMob2JqZWN0KSkuZm9yRWFjaChmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGtleSkge1xuICAgICAgICBrZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZXJhdGVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhvYmplY3Rba2V5XSwga2V5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gb2JqZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gYXNzaWduKG9iamVjdCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICAgIGZvck93bihzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmplY3Q7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gbWVyZ2Uob2JqZWN0KSB7XG4gICAgc2xpY2UoYXJndW1lbnRzLCAxKS5mb3JFYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICBmb3JPd24oc291cmNlLCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUuc2xpY2UoKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgb2JqZWN0W2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXldID0gbWVyZ2Uoe30sIGlzT2JqZWN0KG9iamVjdFtrZXldKSA/IG9iamVjdFtrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V5XSA6IHt9LCB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdFtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgZnVuY3Rpb24gb21pdChvYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0LCBrZXlzKSB7XG4gICAgZm9yRWFjaChrZXlzIHx8IG93bktleXMob2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxtcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHJzKSB7XG4gICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGF0dHIpIHtcbiAgICAgICAgZWxtICYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgICAgfSk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsbXMsIGF0dHJzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFsdWUpIHtcbiAgICBpZiAoaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgICBmb3JPdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGF0dHJzLCBmdW5jdGlvbiAodmFsdWUyLCBuYW1lKSB7XG4gICAgICAgIHNldEF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUoZWxtcywgbmFtZSwgdmFsdWUyKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uge1xuICAgICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc051bGwodmFsdWUpIHx8IHZhbHVlID09PSAiIiA/IHJlbW92ZUF0dHJpYnV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZWxtLCBhdHRycykgOiBlbG0uc2V0QXR0cmlidXRlKGF0dHJzLCBTdHJpbmcodmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKHRhZywgYXR0cnMsIHBhcmVudCkge1xuICAgIHZhciBlbG0gPSBkb2N1bWVudC5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYXRlRWxlbWVudCh0YWcpO1xuXG4gICAgaWYgKGF0dHJzKSB7XG4gICAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NTdHJpbmcoYXR0cnMpID8gYWRkQ2xhc3MoZWxtLCBhdHRycykgOiBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKGVsbSwgYXR0cnMpO1xuICAgIH1cblxuICAgIHBhcmVudCAmJiBhcHBlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKHBhcmVudCwgZWxtKTtcbiAgICByZXR1cm4gZWxtO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHN0eWxlKGVsbSwgcHJvcCwgdmFsdWUpIHtcbiAgICBpZiAoaXNVbmRlZmluZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxtKVtwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcF07XG4gICAgfVxuXG4gICAgaWYgKCFpc051bGwodmFsdWUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxtLnN0eWxlW3Byb3BdID0gIiIgKyB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZGlzcGxheShlbG0sIGRpc3BsYXkyKSB7XG4gICAgc3R5bGUoZWxtLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgImRpc3BsYXkiLCBkaXNwbGF5Mik7XG4gIH1cblxuICBmdW5jdGlvbiBmb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZWxtKSB7XG4gICAgZWxtWyJzZXRBY3RpdmUiXSAmJiBlbG1bInNldEFjdGl2ZSJdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHx8IGVsbS5mb2N1cyh7XG4gICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKGVsbSwgYXR0cikgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICByZXR1cm4gZWxtLmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBoYXNDbGFzcyhlbG0sIGNsYXNzTmFtZSkge1xuICAgIHJldHVybiBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xtICYmIGVsbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiByZWN0KHRhcmdldCkge1xuICAgIHJldHVybiB0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbW92ZShub2Rlcykge1xuICAgIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uIChub2RlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7XG4gICAgICB9XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VIdG1sKGh0bWwpIHtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGNoaWxkKG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJ0ZXh0L2h0bWwiKS5ib2R5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGUsIHN0b3BQcm9wYWdhdGlvbikge1xuICAgIGUucHJldmVudERlZmF1bHQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICBpZiAoc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICBlLnN0b3BQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcGFnYXRpb24oKTtcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHF1ZXJ5KHBhcmVudCwgc2VsZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yKSB7XG4gICAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQucXVlcnlTZWxlY3RvcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IpO1xuICB9XG5cbiAgZnVuY3Rpb24gcXVlcnlBbGwocGFyZW50LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBzbGljZShwYXJlbnQucScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKSA6IFtdO1xuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICAgIHRvZ2dsZUNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlbG0sIGNsYXNzZXMsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpbWVPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YoZSkge1xuICAgIHJldHVybiBlLnRpbWVTdGFtcDtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB1bml0KHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSA6IHZhbHVlID8gdmFsdWUgKyAicHgiIDogIiI7XG4gIH1cblxuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BST0pFQ1RfQ09ERSA9ICJzcGxpZGUiO1xuICB2YXIgREFUQV9BVFRSSUJVVEUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRhdGEtIiArIFBST0pFQ1RfQ09ERTtcblxuICBmdW5jdGlvbiBhc3NlcnQoY29uZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiwgbWVzc2FnZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB0aHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3cgbmV3IEVycm9yKCJbIiArIFBST0pFQ1RfQ09ERSArICJdICIgKyAobWVzc2FnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgfHwgIiIpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbWluID0gTWF0aC5taW4sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgbWF4ID0gTWF0aC5tYXgsXG4gICAgICBmbG9vciA9IE1hdGguZmxvb3IsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgY2VpbCA9IE1hdGguY2VpbCxcbiAgICAgIGFicyA9IE1hdGguYWJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICBmdW5jdGlvbiBhcHByb3hpbWF0ZWx5RXF1YWwoeCwgeSwgZXBzaWxvbikgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICByZXR1cm4gYWJzKHggLSB5KSA8IGVwc2lsb247XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gYmV0d2VlbihudW1iZXIsIHgsIHksIGV4Y2x1c2l2ZSkge1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgICB2YXIgbWF4aW11bSA9IG1heCh4LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSk7XG4gICAgcmV0dXJuIGV4Y2x1c2l2ZSA/IG1pbmltdW0gPCBudW1iZXIgJiYgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciA8IG1heGltdW0gOiBtaW5pbXVtIDw9IG51bWJlciAmJiBudW1iZXIgPD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heGltdW07XG4gIH1cblxuICBmdW5jdGlvbiBjbGFtcChudW1iZXIsIHgsIHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIG1pbmltdW0gPSBtaW4oeCwgeSk7XG4gICAgdmFyIG1heGltdW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbWF4KHgsIHkpO1xuICAgIHJldHVybiBtaW4obWF4KG1pbmltdW0sIG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLCBtYXhpbXVtKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ24oeCkge1xuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gKyh4ID4gMCkgLSArKHggPCAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JtYXQoc3RyaW5nLCByZXBsYWNlbWVudHMpIHtcbiAgICBmb3JFYWNoKHJlcGxhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMsIGZ1bmN0aW9uIChyZXBsYWNlbWVudCkge1xuICAgICAgc3RyaW5nID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZy5yZXBsYWNlKCIlcyIsICIiICsgcmVwbGFjZW1lbnQpO1xuICAgIH0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFkKG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IpIHtcbiAgICByZXR1cm4gbnVtYmVyIDwgMTAgPyAiMCIgKyBudW1iZXIgOiAiIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyBudW1iZXI7XG4gIH1cblxuICB2YXIgaWRzID0ge307XG5cbiAgZnVuY3Rpb24gdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaXF1ZUlkKHByZWZpeCkge1xuICAgIHJldHVybiAiIiArIHByZWZpeCArIHBhZChpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RzW3ByZWZpeF0gPSAoaWRzW3ByZWZpeF0gfHwgMCkgKyAxKTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBFdmVudEJpbmRlcigpIHtcbiAgICB2YXIgbGlzdGVuZXJzID0gW10nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgZnVuY3Rpb24gYmluZCh0YXJnZXRzLCBldmVudHMsIGNhbGxiYWNrLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucykge1xuICAgICAgZm9yRWFjaEV2ZW50KHRhcmdldHMsIGV2ZW50cywgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0V2ZW50VGFyZ2V0ID0gKCJhZGRFdmVudExpc3RlbmVyIiBpbiB0YXJnZXQpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgdmFyIHJlbW92ZXIgPSBpc0V2ZW50VGFyZ2V0ID8gdGFyZ2V0LnJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVFdmVudExpc3RlbmVyLmJpbmQodGFyZ2V0LCBldmVudCwgY2FsbGJhY2ssICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zKSA6IHRhcmdldFsicmVtb3ZlTGlzdGVuZXIiXS5iaW5kKHRhcmdldCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrKTtcbiAgICAgICAgaXNFdmVudFRhcmdldCA/IHRhcmdldC5hZGRFdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMpIDogdGFyZ2V0WyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkTGlzdGVuZXIiXShjYWxsYmFjayk7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjaywgcmVtb3Zlcl0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuYmluZCh0YXJnZXRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZXZlbnRzLCBjYWxsYmFjaykge1xuICAgICAgZm9yRWFjaEV2ZW50KHRhcmdldHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24gKGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0ZW5lcikge1xuICAgICAgICAgIGlmIChsaXN0ZW5lclswXSA9PT0gdGFyZ2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiBsaXN0ZW5lclsxXSA9PT0gZXZlbnQgJiYgbGlzdGVuZXJbMl0gPT09IG5hbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BhY2UgJiYgKCFjYWxsYmFjayB8fCBsaXN0ZW5lclszXSA9PT0gY2FsbGJhY2spJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICAgICAgbGlzdGVuZXJbNF0oKTtcbiAgICAgICAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRydWU7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNwYXRjaCh0YXJnZXQsIHR5cGUsIGRldGFpbCkge1xuICAgICAgdmFyIGU7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIGJ1YmJsZXMgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIEN1c3RvbUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCA9PT0gImZ1bmN0aW9uIikge1xuICAgICAgICBlID0gbmV3IEN1c3RvbUV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCh0eXBlLCB7XG4gICAgICAgICAgYnViYmxlczogYnViYmxlcyxcbiAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGV0YWlsOiBkZXRhaWxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgZSA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgYnViYmxlcywgZmFsc2UsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXRhaWwpO1xuICAgICAgfVxuXG4gICAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSk7XG4gICAgICByZXR1cm4gZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaEV2ZW50KHRhcmdldHMsIGV2ZW50cywgaXRlcmF0ZWUpIHtcbiAgICAgIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFYWNoKHRhcmdldHMsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgdGFyZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBmb3JFYWNoKGV2ZW50cywgZnVuY3Rpb24gKGV2ZW50czIpIHtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZXZlbnRzMi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TlMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBldmVudE5TLnNwbGl0KCIuIiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICAgICAgaXRlcmF0ZWUodGFyZ2V0LCBmcmFnbWVudFswXSwgZnJhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50WzFdKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICBkYXRhWzRdKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgfSk7XG4gICAgICBlbXB0eShsaXN0ZW5lcnMpO1xuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4ge1xuICAgICAgYmluZDogYmluZCxcbiAgICAgIHVuYmluZDogdW5iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZCxcbiAgICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcbiAgICAgIGRlc3Ryb3k6IGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cm95XG4gICAgfTtcbiAgfVxuXG4gIHZhciBFVkVOVF9NT1VOVEVEID0gIm1vdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVkIjtcbiAgdmFyIEVWRU5UX1JFQURZID0gInJlYWR5IjtcbiAgdmFyIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNT1ZFID0gIm1vdmUiO1xuICB2YXIgRVZFTlRfTU9WRUQgPSAibW92ZWQiO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIEVWRU5UX0NMSUNLID0gImNsaWNrIjtcbiAgdmFyIEVWRU5UX0FDVElWRSA9ICJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aXZlIjtcbiAgdmFyIEVWRU5UX0lOQUNUSVZFID0gImluYWN0aXZlIjtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9WSVNJQkxFID0gInZpc2libGUiO1xuICB2YXIgRVZFTlRfSElEREVOID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJoaWRkZW4iO1xuICB2YXIgRVZFTlRfUkVGUkVTSCA9ICJyZWZyZXNoIjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBFVkVOVF9VUERBVEVEID0gInVwZGF0ZWQiO1xuICB2YXIgRVZFTlRfUkVTSVpFICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJyZXNpemUiO1xuICB2YXIgRVZFTlRfUkVTSVpFRCA9ICJyZXNpemVkIjtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBFVkVOVF9EUkFHID0gImRyYWciO1xuICB2YXIgRVZFTlRfRFJBR0dJTkcgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RyYWdnaW5nIjtcbiAgdmFyIEVWRU5UX0RSQUdHRUQgPSAiZHJhZ2dlZCI7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgRVZFTlRfU0NST0xMID0gInNjcm9sbCI7XG4gIHZhciBFVkVOVF9TQ1JPTExFRCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSAic2Nyb2xsZWQiO1xuICB2YXIgRVZFTlRfT1ZFUkZMT1cgPSAib3ZlcmZsb3ciOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIEVWRU5UX0RFU1RST1kgPSAiZGVzdHJveSI7XG4gIHZhciBFVkVOVF9BUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST1dTX01PVU5URUQgPSAiYXJyb3dzOm1vdW50ZWQiO1xuICB2YXIgRVZFTlRfQVJSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09XU19VUERBVEVEID0gImFycm93czp1cGRhdGVkIjtcbiAgdmFyIEVWRU5UX1BBR0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkFUSU9OX01PVU5URUQgPSAicGFnaW5hdGlvbjptb3VudGVkIjtcbiAgdmFyIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9QQUdJTkFUSU9OX1VQREFURUQgPSAicGFnaW5hdGlvbjp1cGRhdGVkIjtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQgPSAibmF2aWdhdGlvbjptb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZCI7XG4gIHZhciBFVkVOVF9BVVRPUExBWV9QTEFZID0gImF1dG9wbGF5OnBsYXkiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcgPSAiYXV0b3BsYXk6cGxheWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmciO1xuICB2YXIgRVZFTlRfQVVUT1BMQVlfUEFVU0UgPSAiYXV0b3BsYXk6cGF1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIjtcbiAgdmFyIEVWRU5UX0xBWllMT0FEX0xPQURFRCA9ICJsYXp5bG9hZDpsb2FkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIjtcbiAgdmFyIEVWRU5UX1NMSURFX0tFWURPV04gPSAic2siO1xuICB2YXIgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX1NISUZURUQgPSAic2giO1xuICB2YXIgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gImVpIjtcblxuICBmdW5jdGlvbiBFdmVudEludGVyZmFjZShTcGxpZGUyKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHZhciBidXMgPSBTcGxpZGUyID8gU3BsaWRlMi5ldmVudC5idXMgOiBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgIHZhciBiaW5kZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gRXZlbnRCaW5kZXIoKTtcblxuICAgIGZ1bmN0aW9uIG9uKGV2ZW50cywgY2FsbGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrKSB7XG4gICAgICBiaW5kZXIuYmluZChidXMsIHRvQXJyYXkoZXZlbnRzKS5qbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbigiICIpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICBjYWxsYmFjay5hcHBseShjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbGJhY2ssIGlzQXJyYXkoZS5kZXRhaWwpID8gZS5kZXRhaWwgOiBbXSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW1pdChldmVudCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGJpbmRlci5kaXNwYXRjaChidXMsIGV2ZW50LCBzbGljZShhcmd1bWVudHMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxKSk7XG4gICAgfVxuXG4gICAgaWYgKFNwbGlkZTIpIHtcbiAgICAgIFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmV2ZW50Lm9uKEVWRU5UX0RFU1RST1ksIGJpbmRlci5kZXN0cm95KTtcbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmV0dXJuIGFzc2lnbihiaW5kZXIsIHtcbiAgICAgIGJ1czogYnVzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9uOiBvbixcbiAgICAgIG9mZjogYXBwbHkoYmluZGVyLnVuYmluZCwgYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cyksXG4gICAgICBlbWl0OiBlbWl0XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gUmVxdWVzdEludGVydmFsKGludGVydmFsLCBvbkludGVydmFsLCBvblVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGxpbWl0KSB7XG4gICAgdmFyIG5vdyA9IERhdGUubm93O1xuICAgIHZhciBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaW1lO1xuICAgIHZhciByYXRlID0gMDtcbiAgICB2YXIgaWQ7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXVzZWQgPSB0cnVlO1xuICAgIHZhciBjb3VudCA9IDA7XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKCFwYXVzZWQpIHtcbiAgICAgICAgcmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBpbnRlcnZhbCA/IG1pbigobm93KCkgLSBzdGFydFRpbWUpIC8gaW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAxKSA6IDE7XG4gICAgICAgIG9uVXBkYXRlICYmIG9uVXBkYXRlKHJhdGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgICBpZiAocmF0ZSA+PSAxKSB7XG4gICAgICAgICAgb25JbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J2YWwoKTtcbiAgICAgICAgICBzdGFydFRpbWUgPSBub3coKTtcblxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAobGltaXQgJiYgKytjb3VudCA+PSBsaW1pdCkge1xuICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBwYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZCA9IHJhZih1cGRhdGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBzdGFydChyZXN1bWUpIHtcbiAgICAgIHJlc3VtZSB8fCBjYW5jZWwoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBzdGFydFRpbWUgPSBub3coKSAtIChyZXN1bWUgPyByYXRlICogaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsIDogMCk7XG4gICAgICBwYXVzZWQgPSBmYWxzZTtcbiAgICAgIGlkID0gcmFmKHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhdXNlKCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmV3aW5kKCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHN0YXJ0VGltZSA9IG5vdygpO1xuICAgICAgcmF0ZSA9IDA7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBpZiAob25VcGRhdGUpIHtcbiAgICAgICAgb25VcGRhdGUocmF0ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCAmJiBjYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICAgICByYXRlID0gMDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZCA9IDA7XG4gICAgICBwYXVzZWQgPSB0cnVlO1xuICAgIH1cblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBzZXQodGltZSkge1xuICAgICAgaW50ZXJ2YWwgPSB0aW1lO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBpc1BhdXNlZCgpIHtcbiAgICAgIHJldHVybiBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1c2VkO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LFxuICAgICAgcmV3aW5kOiByZXdpbmQsXG4gICAgICBwYXVzZTogcGF1c2UsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgY2FuY2VsOiBjYW5jZWwsXG4gICAgICBzZXQ6IHNldCxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc1BhdXNlZDogaXNQYXVzZWRcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlKGluaXRpYWxTdGF0ZSkge1xuICAgIHZhciBzdGF0ZSA9IGluaXRpYWxTdGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG5cbiAgICBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIHN0YXRlID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzKHN0YXRlcykge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBpbmNsdWRlcyh0b0FycmF5KHN0YXRlcyksIHN0YXRlKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNldDogc2V0LFxuICAgICAgaXM6IGlzXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBUaHJvdHRsZShmdW5jLCBkdXJhdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24pIHtcbiAgICB2YXIgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoZHVyYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHx8IDAsIGZ1bmMsIG51bGwsIDEpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaW50ZXJ2YWwuaXNQYXVzZWQoKSAmJiBpbnRlcnZhbC5zdGFydCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gTWVkaWEoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIHN0YXRlID0gU3BsaWRlMi5zdGF0ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIGJyZWFrcG9pbnRzID0gb3B0aW9ucy5icmVha3BvaW50cyB8fCB7fScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdmFyIHJlZHVjZWRNb3Rpb24gPSBvcHRpb25zLnJlZHVjZWRNb3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IHt9O1xuICAgIHZhciBiaW5kZXIgPSBFdmVudEJpbmRlcigpO1xuICAgIHZhciBxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlcmllcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGlzTWluID0gb3B0aW9ucy5tZWRpYVF1ZXJ5ID09PSAibWluIjtcbiAgICAgIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd25LZXlzKGJyZWFrcG9pbnRzKS5zb3J0KGZ1bmN0aW9uIChuLCBtKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gaXNNaW4gPyArbiAtICttIDogK20gLSArbjtcbiAgICAgIH0pLmZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmVnaXN0ZXIoYnJlYWtwb2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzW2tleV0sICIoIiArIChpc01pbiA/ICJtaW4iIDogIm1heCIpICsgIi13aWR0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2g6IiArIGtleSArICJweCkiKTtcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXIocmVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VjZWRNb3Rpb24sIE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1RJT04pO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koY29tcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRlbHkpIHtcbiAgICAgIGlmIChjb21wbGV0ZWx5KSB7XG4gICAgICAgIGJpbmRlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcihvcHRpb25zMiwgcXVlcnkpIHtcbiAgICAgIHZhciBxdWVyeUxpc3QgPSBtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hNZWRpYShxdWVyeSk7XG4gICAgICBiaW5kZXIuYmluZChxdWVyeUxpc3QsICJjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbmdlIiwgdXBkYXRlKTtcbiAgICAgIHF1ZXJpZXMucHVzaChbb3B0aW9uczIsIHF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyeUxpc3RdKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGRlc3Ryb3llZCA9IHN0YXRlLmlzKERFU1RST1lFRCk7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGRpcmVjdGlvbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgdmFyIG1lcmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgPSBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkMiwgZW50cnkpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIHJldHVybiBtZXJnZShtZXJnZWQyLCBlbnRyeVsxXS5tYXRjaGVzID8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVudHJ5WzBdIDoge30pO1xuICAgICAgfSwge30pO1xuICAgICAgb21pdChvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyk7XG4gICAgICBzZXQobWVyZ2VkKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3kpIHtcbiAgICAgICAgU3BsaWRlMi5kZXN0cm95KG9wdGlvbnMuZGVzdHJveScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPT09ICJjb21wbGV0ZWx5Iik7XG4gICAgICB9IGVsc2UgaWYgKGRlc3Ryb3llZCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgZGVzdHJveSh0cnVlKTtcbiAgICAgICAgU3BsaWRlMi5tb3VudCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRpcmVjdGlvbiAhPT0gb3B0aW9ucy5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uICYmIFNwbGlkZTIucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBmdW5jdGlvbiByZWR1Y2UoZW5hYmxlKSB7XG4gICAgICBpZiAobWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoTWVkaWEoTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTikubWF0Y2hlcykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgZW5hYmxlID8gbWVyZ2Uob3B0aW9ucywgcmVkdWNlZE1vdGlvbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogb21pdChvcHRpb25zLCBvd25LZXlzKHJlZHVjZWRNb3Rpb24pKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KG9wdHMsIGJhc2UsIG5vdGlmeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIG1lcmdlKG9wdGlvbnMsIG9wdHMpO1xuICAgICAgYmFzZSAmJiBtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2UoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9wdGlvbnMpLCBvcHRzKTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChub3RpZnkgfHwgIXN0YXRlLmlzKENSRUFURUQpKSB7XG4gICAgICAgIFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLmVtaXQoRVZFTlRfVVBEQVRFRCwgb3B0aW9ucyk7XG4gICAgICB9XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHJldHVybiB7XG4gICAgICBzZXR1cDogc2V0dXAsXG4gICAgICBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveTogZGVzdHJveSxcbiAgICAgIHJlZHVjZTogcmVkdWNlLFxuICAgICAgc2V0OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0XG4gICAgfTtcbiAgfVxuXG4gIHZhciBBUlJPVyA9ICJBcnJvdyI7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQVJST1dfTEVGVCA9IEFSUk9XICsgIkxlZnQiO1xuICB2YXIgQVJST1dfUklHSFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQVJST1cgKyAiUmlnaHQiO1xuICB2YXIgQVJST1dfVVAgPSBBUlJPVyArICJVcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICB2YXIgQVJST1dfRE9XTiA9IEFSUk9XICsgIkRvd24iO1xuICB2YXIgUlRMICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJydGwiO1xuICB2YXIgVFRCID0gInR0YiI7XG4gIHZhciBPUklFTlRBVElPTl9NQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQID0ge1xuICAgIHdpZHRoOiBbImhlaWdodCJdLFxuICAgIGxlZnQ6IFsidG9wIiwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWdodCJdLFxuICAgIHJpZ2h0OiBbImJvdHRvbSIsICJsZWZ0Il0sXG4gICAgeDogWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicieSJdLFxuICAgIFg6IFsiWSJdLFxuICAgIFk6IFsiWCJdLFxuICAgIEFycm93TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZnQ6IFtBUlJPV19VUCwgQVJST1dfUklHSFRdLFxuICAgIEFycm93UmlnaHQ6IFtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1dfRE9XTiwgQVJST1dfTEVGVF1cbiAgfTtcblxuICBmdW5jdGlvbiBEaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHJlc29sdmUocHJvcCwgYXhpc09ubHksIGRpcmVjdGlvbikge1xuICAgICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBvcHRpb25zLmRpcmVjdGlvbjtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgaW5kZXggPSBkaXJlY3Rpb24gPT09IFJUTCAmJiAhYXhpc09ubHkgPyAxICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGRpcmVjdGlvbiA9PT0gVFRCID8gMCA6IC0xO1xuICAgICAgcmV0dXJuIE9SSUVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBVElPTl9NQVBbcHJvcF0gJiYgT1JJRU5UQVRJT05fTUFQW3Byb3BdW2luZGV4XScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgcHJvcC5yZXBsYWNlKC93aWR0aHxsZWZ0fHJpZ2h0L2ksIGZ1bmN0aW9uICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF0Y2gsIG9mZnNldCkge1xuICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBPUklFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUQVRJT05fTUFQW21hdGNoLnRvTG93ZXJDYXNlKCldW2luZGV4XSB8fCBtYXRjaDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHJldHVybiBvZmZzZXQgPiAwID8gcmVwbGFjZW1lbnQuY2hhckF0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwKS50b1VwcGVyQ2FzZSgpICsgcmVwbGFjZW1lbnQuc2xpY2UoMSkgOiByZXBsYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQ7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvcmllbnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgKiAob3B0aW9ucy5kaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBSVEwgPyAxIDogLTEpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgIG9yaWVudDogb3JpZW50XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG4gIH1cblxuICB2YXIgUk9MRSA9ICJyb2xlIjtcbiAgdmFyIFRBQl9JTkRFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ggPSAidGFiaW5kZXgiO1xuICB2YXIgRElTQUJMRUQgPSAiZGlzYWJsZWQiO1xuICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIEFSSUFfUFJFRklYID0gImFyaWEtIjtcbiAgdmFyIEFSSUFfQ09OVFJPTFMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9QUkVGSVggKyAiY29udHJvbHMiO1xuICB2YXIgQVJJQV9DVVJSRU5UID0gQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSSUFfUFJFRklYICsgImN1cnJlbnQiO1xuICB2YXIgQVJJQV9TRUxFQ1RFRCA9IEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX1BSRUZJWCArICJzZWxlY3RlZCI7XG4gIHZhciBBUklBX0xBQkVMID0gQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYICsgImxhYmVsIjtcbiAgdmFyIEFSSUFfTEFCRUxMRURCWSA9IEFSSUFfUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSRUZJWCArICJsYWJlbGxlZGJ5IjtcbiAgdmFyIEFSSUFfSElEREVOID0gQVJJQV9QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRklYICsgImhpZGRlbiI7XG4gIHZhciBBUklBX09SSUVOVEFUSU9OID0gQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYICsgIm9yaWVudGF0aW9uIjtcbiAgdmFyIEFSSUFfUk9MRURFU0NSSVBUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPTiA9IEFSSUFfUFJFRklYICsgInJvbGVkZXNjcmlwdGlvbiI7XG4gIHZhciBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19MSVZFID0gQVJJQV9QUkVGSVggKyAibGl2ZSI7XG4gIHZhciBBUklBX0JVU1kgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9QUkVGSVggKyAiYnVzeSI7XG4gIHZhciBBUklBX0FUT01JQyA9IEFSSUFfUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSRUZJWCArICJhdG9taWMiO1xuICB2YXIgQUxMX0FUVFJJQlVURVMgPSBbUk9MRSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBQl9JTkRFWCwgRElTQUJMRUQsIEFSSUFfQ09OVFJPTFMsIEFSSUFfQ1VSUkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIEFSSUFfTEFCRUwsIEFSSUFfTEFCRUxMRURCWSwgQVJJQV9ISURERU4sIEFSSUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX09SSUVOVEFUSU9OLCBBUklBX1JPTEVERVNDUklQVElPTl07XG4gIHZhciBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfUFJFRklYID0gUFJPSkVDVF9DT0RFICsgIl9fIjtcbiAgdmFyIFNUQVRVU19DTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUFJFRklYID0gImlzLSI7XG4gIHZhciBDTEFTU19ST09UID0gUFJPSkVDVF9DT0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRTtcbiAgdmFyIENMQVNTX1RSQUNLID0gQ0xBU1NfUFJFRklYICsgInRyYWNrIjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBDTEFTU19MSVNUID0gQ0xBU1NfUFJFRklYICsgImxpc3QiO1xuICB2YXIgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1NMSURFID0gQ0xBU1NfUFJFRklYICsgInNsaWRlIjtcbiAgdmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19DTE9ORSA9IENMQVNTX1NMSURFICsgIi0tY2xvbmUiO1xuICB2YXIgQ0xBU1NfQ08nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRBSU5FUiA9IENMQVNTX1NMSURFICsgIl9fY29udGFpbmVyIjtcbiAgdmFyIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19BUlJPV1MgPSBDTEFTU19QUkVGSVggKyAiYXJyb3dzIjtcbiAgdmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPVyA9IENMQVNTX1BSRUZJWCArICJhcnJvdyI7XG4gIHZhciBDTEFTU19BUlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT1dfUFJFViA9IENMQVNTX0FSUk9XICsgIi0tcHJldiI7XG4gIHZhciBDTEFTU19BUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST1dfTkVYVCA9IENMQVNTX0FSUk9XICsgIi0tbmV4dCI7XG4gIHZhciBDTEFTU19QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FHSU5BVElPTiA9IENMQVNTX1BSRUZJWCArICJwYWdpbmF0aW9uIjtcbiAgdmFyIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19QQUdJTkFUSU9OX1BBR0UgPSBDTEFTU19QQUdJTkFUSU9OICsgIl9fcGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UiO1xuICB2YXIgQ0xBU1NfUFJPR1JFU1MgPSBDTEFTU19QUkVGSVggKyAicHJvZ3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNzIjtcbiAgdmFyIENMQVNTX1BST0dSRVNTX0JBUiA9IENMQVNTX1BST0dSRVNTICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrICJfX2JhciI7XG4gIHZhciBDTEFTU19UT0dHTEUgPSBDTEFTU19QUkVGSVggKyAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvZ2dsZSI7XG4gIHZhciBDTEFTU19TUElOTkVSID0gQ0xBU1NfUFJFRklYICsgInMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGlubmVyIjtcbiAgdmFyIENMQVNTX1NSID0gQ0xBU1NfUFJFRklYICsgInNyIjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBDTEFTU19JTklUSUFMSVpFRCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXRpYWxpemVkIjtcbiAgdmFyIENMQVNTX0FDVElWRSA9IFNUQVRVU19DTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYICsgImFjdGl2ZSI7XG4gIHZhciBDTEFTU19QUkVWID0gU1RBVFVTX0NMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUkVGSVggKyAicHJldiI7XG4gIHZhciBDTEFTU19ORVhUID0gU1RBVFVTX0NMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19QUkVGSVggKyAibmV4dCI7XG4gIHZhciBDTEFTU19WSVNJQkxFID0gU1RBVFUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19DTEFTU19QUkVGSVggKyAidmlzaWJsZSI7XG4gIHZhciBDTEFTU19MT0FESU5HICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibG9hZGluZyI7XG4gIHZhciBDTEFTU19GJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09DVVNfSU4gPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImZvY3VzLWluIjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBDTEFTU19PVkVSRkxPVyA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAib3ZlcmZsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293IjtcbiAgdmFyIFNUQVRVU19DTEFTU0VTID0gW0NMQVNTX0FDVElWRSwgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1ZJU0lCTEUsIENMQVNTX1BSRVYsIENMQVNTX05FWFQsIENMQVNTX0xPQURJTkcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19GT0NVU19JTiwgQ0xBU1NfT1ZFUkZMT1ddO1xuICB2YXIgQ0xBU1NFUyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSB7XG4gICAgc2xpZGU6IENMQVNTX1NMSURFLFxuICAgIGNsb25lOiBDTEFTU19DTE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkUsXG4gICAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gICAgYXJyb3c6IENMQVNTX0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPVyxcbiAgICBwcmV2OiBDTEFTU19BUlJPV19QUkVWLFxuICAgIG5leHQ6IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19BUlJPV19ORVhULFxuICAgIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHBhZ2U6IENMQVNTX1BBR0lOQVRJT05fUEFHRSxcbiAgICBzcGlubmVyOiBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfU1BJTk5FUlxuICB9O1xuXG4gIGZ1bmN0aW9uIGNsb3Nlc3QoZnJvbSwgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbGVjdG9yKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZnJvbS5jbG9zZXN0KSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJldHVybiBmcm9tLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgZWxtID0gZnJvbTtcblxuICAgIHdoaWxlIChlbG0gJiYgZWxtLm5vZGVUeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZSA9PT0gMSkge1xuICAgICAgaWYgKG1hdGNoZXMoZWxtLCBzZWxlY3RvcikpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBlbG0gPSBlbG0ucGFyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsbTtcbiAgfVxuXG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRlJJQ1RJT04gPSA1O1xuICB2YXIgTE9HX0lOVEVSVkFMID0gMjAwO1xuICB2YXIgUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPSU5URVJfRE9XTl9FVkVOVFMgPSAidG91Y2hzdGFydCBtb3VzZWRvd24iO1xuICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIFBPSU5URVJfTU9WRV9FVkVOVFMgPSAidG91Y2htb3ZlIG1vdXNlbW92ZSI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgUE9JTlRFUl9VUF9FVkVOVFMgPSAidG91Y2hlbmQgdG91Y2hjYW5jZWwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdXNldXAgY2xpY2siO1xuXG4gIGZ1bmN0aW9uIEVsZW1lbnRzKFNwbGlkZTIsIENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2UgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZS5vbixcbiAgICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZS5iaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDtcblxuICAgIHZhciByb290ID0gU3BsaWRlMi5yb290O1xuICAgIHZhciBpMTgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgZWxlbWVudHMgPSB7fTtcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlcyA9IFtdO1xuICAgIHZhciByb290Q2xhc3NlcyA9IFtdO1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJhY2tDbGFzc2VzID0gW107XG4gICAgdmFyIHRyYWNrO1xuICAgIHZhciBsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdDtcbiAgICB2YXIgaXNVc2luZ0tleTtcblxuICAgIGZ1bmN0aW9uIHNldHVwKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIGNvbGxlY3QoKTtcbiAgICAgIGluaXQoKTtcbiAgICAgIHVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbihFVkVOVF9SRUZSRVNILCBkZXN0cm95KTtcbiAgICAgIG9uKEVWRU5UX1JFRlJFUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidILCBzZXR1cCk7XG4gICAgICBvbihFVkVOVF9VUERBVEVELCB1cGRhdGUpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGJpbmQoZG9jdW1lbnQsIFBPSU5URVJfRE9XTl9FVkVOVFMgKyAiIGtleWRvd24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgaXNVc2luZ0tleSA9IGUudHlwZSA9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ICJrZXlkb3duIjtcbiAgICAgIH0sIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VcbiAgICAgIH0pO1xuICAgICAgYmluZChyb290LCAiZm9jdXNpbiIsIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHJvb3QsIENMQVNTX0ZPQ1VTX0lOLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInISFpc1VzaW5nS2V5KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0cm95KGNvbXBsZXRlbHkpIHtcbiAgICAgIHZhciBhdHRycyA9IEFMTF9BVFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUklCVVRFUy5jb25jYXQoInN0eWxlIik7XG4gICAgICBlbXB0eShzbGlkZXMpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvb3RDbGFzc2VzKTtcbiAgICAgIHJlbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICAgIHJlbW92ZUF0dHJpYnV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoW3RyYWNrLCBsaXN0XSwgYXR0cnMpO1xuICAgICAgcmVtb3ZlQXR0cmlidXRlKHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb290LCBjb21wbGV0ZWx5ID8gYXR0cnMgOiBbInN0eWxlIiwgQVJJQV9ST0xFREVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NSSVBUSU9OXSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvb3RDbGFzc2VzKTtcbiAgICAgIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICAgIHJvb3RDbGFzc2VzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldENsYXNzZXMoQ0xBU1NfUk9PVCk7XG4gICAgICB0cmFja0NsYXNzZXMgPSBnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Q2xhc3NlcyhDTEFTU19UUkFDSyk7XG4gICAgICBhZGRDbGFzcyhyb290LCByb290JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NsYXNzZXMpO1xuICAgICAgYWRkQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3Nlcyk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgc2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUwsIG9wdGlvbnMubGFiZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKTtcbiAgICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBX0xBQkVMTEVEQlksIG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmxhYmVsbGVkYnkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0KCkge1xuICAgICAgdHJhY2sgPSBmaW5kKCIuIiArIENMQVNTX1RSQUNLKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsaXN0ID0gY2hpbGQodHJhY2ssICIuIiArIENMQVNTX0xJU1QpO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFzc2VydCh0cmFjayAmJiBsaXN0LCAiQSB0cmFjay9saXN0IGVsZW1lbnQgaXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pc3NpbmcuIik7XG4gICAgICBwdXNoKHNsaWRlcywgY2hpbGRyZW4obGlzdCwgIi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiArIENMQVNTX1NMSURFICsgIjpub3QoLiIgKyBDTEFTU19DTE9ORSArICIpIikpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGZvck93bih7XG4gICAgICAgIGFycm93czogQ0xBU1NfQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyxcbiAgICAgICAgcGFnaW5hdGlvbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXY6IENMQVNTX0FSUk9XX1BSRVYsXG4gICAgICAgIG5leHQ6IENMQVNTX0FSUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPV19ORVhULFxuICAgICAgICBiYXI6IENMQVNTX1BST0dSRVNTX0JBUixcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRvZ2dsZTogQ0xBU1NfVE9HR0xFXG4gICAgICB9LCBmdW5jdGlvbiAoY2xhc3NOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtZSwga2V5KSB7XG4gICAgICAgIGVsZW1lbnRzW2tleV0gPSBmaW5kKCIuIiArIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc05hbWUpO1xuICAgICAgfSk7XG4gICAgICBhc3NpZ24oZWxlbWVudHMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICAgIHRyYWNrOiB0cmFjayxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGxpc3Q6IGxpc3QsXG4gICAgICAgIHNsaWRlczogc2xpZGVzXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQgPSByb290LmlkIHx8IHVuaXF1ZUlkKFBST0pFQ1RfQ09ERSk7XG4gICAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIHJvbGUgPSBvcHRpb25zLnJvbGU7XG4gICAgICByb290LmlkID0gaWQ7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJhY2suaWQgPSB0cmFjay5pZCB8fCBpZCArICItdHJhY2siO1xuICAgICAgbGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuaWQgPSBsaXN0LmlkIHx8IGlkICsgIi1saXN0IjtcblxuICAgICAgaWYgKCFnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKHJvb3QsIFJPTEUpICYmIHJvb3QudGFnTmFtZSAhPT0gIlNFQ1RJTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOIiAmJiByb2xlKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZShyb290LCBST0xFLCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sZSk7XG4gICAgICB9XG5cbiAgICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19ST0xFREVTQ1JJUFRJT04sIGkxOG4uY2Fyb3VzZWwpO1xuICAgICAgc2V0QXR0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnV0ZShsaXN0LCBST0xFLCAicHJlc2VudGF0aW9uIik7XG4gICAgfVxuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGZpbmQoc2VsZWN0b3IpIHtcbiAgICAgIHZhciBlbG0gPSBxdWVyeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocm9vdCwgc2VsZWN0b3IpO1xuICAgICAgcmV0dXJuIGVsbSAmJiBjbG9zZXN0KGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20sICIuIiArIENMQVNTX1JPT1QpID09PSByb290ID8gZWxtIDogdm9pZCAwO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDbGFzc2VzKGJhc2UpIHtcbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gW2Jhc2UgKyAiLS0iICsgb3B0aW9ucy50eXBlLCBiYXNlICsgIi0tIiArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLmRpcmVjdGlvbiwgb3B0aW9ucy5kcmFnICYmIGJhc2UgKyAiLS1kcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2dhYmxlIiwgb3B0aW9ucy5pc05hdmlnYXRpb24gJiYgYmFzZSArICItLW5hdiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBiYXNlID09PSBDTEFTU19ST09UICYmIENMQVNTX0FDVElWRV07XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIHJldHVybiBhc3NpZ24oZWxlbWVudHMsIHtcbiAgICAgIHNldHVwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogc2V0dXAsXG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JveVxuICAgIH0pO1xuICB9XG5cbiAgdmFyIFNMSURFID0gInNsaWRlIjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBMT09QID0gImxvb3AiO1xuICB2YXIgRkFERSA9ICJmYWRlIjtcblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gU2xpZGUkMShTcGxpZGUyLCBpbmRleCwgc2xpZGVJbmRleCwgc2xpZGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBvbiA9IGV2ZW50Lm9uLFxuICAgICAgICBlbWl0ID0gZXZlbnQuZW1pdCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGJpbmQgPSBldmVudC5iaW5kO1xuICAgIHZhciBDb21wb25lbnRzID0gU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIuQ29tcG9uZW50cyxcbiAgICAgICAgcm9vdCA9IFNwbGlkZTIucm9vdCxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIG9wdGlvbnMgPSBTcGxpZGUyLm9wdGlvbnM7XG4gICAgdmFyIGlzTmF2aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnYXRpb24gPSBvcHRpb25zLmlzTmF2aWdhdGlvbixcbiAgICAgICAgdXBkYXRlT25NJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSA9IG9wdGlvbnMudXBkYXRlT25Nb3ZlLFxuICAgICAgICBpMThuID0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuaTE4bixcbiAgICAgICAgcGFnaW5hdGlvbiA9IG9wdGlvbnMucGFnaW5hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIHNsaWRlRm9jdXMgPSBvcHRpb25zLnNsaWRlRm9jdXM7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciByZXNvbHZlID0gQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2ZTtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIHN0eWxlcyA9IGdldEF0dHJpYnV0ZShzbGlkZSwgInN0eWxlIik7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBsYWJlbCA9IGdldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCk7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBpc0Nsb25lID0gc2xpZGVJbmRleCA+IC0xO1xuICAgIHZhciBjb250YWluZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY2hpbGQoc2xpZGUsICIuIiArIENMQVNTX0NPTlRBSU5FUik7XG4gICAgdmFyIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0cm95ZWQ7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIWlzQ2xvbmUpIHtcbiAgICAgICAgc2xpZGUuaWQgPSByb290LmlkICsgIi1zbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciICsgcGFkKGluZGV4ICsgMSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JPTEUsIHBhZ2luYXRpb24gPyAidGFicGFuZWwiIDogImdyb3VwIik7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBpMThuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zbGlkZSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxhYmVsIHx8IGZvcm1hdChpMThuLnNsaWRlTGFiZWwsIFtpbmRleCArIDEsIFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLmxlbmd0aF0pKTtcbiAgICAgIH1cblxuICAgICAgbGlzdGVuKCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RlbigpIHtcbiAgICAgIGJpbmQoc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCAiY2xpY2siLCBhcHBseShlbWl0LCBFVkVOVF9DTElDSywgc2VsZikpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGJpbmQoc2xpZGUsICJrZXlkb3duIiwgYXBwbHkoZW1pdCwgRVZFTlRfU0xJRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFX0tFWURPV04sIHNlbGYpKTtcbiAgICAgIG9uKFtFVkVOVF9NT1ZFRCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NISUZURUQsIEVWRU5UX1NDUk9MTEVEXSwgdXBkYXRlKTtcbiAgICAgIG9uKEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVF9OQVZJR0FUSU9OX01PVU5URUQsIGluaXROYXZpZ2F0aW9uKTtcblxuICAgICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICh1cGRhdGVPbk1vdmUpIHtcbiAgICAgICAgb24oRVZFTlRfTU9WRSwgb25Nb3ZlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgZXZlbnQuZGVzdHJveSgpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJlbW92ZUNsYXNzKHNsaWRlLCBTVEFUVVNfQ0xBU1NFUyk7XG4gICAgICByZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlQXR0cmlidXRlKHNsaWRlLCBBTExfQVRUUklCVVRFUyk7XG4gICAgICBzZXRBdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlidXRlKHNsaWRlLCAic3R5bGUiLCBzdHlsZXMpO1xuICAgICAgc2V0QXR0cmliJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZShzbGlkZSwgQVJJQV9MQUJFTCwgbGFiZWwgfHwgIiIpO1xuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBpbml0TmF2aWdhdGlvbigpIHtcbiAgICAgIHZhciBjb250cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHMgPSBTcGxpZGUyLnNwbGlkZXMubWFwKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHZhciBTbGlkZTIgPSB0YXJnZXQuc3BsaWRlLkNvbXBvbmVudHMuU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5nZXRBdChpbmRleCk7XG4gICAgICAgIHJldHVybiBTbGlkZTIgPyBTbGlkZTIucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLmlkIDogIiI7XG4gICAgICB9KS5qb2luKCIgIik7XG4gICAgICBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHNsaWRlLCBBUklBX0xBQkVMLCBmb3JtYXQoaTE4bi5zbGlkZVgsIChpc0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZSA/IHNsaWRlSW5kZXggOiBpbmRleCkgKyAxKSk7XG4gICAgICBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHNsaWRlLCBBUklBX0NPTlRST0xTLCBjb250cm9scyk7XG4gICAgICBzZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKHNsaWRlLCBST0xFLCBzbGlkZUZvY3VzID8gImJ1dHRvbiIgOiAiIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgc2xpZGVGb2N1cyAmJiByZW1vdmVBdHRyaWJ1dGUoc2xpZGUsIEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX1JPTEVERVNDUklQVElPTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25NJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSgpIHtcbiAgICAgIGlmICghZGVzdHJveWVkKSB7XG4gICAgICAgIHVwZGF0ZSgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKCFkZXN0cm95ZWQpIHtcbiAgICAgICAgdmFyIGN1cnIgPSBTcGxpZGUyLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleDtcbiAgICAgICAgdXBkYXRlQWN0aXZpdHkoKTtcbiAgICAgICAgdXBkYXRlVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc2liaWxpdHkoKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIENMQVNTX1BSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWLCBpbmRleCA9PT0gY3VyciAtIDEpO1xuICAgICAgICB0b2dnbGVDbGFzcyhzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUsIENMQVNTX05FWFQsIGluZGV4ID09PSBjdXJyICsgMSk7XG4gICAgICB9XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUFjdGl2aXR5KCkge1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xuXG4gICAgICBpZiAoYWN0aXZlICE9PSBoYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xhc3Moc2xpZGUsIENMQVNTX0FDVElWRSkpIHtcbiAgICAgICAgdG9nZ2xlQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKHNsaWRlLCBDTEFTU19BQ1RJVkUsIGFjdGl2ZSk7XG4gICAgICAgIHNldEF0dHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dGUoc2xpZGUsIEFSSUFfQ1VSUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgIiIpO1xuICAgICAgICBlbWl0KGFjdGl2ZSA/IEVWRU5UX0FDVElWRSA6IEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9JTkFDVElWRSwgc2VsZik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIHVwZGF0ZVZpc2liaWxpdHkoKSB7XG4gICAgICB2YXIgdmlzaWJsZSA9IGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Zpc2libGUoKTtcbiAgICAgIHZhciBoaWRkZW4gPSAhdmlzaWJsZSAmJiAoIWlzQWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSgpIHx8IGlzQ2xvbmUpO1xuXG4gICAgICBpZiAoIVNwbGlkZTIuc3RhdGUuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKFtNT1ZJTkcsIFNDUk9MTElOR10pKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZShzbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUsIEFSSUFfSElEREVOLCBoaWRkZW4gfHwgIiIpO1xuICAgICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgc2V0QXR0cmlidXRlKHF1ZXJ5QWxsKHNsaWRlLCBvcHRpb25zLmZvY3VzYWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVOb2RlcyB8fCAiIiksIFRBQl9JTkRFWCwgaGlkZGVuID8gLTEgOiAiIik7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoc2xpZGVGb2N1cykge1xuICAgICAgICBzZXRBdHRyaWJ1dGUoc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogMCk7XG4gICAgICB9XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAodmlzaWJsZSAhPT0gaGFzQ2xhc3Moc2xpZGUsIENMQVNTX1ZJU0lCTEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSkge1xuICAgICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfVklTSUJMRSwgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc2libGUpO1xuICAgICAgICBlbWl0KHZpc2libGUgPyBFVkVOVF9WSVNJQkxFIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX0hJRERFTiwgc2VsZik7XG4gICAgICB9XG5cbiAgICAgIGlmICghdmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2libGUgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gc2xpZGUpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBTbGlkZTIgPSBDb21wb25lbnRzLlNsaWRlcy5nZXRBdChTcGxpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pbmRleCk7XG4gICAgICAgIFNsaWRlMiAmJiBmb2N1cyhTbGlkZTIuc2xpZGUpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHlsZSQxKHByb3AsIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSwgdXNlQ29udGFpbmVyKSB7XG4gICAgICBzdHlsZSh1c2VDb250YWluZXIgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnRhaW5lciB8fCBzbGlkZSwgcHJvcCwgdmFsdWUpO1xuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBpc0FjdGl2ZSgpIHtcbiAgICAgIHZhciBjdXJyID0gU3BsaWRlMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuaW5kZXg7XG4gICAgICByZXR1cm4gY3VyciA9PT0gaW5kZXggfHwgb3B0aW9ucy5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVTdGF0dXMgJiYgY3VyciA9PT0gc2xpZGVJbmRleDtcbiAgICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gaXNWaXNpYmxlKCkge1xuICAgICAgaWYgKFNwbGlkZTIuaXMoRkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREUpKSB7XG4gICAgICAgIHJldHVybiBpc0FjdGl2ZSgpO1xuICAgICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgdmFyIHRyYWNrUmVjdCA9IHJlY3QoQ29tcG9uZW50cy5FbGVtZW50cy50cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2spO1xuICAgICAgdmFyIHNsaWRlUmVjdCA9IHJlY3Qoc2xpZGUpO1xuICAgICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBsZWZ0ID0gcmVzb2x2ZSgibGVmdCIsIHRydWUpO1xuICAgICAgdmFyIHJpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHJlc29sdmUoInJpZ2h0IiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gZmxvb3IodHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrUmVjdFtsZWZ0XSkgPD0gY2VpbChzbGlkZVJlY3RbbGVmdF0pICYmIGZsb29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGlkZVJlY3RbcmlnaHRdKSA8PSBjZWlsKHRyYWNrUmVjdFtyaWdodF0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgICBmdW5jdGlvbiBpc1dpdGhpbihmcm9tLCBkaXN0YW5jZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBkaWZmID0gYWJzKGZyb20gLSBpbmRleCk7XG5cbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAoIWlzQ2xvbmUgJiYgKG9wdGlvbnMucmV3aW5kIHx8IFNwbGlkZTIuaXMoTE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT1ApKSkge1xuICAgICAgICBkaWZmID0gbWluKGRpZmYsIFNwbGlkZTIubGVuZ3RoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIGRpZmYpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGlmZiA8PSBkaXN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY2U7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB7XG4gICAgICBpbmRleDogaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4LFxuICAgICAgc2xpZGVJbmRleDogc2xpZGVJbmRleCxcbiAgICAgIHNsaWRlOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUsXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIGlzQ2xvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpc0Nsb25lLFxuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3ksXG4gICAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICAgIHN0eWxlOiBzdHlsZSQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMSxcbiAgICAgIGlzV2l0aGluOiBpc1dpdGhpblxuICAgIH07XG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBzZWxmO1xuICB9XG5cbiAgZnVuY3Rpb24gU2xpZGVzKFNwbGlkZTIsIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2UyID0gRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9IF9FdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UyLm9uLFxuICAgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMi5lbWl0LFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTIuYmluZDtcblxuICAgIHZhciBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyJEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbWVudHMsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzbGlkZXMgPSBfQ29tcG9uZW50czIkRWxlbWVudHMuc2xpZGVzLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZW50cy5saXN0O1xuICAgIHZhciBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzMiA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pdCgpO1xuICAgICAgb24oRVZFTlRfUkVGUkVTSCwgZGVzdHJveSk7XG4gICAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24oRVZFTlRfUkVGUkVTSCwgaW5pdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXQoKSB7XG4gICAgICBzbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoc2xpZGUsIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCkge1xuICAgICAgICByZWdpc3RlcihzbGlkZSwgaW5kZXgsIC0xKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIFNsaWRlMi5kZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSgpO1xuICAgICAgfSk7XG4gICAgICBlbXB0eShTbGlkZXMyKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgZm9yRWFjaCQxKGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIFNsaWRlMi51cGRhdGUoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdpc3RlcihzbGlkZSwgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4LCBzbGlkZUluZGV4KSB7XG4gICAgICB2YXIgb2JqZWN0ID0gU2xpZGUkMShTcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMiwgaW5kZXgsIHNsaWRlSW5kZXgsIHNsaWRlKTtcbiAgICAgIG9iamVjdC5tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKTtcbiAgICAgIFNsaWRlczIucHVzaChvYmplY3QpO1xuICAgICAgU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIuc29ydChmdW5jdGlvbiAoU2xpZGUxLCBTbGlkZTIpIHtcbiAgICAgICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBTbGlkZTEuaW5kZXggLSBTbGlkZTIuaW5kZXg7XG4gICAgICB9KTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gZ2V0KGV4Y2x1ZGVDbG9uZXMpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gZXhjbHVkZUNsb25lcyA/IGZpbHRlcihmdW5jdGlvbiAoU2xpZGUyKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgICByZXR1cm4gIVNsaWRlMi5pc0Nsb25lO1xuICAgICAgfSkgOiBTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJbihwYWdlKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbmRleCA9IENvbnRyb2xsZXIudG9JbmRleChwYWdlKTtcbiAgICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbWF4ID0gQ29udHJvbGxlci5oYXNGb2N1cygpID8gMSA6IG9wdGlvbnMucGVyUGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2U7XG4gICAgICByZXR1cm4gZmlsdGVyKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBiZXR3ZWVuKFNsaWRlMi5pbmRleCwgaW5kZXgsIGluZGV4ICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21heCAtIDEpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGluZGV4KSB7XG4gICAgICByZXR1cm4gZmlsdGVyKGluZGV4KVswXTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgZnVuY3Rpb24gYWRkKGl0ZW1zLCBpbmRleCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2goaXRlbXMsIGZ1bmN0aW9uIChzbGlkZSkge1xuICAgICAgICBpZiAoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3RyaW5nKHNsaWRlKSkge1xuICAgICAgICAgIHNsaWRlID0gcGFyc2VIdG1sKHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChzbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUpKSB7XG4gICAgICAgICAgdmFyIHJlZiA9IHNsaWRlc1tpbmRleF07XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJlZiA/IGJlZm9yZShzbGlkZSwgcmVmKSA6IGFwcGVuZChsaXN0LCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUpO1xuICAgICAgICAgIGFkZENsYXNzKHNsaWRlLCBvcHRpb25zLmNsYXNzZXMucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlKTtcbiAgICAgICAgICBvYnNlcnZlSW1hZ2VzKHNsaWRlLCBhcHBseShlbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgRVZFTlRfUkVTSVpFKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtaXQoRVZFTlRfUkVGUkVTSCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZSQxKG1hdGNoZXIpIHtcbiAgICAgIHJlbW92ZShmaWx0ZXIobWF0Y2hlcikubWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncChmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIHJldHVybiBTbGlkZTIuc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuICAgICAgfSkpO1xuICAgICAgZW1pdChFVkVOVF9SRUZSRVNIKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gZm9yRWFjaCQxKGl0ZXJhdGVlLCBleGNsdWRlQ2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcykge1xuICAgICAgZ2V0KGV4Y2x1ZGVDbG9uZXMpLmZvckVhY2goaXRlcmF0ZWUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXIobWF0Y2hlcikge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBTbGlkZXMyLmZpbHRlcihpc0Z1bmN0aW9uKG1hdGNoZXIpID8gbWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoZXIgOiBmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICAgIHJldHVybiBpc1N0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcobWF0Y2hlcikgPyBtYXRjaGVzKFNsaWRlMi5zbGlkZSwgbWF0Y2hlcikgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jbHVkZXModG9BcnJheShtYXRjaGVyKSwgU2xpZGUyLmluZGV4KTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHlsZShwcm9wLCB2YWx1ZSwgdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZUNvbnRhaW5lcikge1xuICAgICAgZm9yRWFjaCQxKGZ1bmN0aW9uIChTbGlkZTIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgIFNsaWRlMi5zdHlsZShwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvYnNlcnZlSW1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlcyhlbG0sIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgaW1hZ2VzID0gcXVlcnlBbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGVsbSwgImltZyIpO1xuICAgICAgdmFyIGxlbmd0aCA9IGltYWdlcy5sZW5ndGg7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgIGltYWdlcy5mb3JFYWNoKGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAoaW1nKSB7XG4gICAgICAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghIC0tbGVuZ3RoKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRMZW5ndGgoZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2x1ZGVDbG9uZXMpIHtcbiAgICAgIHJldHVybiBleGNsdWRlQ2xvbmVzID8gc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcy5sZW5ndGggOiBTbGlkZXMyLmxlbmd0aDtcbiAgICB9XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gaXNFbm91Z2goKSB7XG4gICAgICByZXR1cm4gU2xpZGVzMi5sZW5ndGggPiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5wZXJQYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICAgIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHVwZGF0ZSxcbiAgICAgIHJlZ2lzdGVyOiByZWdpc3RlcixcbiAgICAgIGdldDogZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldCxcbiAgICAgIGdldEluOiBnZXRJbixcbiAgICAgIGdldEF0OiBnZXRBdCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBhZGQ6IGFkZCxcbiAgICAgIHJlbW92ZTogcmVtb3ZlJDEsXG4gICAgICBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaDogZm9yRWFjaCQxLFxuICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGU6IHN0eWxlLFxuICAgICAgZ2V0TGVuZ3RoOiBnZXRMZW5ndGgsXG4gICAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbm91Z2g6IGlzRW5vdWdoXG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIExheW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXQoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX0V2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEludGVyZmFjZTMgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uID0gX0V2ZW50SW50ZXJmYWNlMy5vbixcbiAgICAgICAgYmluZCA9IF9FdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UzLmJpbmQsXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0O1xuXG4gICAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcztcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlY3Rpb24ucmVzb2x2ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIF9Db21wb25lbnRzMiRFbGVtZW50czIgPSBDb21wb25lbnRzMi5FbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMsXG4gICAgICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290LFxuICAgICAgICB0cmFjayA9IF9Db21wb25lbnRzMiRFbGVtZW50czIudHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMi5saXN0O1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgZ2V0QXQgPSBTbGlkZXMuZ2V0QXQsXG4gICAgICAgIHN0eWxlU2xpZGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IFNsaWRlcy5zdHlsZTtcbiAgICB2YXIgdmVydGljYWw7XG4gICAgdmFyIHJvb3RSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdDtcbiAgICB2YXIgb3ZlcmZsb3c7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBpbml0KCk7XG4gICAgICBiaW5kKHdpbmRvdywgInJlc2l6ZSBsb2FkIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIFRocm90dGxlKGFwcGx5KGVtaXQsIEVWRU5UX1JFU0laRSkpKTtcbiAgICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhbRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSF0sIGluaXQpO1xuICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEVWRU5UX1JFU0laRSwgcmVzaXplKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5pdCgpIHtcbiAgICAgIHZlcnRpY2FsID0gb3B0aW9ucy5kaXJlY3Rpb24gPT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUVEI7XG4gICAgICBzdHlsZShyb290LCAibWF4V2lkdGgiLCB1bml0KG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dpZHRoKSk7XG4gICAgICBzdHlsZSh0cmFjaywgcmVzb2x2ZSgicGFkZGluZ0xlZnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiksIGNzc1BhZGRpbmcoZmFsc2UpKTtcbiAgICAgIHN0eWxlKHRyYWNrLCByZXNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZSgicGFkZGluZ1JpZ2h0IiksIGNzc1BhZGRpbmcodHJ1ZSkpO1xuICAgICAgcmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZSh0cnVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZXNpemUoZm9yY2UpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB2YXIgbmV3UmVjdCA9IHJlY3Qocm9vdCk7XG5cbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoZm9yY2UgfHwgcm9vdFJlY3Qud2lkdGggIT09IG5ld1JlY3Qud2lkdGggfHwgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3RSZWN0LmhlaWdodCAhPT0gbmV3UmVjdC5oZWlnaHQpIHtcbiAgICAgICAgc3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlKHRyYWNrLCAiaGVpZ2h0IiwgY3NzVHJhY2tIZWlnaHQoKSk7XG4gICAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZVNsaWRlcyhyZXNvbHZlKCJtYXJnaW5SaWdodCIpLCB1bml0KG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCkpO1xuICAgICAgICBzdHlsZVNsaWRlcygid2lkdGgiLCBjc3NTbGlkZVdpZHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCgpKTtcbiAgICAgICAgc3R5bGVTbGlkZXMoImhlaWdodCIsIGNzc1NsaWRlSGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodCgpLCB0cnVlKTtcbiAgICAgICAgcm9vdFJlY3QgPSBuZXdSZWN0O1xuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZW1pdChFVkVOVF9SRVNJWkVEKTtcblxuICAgICAgICBpZiAob3ZlcmZsb3cgIT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicob3ZlcmZsb3cgPSBpc092ZXJmbG93KCkpKSB7XG4gICAgICAgICAgdG9nZ2xlQ2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzKHJvb3QsIENMQVNTX09WRVJGTE9XLCBvdmVyZmxvdyk7XG4gICAgICAgICAgZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQoRVZFTlRfT1ZFUkZMT1csIG92ZXJmbG93KTtcbiAgICAgICAgfVxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjc3NQYWRkaW5nKHJpZ2h0KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgdmFyIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7XG4gICAgICB2YXIgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3AgPSByZXNvbHZlKHJpZ2h0ID8gInJpZ2h0IiA6ICJsZWZ0Iik7XG4gICAgICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHBhZGRpbmcgJiYgdW5pdChwYWRkaW5nW3Byb3BdIHx8IChpc09iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocGFkZGluZykgPyAwIDogcGFkZGluZykpIHx8ICIwcHgiO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBmdW5jdGlvbiBjc3NUcmFja0hlaWdodCgpIHtcbiAgICAgIHZhciBoZWlnaHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gIiI7XG5cbiAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICBoZWlnaHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY3NzSGVpZ2h0KCk7XG4gICAgICAgIGFzc2VydChoZWlnaHQsICJoZWlnaHQgb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGhlaWdodFJhdGlvIGlzIG1pc3NpbmcuIik7XG4gICAgICAgIGhlaWdodCA9ICJjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYygiICsgaGVpZ2h0ICsgIiAtICIgKyBjc3NQYWRkaW5nKGZhbHNlKSArICIgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiArIGNzc1BhZGRpbmcodHJ1ZSkgKyAiKSI7XG4gICAgICB9XG5cbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gaGVpZ2h0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNzc0hlaWdodCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICByZXR1cm4gdW5pdChvcHRpb25zLmhlaWdodCB8fCByZWN0KGxpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KS53aWR0aCAqIG9wdGlvbnMuaGVpZ2h0UmF0aW8pO1xuICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBjc3NTbGlkZVdpZHRoKCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1dG9XaWR0aCA/IG51bGwgOiB1bml0KG9wdGlvbnMuZml4ZWRXaWR0aCkgfHwgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXJ0aWNhbCA/ICIiIDogY3NzU2xpZGVTaXplKCkpO1xuICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBjc3NTbGlkZUhlaWdodCgpIHtcbiAgICAgIHJldHVybiB1bml0KG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmZpeGVkSGVpZ2h0KSB8fCAodmVydGljYWwgPyBvcHRpb25zLmF1dG9IZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0ID8gbnVsbCA6IGNzc1NsaWRlU2l6ZSgpIDogY3NzSGVpZ2h0KCkpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBjc3NTbGlkZVNpemUoKSB7XG4gICAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCA9IHVuaXQob3B0aW9ucy5nYXApO1xuICAgICAgcmV0dXJuICJjYWxjKCgxMDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJSIgKyAoZ2FwICYmICIgKyAiICsgZ2FwKSArICIpLyIgKyAob3B0aW9ucy5wZXJQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSB8fCAxKSArIChnYXAgJiYgIiAtICIgKyBnYXApICsgIikiO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBmdW5jdGlvbiBsaXN0U2l6ZSgpIHtcbiAgICAgIHJldHVybiByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdChsaXN0KVtyZXNvbHZlKCJ3aWR0aCIpXTtcbiAgICB9XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc2xpZGVTaXplKGluZGV4LCB3aXRob3V0R2FwKSB7XG4gICAgICB2YXIgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlID0gZ2V0QXQoaW5kZXggfHwgMCk7XG4gICAgICByZXR1cm4gU2xpZGUgPyByZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChTbGlkZS5zbGlkZSlbcmVzb2x2ZSgid2lkdGgiKV0gKyAod2l0aG91dEdhcCA/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAwIDogZ2V0R2FwKCkpIDogMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b3RhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xTaXplKGluZGV4LCB3aXRob3V0R2FwKSB7XG4gICAgICB2YXIgU2xpZGUgPSBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXQoaW5kZXgpO1xuXG4gICAgICBpZiAoU2xpZGUpIHtcbiAgICAgICAgdmFyIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCA9IHJlY3QoU2xpZGUuc2xpZGUpW3Jlc29sdmUoInJpZ2h0IildO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGxlZnQgPSByZWN0KGxpc3QpW3Jlc29sdmUoImxlZnQiKV07XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gYWJzKHJpZ2h0IC0gbGVmdCkgKyAod2l0aG91dEdhcCA/IDAgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0R2FwKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZnVuY3Rpb24gc2xpZGVyU2l6ZSh3aXRob3V0R2FwKSB7XG4gICAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHRvdGFsU2l6ZShTcGxpZGUyLmxlbmd0aCAtIDEpIC0gdG90YWxTaXplKDApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrIHNsaWRlU2l6ZSgwLCB3aXRob3V0R2FwKTtcbiAgICB9XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZ2V0R2FwKCkge1xuICAgICAgdmFyIFNsaWRlID0gZ2V0QXQoMCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIFNsaWRlICYmIHBhcnNlRmxvYXQoc3R5bGUoU2xpZGUuc2xpZGUsIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNvbHZlKCJtYXJnaW5SaWdodCIpKSkgfHwgMDtcbiAgICB9XG5cbiAgICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZ2V0UGFkZGluZyhyaWdodCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KHN0eWxlKHRyYWNrLCByZXNvbHZlKCJwYWRkaW5nIiArIChyaWdodCA/ICJSaWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHQiIDogIkxlZnQiKSkpKSB8fCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc092ZXJmbG93KCkge1xuICAgICAgcmV0dXJuIFNwbGlkZTIuaXMoRkFERSkgfHwgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlclNpemUodHJ1ZSkgPiBsaXN0U2l6ZSgpO1xuICAgIH1cblxuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgcmVzaXplOiByZXNpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3plLFxuICAgICAgbGlzdFNpemU6IGxpc3RTaXplLFxuICAgICAgc2xpZGVTaXplOiBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVTaXplLFxuICAgICAgc2xpZGVyU2l6ZTogc2xpZGVyU2l6ZSxcbiAgICAgIHRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhbFNpemU6IHRvdGFsU2l6ZSxcbiAgICAgIGdldFBhZGRpbmc6IGdldFBhZGRpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgaXNPdmVyZmxvdzogaXNPdmVyZmxvd1xuICAgIH07XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIE1VTFRJUExJRVIgPSAyO1xuXG4gIGZ1bmN0aW9uIENsb25lcyhTcGxpZGUyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXZlbnQgPSBFdmVudEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcmZhY2UoU3BsaWRlMik7XG4gICAgdmFyIG9uID0gZXZlbnQub247XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgICBTbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQ29tcG9uZW50czIuU2xpZGVzO1xuICAgIHZhciByZXNvbHZlID0gQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICAgIHZhciBjbG9uZXMgPSBbXTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGNsb25lQ291bnQ7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihFVkVOVF9SRUZSRVNILCByZW1vdW50KTtcbiAgICAgIG9uKFtFVkVOVF9VJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BEQVRFRCwgRVZFTlRfUkVTSVpFXSwgb2JzZXJ2ZSk7XG5cbiAgICAgIGlmIChjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50KCkpIHtcbiAgICAgICAgZ2VuZXJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNsb25lQ291bnQpO1xuICAgICAgICBDb21wb25lbnRzMi5MYXlvdXQucmVzaXplKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGRlc3Ryb3koKTtcbiAgICAgIG1vdW50KCk7XG4gICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICByZW1vdmUoY2xvbmVzKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbXB0eShjbG9uZXMpO1xuICAgICAgZXZlbnQuZGVzdHJveSgpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvYnNlcnZlKCkge1xuICAgICAgdmFyIGNvdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGNvbXB1dGVDbG9uZUNvdW50KCk7XG5cbiAgICAgIGlmIChjbG9uZUNvdW50ICE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY291bnQpIHtcbiAgICAgICAgaWYgKGNsb25lQ291bnQgPCBjb3VudCB8fCAhY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50KSB7XG4gICAgICAgICAgZXZlbnQuZW1pdChFVkVOVF9SRUZSRVNIKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZShjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQpIHtcbiAgICAgIHZhciBzbGlkZXMgPSBTbGlkZXMuZ2V0KCkuc2xpY2UoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB2YXIgbGVuZ3RoID0gc2xpZGVzLmxlbmd0aDtcblxuICAgICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChsZW5ndGgpIHtcbiAgICAgICAgd2hpbGUgKHNsaWRlcy5sZW5ndGggPCBjb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgICAgICBwdXNoKHNsaWRlcywgc2xpZGVzKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgICAgICBwdXNoKHNsaWRlcy5zbGljZSgtY291bnQpLCBzbGlkZXMuc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKDAsIGNvdW50KSkuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUsIGluZGV4KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIHZhciBpc0hlYWQgPSBpbmRleCA8IGNvdW50O1xuICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgY2xvbmUgPSBjbG9uZURlZXAoU2xpZGUuc2xpZGUsIGluZGV4KTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaXNIZWFkID8gYmVmb3JlKGNsb25lLCBzbGlkZXNbMF0uc2xpZGUpIDogYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVuZChFbGVtZW50cy5saXN0LCBjbG9uZSk7XG4gICAgICAgICAgcHVzaChjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLCBjbG9uZSk7XG4gICAgICAgICAgU2xpZGVzLnJlZ2lzdGVyKGNsb25lLCBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggLSBjb3VudCArIChpc0hlYWQgPyAwIDogbGVuZ3RoKSwgU2xpZGUuaW5kZXgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lRGVlcChlbG0sIGluZGV4KSB7XG4gICAgICB2YXIgY2xvbmUgPSBlbG0uY2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlTm9kZSh0cnVlKTtcbiAgICAgIGFkZENsYXNzKGNsb25lLCBvcHRpb25zLmNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmNsb25lKTtcbiAgICAgIGNsb25lLmlkID0gU3BsaWRlMi5yb290LmlkICsgIi0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xvbmUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAgICByZXR1cm4gY2xvbmU7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW50KCkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBjbG9uZXMyID0gb3B0aW9ucy5jbG9uZXM7XG5cbiAgICAgIGlmICghU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuaXMoTE9PUCkpIHtcbiAgICAgICAgY2xvbmVzMiA9IDA7XG4gICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChpc1VuZGVmaW5lZChjbG9uZXMyKSkge1xuICAgICAgICB2YXIgZml4ZWRTaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSA9IG9wdGlvbnNbcmVzb2x2ZSgiZml4ZWRXaWR0aCIpXSAmJiBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInczIuTGF5b3V0LnNsaWRlU2l6ZSgwKTtcbiAgICAgICAgdmFyIGZpeGVkQ291bnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZml4ZWRTaXplICYmIGNlaWwocmVjdChFbGVtZW50cy50cmFjaylbcmVzb2x2ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIndpZHRoIildIC8gZml4ZWRTaXplKTtcbiAgICAgICAgY2xvbmVzMiA9IGZpeGVkQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50IHx8IG9wdGlvbnNbcmVzb2x2ZSgiYXV0b1dpZHRoIildICYmIFNwbGlkZTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmxlbmd0aCB8fCBvcHRpb25zLnBlclBhZ2UgKiBNVUxUSVBMSUVSO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgcmV0dXJuIGNsb25lczI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXN0cm95XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiBNb3ZlKFNwbGlkZTIsIENvbXBvbmVudHMyLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2U0ID0gRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9IF9FdmVudEludGVyZmFjZTQub24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlNC5lbWl0O1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBzZXQgPSBTcGxpZGUyLnN0YXRlLnNldDtcbiAgICB2YXIgX0NvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzMiRMYXlvdXQgPSBDb21wb25lbnRzMi5MYXlvdXQsXG4gICAgICAgIHNsaWRlU2l6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSBfQ29tcG9uZW50czIkTGF5b3V0LnNsaWRlU2l6ZSxcbiAgICAgICAgZ2V0UGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGRpbmcgPSBfQ29tcG9uZW50czIkTGF5b3V0LmdldFBhZGRpbmcsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3RhbFNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnRvdGFsU2l6ZSxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGxpc3RTaXplID0gX0NvbXBvbmVudHMyJExheW91dC5saXN0U2l6ZSxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNsaWRlclNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnNsaWRlclNpemU7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHZhciBfQ29tcG9uZW50czIkRGlyZWN0aW8gPSBDb21wb25lbnRzMi5EaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0aW9uLFxuICAgICAgICByZXNvbHZlID0gX0NvbXBvbmVudHMyJERpcmVjdGlvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXNvbHZlLFxuICAgICAgICBvcmllbnQgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yaWVudDtcbiAgICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzMyA9IENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMi5FbGVtZW50cyxcbiAgICAgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMzLmxpc3QsXG4gICAgICAgIHRyYWNrID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMudHJhY2s7XG4gICAgdmFyIFRyYW5zaXRpb247XG5cbiAgICBmdW5jdGlvbiBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKSB7XG4gICAgICBUcmFuc2l0aW9uID0gQ29tcG9uZW50czIuVHJhbnNpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb247XG4gICAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVTSVpFRCwgRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCByZXBvc2l0aW9uKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgZnVuY3Rpb24gcmVwb3NpdGlvbigpIHtcbiAgICAgIGlmICghQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLkNvbnRyb2xsZXIuaXNCdXN5KCkpIHtcbiAgICAgICAgQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyLlNjcm9sbC5jYW5jZWwoKTtcbiAgICAgICAganVtcChTcGxpZGUyLmluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICAgIENvbXBvbmVudHMyLlNsaWRlcy51cGRhdGUoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZShkZXN0LCBpbmRleCwgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXYsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoZGVzdCAhPT0gaW5kZXggJiYgY2FuUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaWZ0KGRlc3QgPiBwcmV2KSkge1xuICAgICAgICBjYW5jZWwoKTtcbiAgICAgICAgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zbGF0ZShzaGlmdChnZXRQb3NpdGlvbigpLCBkZXN0ID4gcHJldiksIHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIH1cblxuICAgICAgc2V0KE1PVklORyk7XG4gICAgICBlbWl0KEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9NT1ZFLCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgICBUcmFuc2l0aW9uLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydChpbmRleCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXQoSURMRSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBlbWl0KEVWRU5UX01PVkVELCBpbmRleCwgcHJldiwgZGVzdCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGZ1bmN0aW9uIGp1bXAoaW5kZXgpIHtcbiAgICAgIHRyYW5zbGF0ZSh0b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihpbmRleCwgdHJ1ZSkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc2xhdGUocG9zaXRpb24sIHByZXZlbnRMb29wKSB7XG4gICAgICBpZiAoIVNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLmlzKEZBREUpKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHByZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTG9vcCA/IHBvc2l0aW9uIDogbG9vcChwb3NpdGlvbik7XG4gICAgICAgIHN0eWxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0LCAidHJhbnNmb3JtIiwgInRyYW5zbGF0ZSIgKyByZXNvbHZlKCJYIikgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIigiICsgZGVzdGluYXRpb24gKyAicHgpIik7XG4gICAgICAgIHBvc2l0aW9uICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdGluYXRpb24gJiYgZW1pdChFVkVOVF9TSElGVEVEKTtcbiAgICAgIH1cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gbG9vcChwb3NpdGlvbikge1xuICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUyLmlzKExPT1ApKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHRvSW5kZXgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uKTtcbiAgICAgICAgdmFyIGV4Y2VlZGVkTWF4ID0gaW5kZXggPiBDb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50czIuQ29udHJvbGxlci5nZXRFbmQoKTtcbiAgICAgICAgdmFyIGV4Y2VlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZE1pbiA9IGluZGV4IDwgMDtcblxuICAgICAgICBpZiAoZXhjZWVkZWRNaW4gfHwgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4Y2VlZGVkTWF4KSB7XG4gICAgICAgICAgcG9zaXRpb24gPSBzaGlmdChwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24sIGV4Y2VlZGVkTWF4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNoaWZ0KHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiwgYmFja3dhcmRzKSB7XG4gICAgICB2YXIgZXhjZXNzID0gcG9zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gZ2V0TGltaXQoYmFja3dhcmRzKTtcbiAgICAgIHZhciBzaXplID0gc2xpZGVyU2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInemUoKTtcbiAgICAgIHBvc2l0aW9uIC09IG9yaWVudChzaXplICogKGNlaWwoYWJzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleGNlc3MpIC8gc2l6ZSkgfHwgMSkpICogKGJhY2t3YXJkcyA/IDEgOiAtMSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZWwoKSB7XG4gICAgICB0cmFuc2xhdGUoZ2V0UG9zaXRpb24oKSwgdHJ1ZSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgVHJhbnNpdGlvbi5jYW5jZWwoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdG9JbmRleChwb3NpdGlvbikge1xuICAgICAgdmFyIFNsaWRlcyA9IENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMi5TbGlkZXMuZ2V0KCk7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGkgPCBTbGlkZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHNsaWRlSW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ID0gU2xpZGVzW2ldLmluZGV4O1xuICAgICAgICB2YXIgZGlzdGFuY2UgPSBhYnMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvUG9zaXRpb24oc2xpZGVJbmRleCwgdHJ1ZSkgLSBwb3NpdGlvbik7XG5cbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmIChkaXN0YW5jZSA8PSBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgIG1pbkQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgIGluZGV4ID0gc2xpZGVJbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdG9Qb3NpdGlvbihpbmRleCwgdHJpbW1pbmcpIHtcbiAgICAgIHZhciBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24gPSBvcmllbnQodG90YWxTaXplKGluZGV4IC0gMSkgLSBvZmZzZXQoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KSk7XG4gICAgICByZXR1cm4gdHJpbW1pbmcgPyB0cmltKHBvc2l0aW9uKSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQb3NpdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICB2YXIgbGVmdCA9IHJlc29sdmUoImxlZnQiKTtcbiAgICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gcmVjdChsaXN0KVtsZWZ0XSAtIHJlY3QodHJhY2spW2xlZnRdICsgb3JpZW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRQYWRkaW5nKGZhbHNlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdHJpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocG9zaXRpb24pIHtcbiAgICAgIGlmIChvcHRpb25zLnRyaW1TcGFjZSAmJiBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMi5pcyhTTElERSkpIHtcbiAgICAgICAgcG9zaXRpb24gPSBjbGFtcChwb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24sIDAsIG9yaWVudChzbGlkZXJTaXplKHRydWUpIC0gbGlzdFNpemUoKSkpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIH1cblxuICAgICAgcmV0dXJuIHBvc2l0aW9uO1xuICAgIH1cblxuICAgIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBvZmZzZXQoaW5kZXgpIHtcbiAgICAgIHZhciBmb2N1cyA9IG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmZvY3VzO1xuICAgICAgcmV0dXJuIGZvY3VzID09PSAiY2VudGVyIiA/IChsaXN0UycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpemUoKSAtIHNsaWRlU2l6ZShpbmRleCwgdHJ1ZSkpIC8gMiA6ICtmb2N1cyAqIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVNpemUoaW5kZXgpIHx8IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndExpbWl0KG1heCkge1xuICAgICAgcmV0dXJuIHRvUG9zaXRpb24obWF4ID8gQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMyLkNvbnRyb2xsZXIuZ2V0RW5kKCkgOiAwLCAhIW9wdGlvbnMudHJpbVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFjZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuU2hpZnQoYmFja3dhcmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncykge1xuICAgICAgdmFyIHNoaWZ0ZWQgPSBvcmllbnQoc2hpZnQoZ2V0UG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCksIGJhY2t3YXJkcykpO1xuICAgICAgcmV0dXJuIGJhY2t3YXJkcyA/IHNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkID49IDAgOiBzaGlmdGVkIDw9IGxpc3RbcmVzb2x2ZSgic2Nyb2xsV2lkdGgiKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddIC0gcmVjdCh0cmFjaylbcmVzb2x2ZSgid2lkdGgiKV07XG4gICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGV4Y2VlZGVkTGltaXQobWF4LCBwb3NpdGlvbikge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uID0gaXNVbmRlZmluZWQocG9zaXRpb24pID8gZ2V0UG9zaXRpb24oKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBwb3NpdGlvbjtcbiAgICAgIHZhciBleGNlZWRlZE1pbiA9IG1heCAhPT0gdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgJiYgb3JpZW50KHBvc2l0aW9uKSA8IG9yaWVudChnZXRMaW1pdChmYWxzZSkpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBleGNlZWRlZE1heCA9IG1heCAhPT0gZmFsc2UgJiYgb3JpZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhwb3NpdGlvbikgPiBvcmllbnQoZ2V0TGltaXQodHJ1ZSkpO1xuICAgICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBleGNlZWRlZE1pbiB8fCBleGNlZWRlZE1heDtcbiAgICB9XG5cbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIG1vdmU6IG1vdmUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAganVtcDoganVtcCxcbiAgICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNoaWZ0OiBzaGlmdCxcbiAgICAgIGNhbmNlbDogY2FuY2VsLFxuICAgICAgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXg6IHRvSW5kZXgsXG4gICAgICB0b1Bvc2l0aW9uOiB0b1Bvc2l0aW9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGdldFBvc2l0aW9uOiBnZXRQb3NpdGlvbixcbiAgICAgIGdldExpbWl0OiBnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0TGltaXQsXG4gICAgICBleGNlZWRlZExpbWl0OiBleGNlZWRlZExpbWl0LFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJlcG9zaXRpb246IHJlcG9zaXRpb25cbiAgICB9O1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIENvbnRyb2xsZXIoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIF9FdmVudEludGVyZmFjZTUgPSBFdmVudEludGVyZmFjZShTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNS5vbixcbiAgICAgICAgZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQgPSBfRXZlbnRJbnRlcmZhY2U1LmVtaXQ7XG5cbiAgICB2YXIgTW92ZSA9IENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzMi5Nb3ZlO1xuICAgIHZhciBnZXRQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLFxuICAgICAgICBnZXRMaW1pdCA9IE1vdmUuZ2V0TGltaXQsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b1Bvc2l0aW9uID0gTW92ZS50b1Bvc2l0aW9uO1xuICAgIHZhciBfQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MyJFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcyxcbiAgICAgICAgaXNFbm91Z2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX0NvbXBvbmVudHMyJFNsaWRlcy5pc0Vub3VnaCxcbiAgICAgICAgZ2V0TGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aCA9IF9Db21wb25lbnRzMiRTbGlkZXMuZ2V0TGVuZ3RoO1xuICAgIHZhciBvbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VuZCA9IG9wdGlvbnMub21pdEVuZDtcbiAgICB2YXIgaXNMb29wID0gU3BsaWRlMi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoTE9PUCk7XG4gICAgdmFyIGlzU2xpZGUgPSBTcGxpZGUyLmlzKFNMSURFKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIGdldE5leHQgPSBhcHBseShnZXRBZGphY2VudCwgZmFsc2UpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgZ2V0UHJldiA9IGFwcGx5KGdldEFkamFjZW50LCB0cnVlKTtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cnJJbmRleCA9IG9wdGlvbnMuc3RhcnQgfHwgMDtcbiAgICB2YXIgZW5kSW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHZhciBwcmV2SW5kZXggPSBjdXJySW5kZXg7XG4gICAgdmFyIHNsaWRlQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50O1xuICAgIHZhciBwZXJNb3ZlO1xuICAgIHZhciBwZXJQYWdlO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIG1vdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgb24oW0VWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19VUERBVEVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddLCBpbml0KTtcbiAgICAgIG9uKEVWRU5UX1JFU0laRUQsIG9uUmVzaXplZCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICBzbGlkZUNvdW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGdldExlbmd0aCh0cnVlKTtcbiAgICAgIHBlck1vdmUgPSBvcHRpb25zLnBlck1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlO1xuICAgICAgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZTtcbiAgICAgIGVuZEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCA9IGdldEVuZCgpO1xuICAgICAgdmFyIGluZGV4ID0gY2xhbXAoY3VyckluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCwgMCwgb21pdEVuZCA/IGVuZEluZGV4IDogc2xpZGVDb3VudCAtIDEpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKGluZGV4ICE9PSBjdXJySW5kZXgpIHtcbiAgICAgICAgY3VyckluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGluZGV4O1xuICAgICAgICBNb3ZlLnJlcG9zaXRpb24oKTtcbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgZnVuY3Rpb24gb25SZXNpemVkKCkge1xuICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRJbmRleCAhPT0gZ2V0RW5kKCkpIHtcbiAgICAgICAgZW1pdChFVkVOVF9FTkRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lOREVYX0NIQU5HRUQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnbyhjb250cm9sLCBhbGxvd1NhbWVJbmRleCwgY2FsbGJhY2spIHtcbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoIWlzQnVzeSgpKSB7XG4gICAgICAgIHZhciBkZXN0ID0gcGFyc2UoY29udHJvbCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB2YXIgaW5kZXggPSBsb29wKGRlc3QpO1xuXG4gICAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaW5kZXggPiAtMSAmJiAoYWxsb3dTYW1lSW5kZXggfHwgaW5kZXggIT09IGN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JySW5kZXgpKSB7XG4gICAgICAgICAgc2V0SW5kZXgoaW5kZXgpO1xuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBNb3ZlLm1vdmUoZGVzdCwgaW5kZXgsIHByZXZJbmRleCwgY2FsbGJhY2spO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNjcm9sbChkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCBjYWxsYmFjaykge1xuICAgICAgQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLlNjcm9sbC5zY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hcCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5kZXggPSBsb29wKE1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnRvSW5kZXgoZ2V0UG9zaXRpb24oKSkpO1xuICAgICAgICBzZXRJbmRleChvbWl0RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCA/IG1pbihpbmRleCwgZW5kSW5kZXgpIDogaW5kZXgpO1xuICAgICAgICBjYWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBwYXJzZShjb250cm9sKSB7XG4gICAgICB2YXIgaW5kZXggPSBjdXJySW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4O1xuXG4gICAgICBpZiAoaXNTdHJpbmcoY29udHJvbCkpIHtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBfcmVmID0gY29udHJvbC5tYXRjaCgvKFsrXFwtPD5dKShcXGQrKT8vKSB8fCBbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10sXG4gICAgICAgICAgICBpbmRpY2F0b3IgPSBfcmVmWzFdLFxuICAgICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciA9IF9yZWZbMl07XG5cbiAgICAgICAgaWYgKGluZGljYXRvciA9PT0gIisiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCBpbmRpY2F0b3IgPT09ICItIikge1xuICAgICAgICAgIGluZGV4ID0gY29tcHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVEZXN0SW5kZXgoY3VyckluZGV4ICsgKygiIiArIGluZGljYXRvciArICgrbnVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciB8fCAxKSksIGN1cnJJbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kaWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRvciA9PT0gIj4iKSB7XG4gICAgICAgICAgaW5kZXggPSBudW1iZXIgPyB0b0luZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCgrbnVtYmVyKSA6IGdldE5leHQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGljYXRvciA9PT0gIjwiKSB7XG4gICAgICAgICAgaW5kZXggPSBnZXRQcmV2KHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaXNMb29wID8gY29udHJvbCA6IGNsYW1wKGNvbnRyb2wsIDAsIGVuZEluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZ2V0QWRqYWNlbnQocHJldiwgZGVzdGluYXRpb24pIHtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgbnVtYmVyID0gcGVyTW92ZSB8fCAoaGFzRm9jdXMoKSA/IDEgOiBwZXJQYWdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB2YXIgZGVzdCA9IGNvbXB1dGVEZXN0SW5kZXgoY3VyckluZGV4ICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciAqIChwcmV2ID8gLTEgOiAxKSwgY3VyckluZGV4LCAhKHBlck1vdmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IGhhc0ZvY3VzKCkpKTtcblxuICAgICAgaWYgKGRlc3QgPT09IC0xICYmIGlzU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlKSB7XG4gICAgICAgIGlmICghYXBwcm94aW1hdGVseUVxdWFsKGdldFBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbigpLCBnZXRMaW1pdCghcHJldiksIDEpKSB7XG4gICAgICAgICAgcmV0dXJuIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ID8gMCA6IGVuZEluZGV4O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gZGVzdGluYXRpb24gPyBkZXN0IDogbG9vcChkZXN0KTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgZnVuY3Rpb24gY29tcHV0ZURlc3RJbmRleChkZXN0LCBmcm9tLCBzbmFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BhZ2UpIHtcbiAgICAgIGlmIChpc0Vub3VnaCgpIHx8IGhhc0ZvY3VzKCkpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHZhciBpbmRleCA9IGNvbXB1dGVNb3ZhYmxlRGVzdEluZGV4KGRlc3QpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgICBpZiAoaW5kZXggIT09IGRlc3QpIHtcbiAgICAgICAgICBmcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbSA9IGRlc3Q7XG4gICAgICAgICAgZGVzdCA9IGluZGV4O1xuICAgICAgICAgIHNuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwUGFnZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlc3QgPCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMCB8fCBkZXN0ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgICBpZiAoIXBlck1vdmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmIChiZXR3ZWVuKDAsIGRlc3QsIGZyb20sIHRydWUpIHx8IGJldHdlZW4oZW5kSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4LCBmcm9tLCBkZXN0LCB0cnVlKSkpIHtcbiAgICAgICAgICAgIGRlc3QgPSB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29JbmRleCh0b1BhZ2UoZGVzdCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaWYgKGlzTG9vcCkge1xuICAgICAgICAgICAgICBkZXN0ID0gc25hcFBhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID8gZGVzdCA8IDAgPyAtKHNsaWRlQ291bnQgJSBwZXJQYWdlIHx8IHBlclBhZ2UpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA6IHNsaWRlQ291bnQgOiBkZXN0O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5yZXdpbmQpIHtcbiAgICAgICAgICAgICAgZGVzdCA9IGRlc3QgPCAwID8gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZEluZGV4IDogMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0ID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc25hcFBhZ2UgJiYgZGVzdCAhPT0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20pIHtcbiAgICAgICAgICAgIGRlc3QgPSB0b0luZGV4KHRvUGFnZShmcm9tKSArICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA8IGZyb20gPyAtMSA6IDEpKTtcbiAgICAgICAgICB9XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXN0ID0gLTE7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gZGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZU1vdmFibGVEZXN0SW5kZXgoZGVzdCkge1xuICAgICAgaWYgKGlzU2xpZGUgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMudHJpbVNwYWNlID09PSAibW92ZSIgJiYgZGVzdCAhPT0gY3VyckluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCkge1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3NpdGlvbigpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgICB3aGlsZSAocG9zaXRpb24gPT09IHRvUG9zaXRpb24oZGVzdCwgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydWUpICYmIGJldHdlZW4oZGVzdCwgMCwgU3BsaWRlMi5sZW5ndGggLSAxLCAhb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMucmV3aW5kKSkge1xuICAgICAgICAgIGRlc3QgPCBjdXJySW5kZXggPyAtLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0IDogKytkZXN0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gZGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb29wKGluZGV4KSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmV0dXJuIGlzTG9vcCA/IChpbmRleCArIHNsaWRlQ291bnQpICUgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlQ291bnQgfHwgMCA6IGluZGV4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbmQoKSB7XG4gICAgICB2YXIgZW5kID0gc2xpZGVDb3VudCAtIChoYXNGb2N1cygpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCBpc0xvb3AgJiYgcGVyTW92ZSA/IDEgOiBwZXJQYWdlKTtcblxuICAgICAgd2hpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlIChvbWl0RW5kICYmIGVuZC0tID4gMCkge1xuICAgICAgICBpZiAodG9Qb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24oc2xpZGVDb3VudCAtIDEsIHRydWUpICE9PSB0b1Bvc2l0aW9uKGVuZCwgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpKSB7XG4gICAgICAgICAgZW5kKys7XG4gICAgICAgICAgYnJlYWs7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbGFtcChlbmQsIDAsIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUNvdW50IC0gMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbmRleChwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSkge1xuICAgICAgcmV0dXJuIGNsYW1wKGhhc0ZvY3VzKCkgPyBwYWdlIDogcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclBhZ2UgKiBwYWdlLCAwLCBlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHRvUGFnZShpbmRleCkge1xuICAgICAgcmV0dXJuIGhhc0ZvY3VzKCkgPyBtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGluZGV4LCBlbmRJbmRleCkgOiBmbG9vcigoaW5kZXggPj0gZW5kSW5kZXggPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVDb3VudCAtIDEgOiBpbmRleCkgLyBwZXJQYWdlKTtcbiAgICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZnVuY3Rpb24gdG9EZXN0KGRlc3RpbmF0aW9uKSB7XG4gICAgICB2YXIgY2xvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3QgPSBNb3ZlLnRvSW5kZXgoZGVzdGluYXRpb24pO1xuICAgICAgcmV0dXJuIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlID8gY2xhbXAoY2xvc2VzdCwgMCwgZW5kSW5kZXgpIDogY2xvc2VzdDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0SW5kZXgoaW5kZXgpIHtcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaW5kZXggIT09IGN1cnJJbmRleCkge1xuICAgICAgICBwcmV2SW5kZXggPSBjdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyckluZGV4O1xuICAgICAgICBjdXJySW5kZXggPSBpbmRleDtcbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SW5kZXgocHJldikge1xuICAgICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBwcmV2ID8gcHJldkluZGV4IDogY3VyckluZGV4O1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBmdW5jdGlvbiBoYXNGb2N1cygpIHtcbiAgICAgIHJldHVybiAhaXNVbmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKG9wdGlvbnMuZm9jdXMpIHx8IG9wdGlvbnMuaXNOYXZpZ2F0aW9uO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICBmdW5jdGlvbiBpc0J1c3koKSB7XG4gICAgICByZXR1cm4gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuc3RhdGUuaXMoW01PVklORywgU0NST0xMSU5HXSkgJiYgISFvcHRpb25zLndhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0Rm9yVHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50OiBtb3VudCxcbiAgICAgIGdvOiBnbyxcbiAgICAgIHNjcm9sbDogc2Nyb2xsLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGdldE5leHQ6IGdldE5leHQsXG4gICAgICBnZXRQcmV2OiBnZXRQcmV2LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGdldEFkamFjZW50OiBnZXRBZGphY2VudCxcbiAgICAgIGdldEVuZDogZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEVuZCxcbiAgICAgIHNldEluZGV4OiBzZXRJbmRleCxcbiAgICAgIGdldEluZGV4OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0SW5kZXgsXG4gICAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgICAgdG9QYWdlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG9QYWdlLFxuICAgICAgdG9EZXN0OiB0b0Rlc3QsXG4gICAgICBoYXNGb2N1czogaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc0ZvY3VzLFxuICAgICAgaXNCdXN5OiBpc0J1c3lcbiAgICB9O1xuICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBYTUxfTkFNRV9TUEFDRSA9ICJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICB2YXIgUEFUSCA9ICJtMTUuNSAwLjkzMi00LjMgNC4zOCAxNC41IDE0LjYtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuNiA0LjQtNC4zLTQuNC00LjQtMTQuNicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictMTQuNnoiO1xuICB2YXIgU0laRSA9IDQwO1xuXG4gIGZ1bmN0aW9uIEFycm93cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgZXZlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gICAgdmFyIG9uID0gZXZlbnQub24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICBiaW5kID0gZXZlbnQuYmluZCxcbiAgICAgICAgZW1pdCA9IGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5lbWl0O1xuICAgIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jbGFzc2VzLFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgRWxlbWVudHMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuRWxlbWVudHMsXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIuQ29udHJvbGxlcjtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5hcnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3dzLFxuICAgICAgICB0cmFjayA9IEVsZW1lbnRzLnRyYWNrO1xuICAgIHZhciB3cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlciA9IHBsYWNlaG9sZGVyO1xuICAgIHZhciBwcmV2ID0gRWxlbWVudHMucHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdmFyIG5leHQgPSBFbGVtZW50cy5uZXh0O1xuICAgIHZhciBjcmVhdGVkOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgd3JhcHBlckNsYXNzZXM7XG4gICAgdmFyIGFycm93cyA9IHt9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9uKEVWRU5UX1VQREFURUQsIHJlbW91bnQpO1xuICAgIH1cblxuICAgIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiByZW1vdW50KCkge1xuICAgICAgZGVzdHJveSgpO1xuICAgICAgbW91bnQoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgIHZhciBlbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlZCA9IG9wdGlvbnMuYXJyb3dzO1xuXG4gICAgICBpZiAoZW5hYmxlZCAmJiAhKHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2ICYmIG5leHQpKSB7XG4gICAgICAgIGNyZWF0ZUFycm93cygpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgICAgaWYgKHByZXYgJiYgbmV4dCkge1xuICAgICAgICBhc3NpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKGFycm93cywge1xuICAgICAgICAgIHByZXY6IHByZXYsXG4gICAgICAgICAgbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG5leHRcbiAgICAgICAgfSk7XG4gICAgICAgIGRpc3BsYXkod3JhcHBlciwgZW5hYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWQgPyAiIiA6ICJub25lIik7XG4gICAgICAgIGFkZENsYXNzKHdyYXBwZXIsIHdyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGVyQ2xhc3NlcyA9IENMQVNTX0FSUk9XUyArICItLSIgKyBvcHRpb25zLmRpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpb24pO1xuXG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3RlbigpO1xuICAgICAgICAgIHVwZGF0ZSgpO1xuICAgICAgICAgIHNldEF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dGUoW3ByZXYsIG5leHRdLCBBUklBX0NPTlRST0xTLCB0cmFjay5pZCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGVtaXQoRVZFTlRfQVJST1dTX01PVU5URUQsIHByZXYsIG5leHQpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgZXZlbnQuZGVzdHJveSgpO1xuICAgICAgcmVtb3ZlQ2xhc3Mod3JhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BwZXIsIHdyYXBwZXJDbGFzc2VzKTtcblxuICAgICAgaWYgKGNyZWF0ZWQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHJlbW92ZShwbGFjZWhvbGRlciA/IFtwcmV2LCBuZXh0XSA6IHdyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVyKTtcbiAgICAgICAgcHJldiA9IG5leHQgPSBudWxsO1xuICAgICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIHJlbW92ZUF0dHJpYnV0ZShbcHJldiwgbmV4dF0sIEFMTF9BVFRSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lCVVRFUyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdGVuKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFRCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRlJFU0gsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddLCB1cGRhdGUpO1xuICAgICAgYmluZChuZXh0LCAiY2xpY2siLCBhcHBseShnbywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI+IikpO1xuICAgICAgYmluZChwcmV2LCAiY2xpY2siLCBhcHBseShnbywgIjwiKSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdvKGNvbnRyb2wpIHtcbiAgICAgIENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sbGVyLmdvKGNvbnRyb2wsIHRydWUpO1xuICAgIH1cblxuICAgIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjcmVhdGVBcnJvd3MoKSB7XG4gICAgICB3cmFwcGVyID0gcGxhY2Vob2xkZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IGNyZWF0ZSgiZGl2IiwgY2xhc3Nlcy5hcnJvd3MpO1xuICAgICAgcHJldiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjcmVhdGVBcnJvdyh0cnVlKTtcbiAgICAgIG5leHQgPSBjcmVhdGVBcnJvdyhmYWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgICAgY3JlYXRlZCA9IHRydWU7XG4gICAgICBhcHBlbmQod3JhcHBlciwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1twcmV2LCBuZXh0XSk7XG4gICAgICAhcGxhY2Vob2xkZXIgJiYgYmVmb3JlKHdyYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGVyLCB0cmFjayk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHByZXYyKSB7XG4gICAgICB2YXIgYXJyb3cgPSAiPGJ1dHRvbiBjbGFzcz1cXCIiICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsYXNzZXMuYXJyb3cgKyAiICIgKyAocHJldjIgPyBjbGFzc2VzLnByZXYgOiBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3Nlcy5uZXh0KSArICJcXCIgdHlwZT1cXCJidXR0b25cXCI+PHN2ZyB4bWxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M9XFwiIiArIFhNTF9OQU1FX1NQQUNFICsgIlxcIiB2aWV3Qm94PVxcIjAgMCAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArIFNJWkUgKyAiICIgKyBTSVpFICsgIlxcIiB3aWR0aD1cXCIiICsgU0laRSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyAiXFwiIGhlaWdodD1cXCIiICsgU0laRSArICJcXCIgZm9jdXNhYmxlPVxcImZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xzZVxcIj48cGF0aCBkPVxcIiIgKyAob3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgIlxcIiAvPiI7XG4gICAgICByZXR1cm4gcGFyc2VIdG1sKGFycm93KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgICAgaWYgKHByZXYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmIG5leHQpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gU3BsaWRlMi5pbmRleDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHZhciBwcmV2SW5kZXggPSBDb250cm9sbGVyLmdldFByZXYoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBuZXh0SW5kZXggPSBDb250cm9sbGVyLmdldE5leHQoKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBwcmV2TGFiZWwgPSBwcmV2SW5kZXggPiAtMSAmJiBpbmRleCA8IHByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXggPyBpMThuLmxhc3QgOiBpMThuLnByZXY7XG4gICAgICAgIHZhciBuZXh0TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmVsID0gbmV4dEluZGV4ID4gLTEgJiYgaW5kZXggPiBuZXh0SW5kZXggPyBpMTgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi5maXJzdCA6IGkxOG4ubmV4dDtcbiAgICAgICAgcHJldi5kaXNhYmxlZCA9IHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2SW5kZXggPCAwO1xuICAgICAgICBuZXh0LmRpc2FibGVkID0gbmV4dEluZGV4IDwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7XG4gICAgICAgIHNldEF0dHJpYnV0ZShwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVsKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKG5leHQsIEFSSUFfTEFCRUwsIG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0TGFiZWwpO1xuICAgICAgICBlbWl0KEVWRU5UX0FSUk9XU19VUERBVEVELCBwcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgbmV4dCwgcHJldkluZGV4LCBuZXh0SW5kZXgpO1xuICAgICAgfVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICByZXR1cm4ge1xuICAgICAgYXJyb3dzOiBhcnJvd3MsXG4gICAgICBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICAgIHVwZGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IHVwZGF0ZVxuICAgIH07XG4gIH1cblxuICB2YXIgSU5URVJWQUxfREFUQV9BVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUUklCVVRFID0gREFUQV9BVFRSSUJVVEUgKyAiLWludGVydmFsIjtcblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gQXV0b3BsYXkoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIF9FdmVudEludGVyZmFjZTYgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNi5vbixcbiAgICAgICAgYmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfRXZlbnRJbnRlcmZhY2U2LmJpbmQsXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJmYWNlNi5lbWl0O1xuXG4gICAgdmFyIGludGVydmFsID0gUmVxdWVzdEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbChvcHRpb25zLmludGVydmFsLCBTcGxpZGUyLmdvLmJpbmQoU3BsaWRlMiwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+IiksIG9uQW5pbWF0aW9uRnJhbWUpO1xuICAgIHZhciBpc1BhdXNlZCA9IGludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbC5pc1BhdXNlZDtcbiAgICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudHMsXG4gICAgICAgIF9Db21wb25lbnRzMiRFbGVtZW50czQgPSBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czIuRWxlbWVudHMsXG4gICAgICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzNC5yb290LFxuICAgICAgICB0b2dnbGUgPSBfQ29tcG9uZW50czIkRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNC50b2dnbGU7XG4gICAgdmFyIGF1dG9wbGF5ID0gb3B0aW9ucy5hdXRvcGxheTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIGhvdmVyZWQ7XG4gICAgdmFyIGZvY3VzZWQ7XG4gICAgdmFyIHN0b3BwZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gYXV0b3BsYXkgPT09ICJwYXVzZSI7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZiAoYXV0b3BsYXkpIHtcbiAgICAgICAgbGlzdGVuKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB0b2dnbGUgJiYgc2V0QXR0cmlidXRlKHRvZ2dsZSwgQVJJQV9DT05UUk9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MsIEVsZW1lbnRzLnRyYWNrLmlkKTtcbiAgICAgICAgc3RvcHBlZCB8fCBwbGF5KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgICB1cGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gbGlzdGVuKCkge1xuICAgICAgaWYgKG9wdGlvbnMucGF1c2VPbkhvdmVyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBiaW5kKHJvb3QsICJtb3VzZWVudGVyIG1vdXNlbGVhdmUiLCBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gKGUpIHtcbiAgICAgICAgICBob3ZlcmVkID0gZS50eXBlID09PSAibW91cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZW50ZXIiO1xuICAgICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wYXVzZU9uRm9jdXMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGJpbmQocm9vdCwgImZvY3VzaW4gZm9jdXNvdXQiLCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpIHtcbiAgICAgICAgICBmb2N1c2VkID0gZS50eXBlID09PSAiZm9jdXNpbiI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZiAodG9nZ2xlKSB7XG4gICAgICAgIGJpbmQodG9nZ2xlLCAiY2xpY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHN0b3BwZWQgPyBwbGF5KCkgOiBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c2UodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBvbihbRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfUkVGUkVTSF0sIGludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5yZXdpbmQpO1xuICAgICAgb24oRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgZnVuY3Rpb24gcGxheSgpIHtcbiAgICAgIGlmIChpc1BhdXNlZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSAmJiBDb21wb25lbnRzMi5TbGlkZXMuaXNFbm91Z2goKSkge1xuICAgICAgICBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJ2YWwuc3RhcnQoIW9wdGlvbnMucmVzZXRQcm9ncmVzcyk7XG4gICAgICAgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N1c2VkID0gaG92ZXJlZCA9IHN0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpO1xuICAgICAgICBlbWl0KEVWRU5UX0FVVE9QTEFZX1BMQVkpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXVzZShzdG9wKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKHN0b3AgPT09IHZvaWQgMCkge1xuICAgICAgICBzdG9wID0gdHJ1ZTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgICAgIHN0b3BwZWQgPSAhIXN0b3A7XG4gICAgICB1cGRhdGUoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICAgIGlmICghaXNQYXVzZWQoKSkge1xuICAgICAgICBpbnRlcnZhbC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2UoKTtcbiAgICAgICAgZW1pdChFVkVOVF9BVVRPUExBWV9QQVVTRSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGF1dG9Ub2dnbGUoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKCFzdG9wcGVkKSB7XG4gICAgICAgIGhvdmVyZWQgfHwgZm9jdXNlZCA/IHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXVzZShmYWxzZSkgOiBwbGF5KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIGlmICh0b2dnbGUpIHtcbiAgICAgICAgdG9nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dsZUNsYXNzKHRvZ2dsZSwgQ0xBU1NfQUNUSVZFLCAhc3RvcHBlZCk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzZXRBdHRyaWJ1dGUodG9nZ2xlLCBBUklBX0xBQkVMLCBvcHRpb25zLmkxOG5bJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0b3BwZWQgPyAicGxheSIgOiAicGF1c2UiXSk7XG4gICAgICB9XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWUocmF0ZSkge1xuICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBiYXIgPSBFbGVtZW50cy5iYXI7XG4gICAgICBiYXIgJiYgc3R5bGUoYmFyLCAid2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoIiwgcmF0ZSAqIDEwMCArICIlIik7XG4gICAgICBlbWl0KEVWRU5UX0FVVE9QTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBWV9QTEFZSU5HLCByYXRlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKGluZGV4KSB7XG4gICAgICB2YXIgU2xpZGUgPSBDb21wb25lbnRzMi5TbGlkZXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEF0KGluZGV4KTtcbiAgICAgIGludGVydmFsLnNldChTbGlkZSAmJiArZ2V0QXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZShTbGlkZS5zbGlkZSwgSU5URVJWQUxfREFUQV9BVFRSSUJVVEUpIHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zLmludGVydmFsKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIG1vdW50OiBtb3VudCxcbiAgICAgIGRlc3Ryb3k6IGludGVydmFsLmNhbmNlbCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBwbGF5OiBwbGF5LFxuICAgICAgcGF1c2U6IHBhdXNlLFxuICAgICAgaXNQYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c2VkOiBpc1BhdXNlZFxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBDb3ZlcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX0V2ZW50SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZTcgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gX0V2ZW50SW50ZXJmYWNlNy5vbjtcblxuICAgIGZ1bmN0aW9uIG1vdW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGlmIChvcHRpb25zLmNvdmVyKSB7XG4gICAgICAgIG9uKEVWRU5UX0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVpZTE9BRF9MT0FERUQsIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpO1xuICAgICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoW0VWRU5UX01PVU5URUQsIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwbHkoY292ZXIsIHRydWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gY292ZXIoY292ZXIyKSB7XG4gICAgICBDb21wb25lbnRzMi5TbGlkZXMuZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckVhY2goZnVuY3Rpb24gKFNsaWRlKSB7XG4gICAgICAgIHZhciBpbWcgPSBjaGlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoU2xpZGUuY29udGFpbmVyIHx8IFNsaWRlLnNsaWRlLCAiaW1nIik7XG5cbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChpbWcgJiYgaW1nLnNyYykge1xuICAgICAgICAgIHRvZ2dsZShjb3ZlcjIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbWcsIFNsaWRlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIHRvZ2dsZShjb3ZlcjIsIGltZywgU2xpZGUpIHtcbiAgICAgIFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5zdHlsZSgiYmFja2dyb3VuZCIsIGNvdmVyMiA/ICJjZW50ZXIvY292ZXIgbm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLXJlcGVhdCB1cmwoXFwiIiArIGltZy5zcmMgKyAiXFwiKSIgOiAiIiwgdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgZGlzcGxheShpbWcsIGNvdmVyMiA/ICJub25lIiA6ICIiKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0cm95OiBhcHBseShjb3ZlciwgZmFsc2UpXG4gICAgfTtcbiAgfVxuXG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQk9VTkNFX0RJRkZfVEhSRVNIT0xEID0gMTA7XG4gIHZhciBCT1VOQ0VfRFVSQVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSU9OID0gNjAwO1xuICB2YXIgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xuICB2YXIgQkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0VfVkVMT0NJVFkgPSAxLjU7XG4gIHZhciBNSU5fRFVSQVRJT04gPSA4MDA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIFNjcm9sbChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlOCA9IEV2ZW50SW50ZXJmYWNlKFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyKSxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U4Lm9uLFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdCA9IF9FdmVudEludGVyZmFjZTguZW1pdDtcblxuICAgIHZhciBzZXQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5zdGF0ZS5zZXQ7XG4gICAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5NbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZTtcbiAgICB2YXIgZ2V0UG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZ2V0TGltaXQgPSBNb3ZlLmdldExpbWl0LFxuICAgICAgICBleGNlZWRlZExpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pdCA9IE1vdmUuZXhjZWVkZWRMaW1pdCxcbiAgICAgICAgdHJhbnNsYXRlID0gTW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUudHJhbnNsYXRlO1xuICAgIHZhciBpc1NsaWRlID0gU3BsaWRlMi5pcyhTTElERScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIHZhciBpbnRlcnZhbDtcbiAgICB2YXIgY2FsbGJhY2s7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBmcmljdGlvbiA9IDE7XG5cbiAgICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvbihFVkVOVF9NT1ZFLCBjbGVhcik7XG4gICAgICBvbihbRVZFTlRfVVBEQVRFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsIEVWRU5UX1JFRlJFU0hdLCBjYW5jZWwpO1xuICAgIH1cblxuICAgIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBzY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCBvblNjcm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZCwgbm9Db25zdHJhaW4pIHtcbiAgICAgIHZhciBmcm9tID0gZ2V0UG9zaXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICBjbGVhcigpO1xuXG4gICAgICBpZiAoc25hcCAmJiAoIWlzU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIHx8ICFleGNlZWRlZExpbWl0KCkpKSB7XG4gICAgICAgIHZhciBzaXplID0gQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyLkxheW91dC5zbGlkZXJTaXplKCk7XG4gICAgICAgIHZhciBvZmZzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gc2lnbihkZXN0aW5hdGlvbikgKiBzaXplICogZmxvb3IoYWJzKGRlc3RpbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbikgLyBzaXplKSB8fCAwO1xuICAgICAgICBkZXN0aW5hdGlvbiA9IE1vdmUudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvUG9zaXRpb24oQ29tcG9uZW50czIuQ29udHJvbGxlci50b0Rlc3QoZGVzdGluYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uICUgc2l6ZSkpICsgb2Zmc2V0O1xuICAgICAgfVxuXG4gICAgICB2YXIgbm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRGlzdGFuY2UgPSBhcHByb3hpbWF0ZWx5RXF1YWwoZnJvbSwgZGVzdGluYXRpb24sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxKTtcbiAgICAgIGZyaWN0aW9uID0gMTtcbiAgICAgIGR1cmF0aW9uID0gbm9EaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2UgPyAwIDogZHVyYXRpb24gfHwgbWF4KGFicyhkZXN0aW5hdGlvbiAtIGZybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtKSAvIEJBU0VfVkVMT0NJVFksIE1JTl9EVVJBVElPTik7XG4gICAgICBjYWxsYmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2sgPSBvblNjcm9sbGVkO1xuICAgICAgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGR1cmF0aW9uLCBvbkVuZCwgYXBwbHkodXBkYXRlLCBmcm9tLCBkZXN0aW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24sIG5vQ29uc3RyYWluKSwgMSk7XG4gICAgICBzZXQoU0NST0xMSU5HKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0KEVWRU5UX1NDUk9MTCk7XG4gICAgICBpbnRlcnZhbC5zdGFydCgpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvbkVuZCgpIHtcbiAgICAgIHNldChJRExFKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpO1xuICAgICAgZW1pdChFVkVOVF9TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NST0xMRUQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZShmcm9tLCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28sIG5vQ29uc3RyYWluLCByYXRlKSB7XG4gICAgICB2YXIgcG9zaXRpb24gPSBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUG9zaXRpb24oKTtcbiAgICAgIHZhciB0YXJnZXQgPSBmcm9tICsgKHRvIC0gZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICogZWFzaW5nKHJhdGUpO1xuICAgICAgdmFyIGRpZmYgPSAodGFyZ2V0IC0gcG9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKSAqIGZyaWN0aW9uO1xuICAgICAgdHJhbnNsYXRlKHBvc2l0aW9uICsgZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmYpO1xuXG4gICAgICBpZiAoaXNTbGlkZSAmJiAhbm9Db25zdHJhaW4gJiYgZXhjZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVkTGltaXQoKSkge1xuICAgICAgICBmcmljdGlvbiAqPSBGUklDVElPTl9GQUNUTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSO1xuXG4gICAgICAgIGlmIChhYnMoZGlmZikgPCBCT1VOQ0VfRElGRl9USFJFU0hPTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEKSB7XG4gICAgICAgICAgc2Nyb2xsKGdldExpbWl0KGV4Y2VlZGVkTGltaXQodHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpKSwgQk9VTkNFX0RVUkFUSU9OLCBmYWxzZSwgY2FsbGJhY2ssIHRydWUpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFyKCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIGlmIChpbnRlcnZhbCkge1xuICAgICAgICBpbnRlcnZhbC5jYW5jZWwoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChpbnRlcnZhbCAmJiAhaW50ZXJ2YWwuaXNQYXVzZWQoKSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY2xlYXIoKTtcbiAgICAgICAgb25FbmQoKTtcbiAgICAgIH1cbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZnVuY3Rpb24gZWFzaW5nKHQpIHtcbiAgICAgIHZhciBlYXNpbmdGdW5jID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuZWFzaW5nRnVuYztcbiAgICAgIHJldHVybiBlYXNpbmdGdW5jID8gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2luZ0Z1bmModCkgOiAxIC0gTWF0aC5wb3coMSAtIHQsIDQpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3k6IGNsZWFyLFxuICAgICAgc2Nyb2xsOiBzY3JvbGwsXG4gICAgICBjYW5jZWw6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjYW5jZWxcbiAgICB9O1xuICB9XG5cbiAgdmFyIFNDUk9MTF9MSVNURU5FUl9PUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OUyA9IHtcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICBjYXB0dXJlOiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZVxuICB9O1xuXG4gIGZ1bmN0aW9uIERyYWcoU3BsaWRlMiwgQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEludGVyZmFjZTkgPSBFdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlOScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicub24sXG4gICAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U5LmVtaXQsXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlOS5iaW5kLFxuICAgICAgICB1bmJpbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gX0V2ZW50SW50ZXJmYWNlOS51bmJpbmQ7XG5cbiAgICB2YXIgc3RhdGUgPSBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMi5zdGF0ZTtcbiAgICB2YXIgTW92ZSA9IENvbXBvbmVudHMyLk1vdmUsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBTY3JvbGwgPSBDb21wb25lbnRzMi5TY3JvbGwsXG4gICAgICAgIENvbnRyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcixcbiAgICAgICAgdHJhY2sgPSBDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50czIuRWxlbWVudHMudHJhY2ssXG4gICAgICAgIHJlZHVjZSA9IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMi5NZWRpYS5yZWR1Y2U7XG4gICAgdmFyIF9Db21wb25lbnRzMiREaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW8yID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLFxuICAgICAgICByZXNvbHZlID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMiREaXJlY3RpbzIucmVzb2x2ZSxcbiAgICAgICAgb3JpZW50ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19Db21wb25lbnRzMiREaXJlY3RpbzIub3JpZW50O1xuICAgIHZhciBnZXRQb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgICBleGNlZWRlZExpbWl0ID0gTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUuZXhjZWVkZWRMaW1pdDtcbiAgICB2YXIgYmFzZVBvc2l0aW9uO1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYmFzZUV2ZW50O1xuICAgIHZhciBwcmV2QmFzZUV2ZW50O1xuICAgIHZhciBpc0ZyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuICAgIHZhciBkcmFnZ2luZztcbiAgICB2YXIgZXhjZWVkZWQgPSBmYWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gICAgdmFyIGNsaWNrUHJldmVudGVkO1xuICAgIHZhciBkaXNhYmxlZDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIHRhcmdldDtcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGJpbmQodHJhY2ssIFBPSU5URVJfTU9WRV9FVkVOVFMsIG5vb3AsIFNDUk9MTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX1VQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19FVkVOVFMsIG5vb3AsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICAgIGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kKHRyYWNrLCBQT0lOVEVSX0RPV05fRVZFTlRTLCBvblBvaW50ZXJEb3duLCBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgYmluZCh0cmFjaywgImNsaWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInayIsIG9uQ2xpY2ssIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgYmluZCh0cmFjaywgImRyYWdzdGFydCIsIHByZXZlbnQpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEXSwgaW5pdCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgICB2YXIgZHJhZyA9IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmRyYWc7XG4gICAgICBkaXNhYmxlKCFkcmFnKTtcbiAgICAgIGlzRnJlZSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkcmFnID09PSAiZnJlZSI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25Qb2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlckRvd24oZSkge1xuICAgICAgY2xpY2tQcmV2ZW50ZWQgPSBmYWxzZTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgdmFyIGlzVG91Y2ggPSBpc1QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VjaEV2ZW50KGUpO1xuXG4gICAgICAgIGlmIChpc0RyYWdnYWJsZShlLnRhcmdldCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICYmIChpc1RvdWNoIHx8ICFlLmJ1dHRvbikpIHtcbiAgICAgICAgICBpZiAoIUNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cm9sbGVyLmlzQnVzeSgpKSB7XG4gICAgICAgICAgICB0YXJnZXQgPSBpc1RvdWNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA/IHRyYWNrIDogd2luZG93O1xuICAgICAgICAgICAgZHJhZ2dpbmcgPSBzdGF0ZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMoW01PVklORywgU0NST0xMSU5HXSk7XG4gICAgICAgICAgICBwcmV2QmFzZUV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9IG51bGw7XG4gICAgICAgICAgICBiaW5kKHRhcmdldCwgUE9JTlRFUl9NT1ZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19FVkVOVFMsIG9uUG9pbnRlck1vdmUsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICAgICAgICBiaW5kKHRhcmdldCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BvaW50ZXJVcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUuY2FuY2VsKCk7XG4gICAgICAgICAgICBTY3JvbGwuY2FuY2VsKCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgc2F2ZShlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uUG9pbnRlck1vdmUoZSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGlmICghc3RhdGUuaXMoRFJBR0dJTkcpKSB7XG4gICAgICAgIHN0YXRlLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQoRFJBR0dJTkcpO1xuICAgICAgICBlbWl0KEVWRU5UX0RSQUcpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgICAgaWYgKGUuY2FuY2VsYWJsZSkge1xuICAgICAgICBpZiAoZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYWdnaW5nKSB7XG4gICAgICAgICAgTW92ZS50cmFuc2xhdGUoYmFzZVBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArIGNvbnN0cmFpbihkaWZmQ29vcmQoZSkpKTtcbiAgICAgICAgICB2YXIgZXhwaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgPSBkaWZmVGltZShlKSA+IExPR19JTlRFUlZBTDtcbiAgICAgICAgICB2YXIgaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc0V4Y2VlZGVkID0gZXhjZWVkZWQgIT09IChleGNlZWRlZCA9IGV4Y2VlZGVkTGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCkpO1xuXG4gICAgICAgICAgaWYgKGV4cGlyZWQgfHwgaGFzRXhjZWVkZWQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgICAgICBzYXZlKGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjbGlja1ByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgICAgZW1pdChFVkVOVF9EUkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0dJTkcpO1xuICAgICAgICAgIHByZXZlbnQoZSk7XG4gICAgICAgIH0gZWxzZSBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGlzU2xpZGVyRGlyZWN0aW9uKGUpKSB7XG4gICAgICAgICAgZHJhZ2dpbmcgPSBzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdWxkU3RhcnQoZSk7XG4gICAgICAgICAgcHJldmVudChlKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJVcChlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgaWYgKHN0YXRlLmlzKERSQUdHSU5HKSkge1xuICAgICAgICBzdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc2V0KElETEUpO1xuICAgICAgICBlbWl0KEVWRU5UX0RSQUdHRUQpO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKGRyYWdnaW5nKSB7XG4gICAgICAgIG1vdmUoZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBwcmV2ZW50KGUpO1xuICAgICAgfVxuXG4gICAgICB1bmJpbmQodGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgUE9JTlRFUl9NT1ZFX0VWRU5UUywgb25Qb2ludGVyTW92ZSk7XG4gICAgICB1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiaW5kKHRhcmdldCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uUG9pbnRlclVwKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBkcmFnZ2luZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NsaWNrKGUpIHtcbiAgICAgIGlmICghZGlzYWJsZWQgJiYgY2xpY2tQcmV2ZW50ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZ1bmN0aW9uIHNhdmUoZSkge1xuICAgICAgcHJldkJhc2VFdmVudCA9IGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlRXZlbnQ7XG4gICAgICBiYXNlRXZlbnQgPSBlO1xuICAgICAgYmFzZVBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGdldFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW92ZShlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIHZlbG9jaXR5ID0gY29tcHV0ZVZlbG9jaXR5KGUpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBkZXN0aW5hdGlvbiA9IGNvbXB1dGVEZXN0aW5hdGlvbih2ZWxvY2l0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgdmFyIHJld2luZCA9IG9wdGlvbnMucmV3aW5kICYmIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jld2luZEJ5RHJhZztcbiAgICAgIHJlZHVjZShmYWxzZSk7XG5cbiAgICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoaXNGcmVlKSB7XG4gICAgICAgIENvbnRyb2xsZXIuc2Nyb2xsKGRlc3RpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgMCwgb3B0aW9ucy5zbmFwKTtcbiAgICAgIH0gZWxzZSBpZiAoU3BsaWRlMi5pcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRkFERSkpIHtcbiAgICAgICAgQ29udHJvbGxlci5nbyhvcmllbnQoc2lnbih2ZWxvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NpdHkpKSA8IDAgPyByZXdpbmQgPyAiPCIgOiAiLSIgOiByZXdpbmQgPyAiPiIgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIisiKTtcbiAgICAgIH0gZWxzZSBpZiAoU3BsaWRlMi5pcyhTTElERSkgJiYgZXhjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkICYmIHJld2luZCkge1xuICAgICAgICBDb250cm9sbGVyLmdvKGV4Y2VlZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZExpbWl0KHRydWUpID8gIj4iIDogIjwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBDb250cm9sbGVyLmdvKENvbnRyb2xsZXIudG9EZXN0KGRlc3RpbmF0aW9uKSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUpO1xuICAgICAgfVxuXG4gICAgICByZWR1Y2UodHJ1ZSk7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIHNob3VsZFN0YXJ0KGUpIHtcbiAgICAgIHZhciB0aHJlc2hvbGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyA9IG9wdGlvbnMuZHJhZ01pblRocmVzaG9sZDtcbiAgICAgIHZhciBpc09iaiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc09iamVjdCh0aHJlc2hvbGRzKTtcbiAgICAgIHZhciBtb3VzZSA9IGlzT2JqICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aHJlc2hvbGRzLm1vdXNlIHx8IDA7XG4gICAgICB2YXIgdG91Y2ggPSAoaXNPYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID8gdGhyZXNob2xkcy50b3VjaCA6ICt0aHJlc2hvbGRzKSB8fCAxMDtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gYWJzKGRpZmZDb29yZChlKSkgPiAoaXNUb3VjaEV2ZW50KGUpID8gdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWNoIDogbW91c2UpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2xpZGVyRGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbihlKSB7XG4gICAgICByZXR1cm4gYWJzKGRpZmZDb29yZChlKSkgPiBhYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKGRpZmZDb29yZChlLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXB1dGVWZWxvY2l0eShlKSB7XG4gICAgICBpZiAoU3BsaWRlMi5pcyhMT09QKSB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgIWV4Y2VlZGVkKSB7XG4gICAgICAgIHZhciB0aW1lID0gZGlmZlRpbWUoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgICAgIGlmICh0aW1lICYmIHRpbWUgPCBMT0dfSU5URVJWQUwpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgICAgcmV0dXJuIGRpZmZDb29yZChlKSAvIHRpbWU7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjb21wdXRlRGVzdGluYXRpb24odmVsb2NpdHkpIHtcbiAgICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0UG9zaXRpb24oKSArIHNpZ24odmVsb2NpdHkpICogbWluKGFicyh2ZWxvY2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3kpICogKG9wdGlvbnMuZmxpY2tQb3dlciB8fCA2MDApLCBpc0ZyZWUgPyBJbmZpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdHkgOiBDb21wb25lbnRzMi5MYXlvdXQubGlzdFNpemUoKSAqIChvcHRpb25zLmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlja01heFBhZ2VzIHx8IDEpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZkNvb3JkKGUsIG9ydGhvZ29uYWwpIHtcbiAgICAgIHJldHVybiBjb29yZE9mKGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnRob2dvbmFsKSAtIGNvb3JkT2YoZ2V0QmFzZUV2ZW50KGUpLCBvcnRob2dvbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZlRpbWUoZSkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB0aW1lT2YoZSkgLSB0aW1lT2YoZ2V0QmFzZUV2ZW50KGUpKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gICAgZnVuY3Rpb24gZ2V0QmFzZUV2ZW50KGUpIHtcbiAgICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gYmFzZUV2ZW50ID09PSBlICYmIHByZXZCYXNlRXZlbnQgfHwgYmFzZUV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb29yZE9mKGUsIG9ydGhvZ29uYWwpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICByZXR1cm4gKGlzVG91Y2hFdmVudChlKSA/IGUuY2hhbmdlZFRvdWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVzWzBdIDogZSlbInBhZ2UiICsgcmVzb2x2ZShvcnRob2dvbmFsID8gIlkiIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJYIildO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbnN0cmFpbihkaWZmKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgcmV0dXJuIGRpZmYgLyAoZXhjZWVkZWQgJiYgU3BsaWRlMi5pcyhTTEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREUpID8gRlJJQ1RJT04gOiAxKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnZ2FibGUodGFyZ2V0Mikge1xuICAgICAgdmFyIG5vRHJhZyA9IG9wdGlvbnMubicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvRHJhZztcbiAgICAgIHJldHVybiAhbWF0Y2hlcyh0YXJnZXQyLCAiLiIgKyBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUEFHSU5BVElPTl9QQUdFICsgIiwgLiIgKyBDTEFTU19BUlJPVykgJiYgKCFubycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEcmFnIHx8ICFtYXRjaGVzKHRhcmdldDIsIG5vRHJhZykpO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBmdW5jdGlvbiBpc1RvdWNoRXZlbnQoZSkge1xuICAgICAgcmV0dXJuIHR5cGVvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgVG91Y2hFdmVudCAhPT0gInVuZGVmaW5lZCIgJiYgZSBpbnN0YW5jZW9mIFRvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaEV2ZW50O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHJhZ2dpbmcoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmV0dXJuIGRyYWdnaW5nO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNhYmxlKHZhbHVlKSB7XG4gICAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2FibGU6IGRpc2FibGUsXG4gICAgICBpc0RyYWdnaW5nOiBpc0RyYWdnaW5nXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG4gIH1cblxuICB2YXIgTk9STUFMSVpBVElPTl9NQVAgPSB7XG4gICAgU3BhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlYmFyOiAiICIsXG4gICAgUmlnaHQ6IEFSUk9XX1JJR0hULFxuICAgIExlZnQ6IEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JPV19MRUZULFxuICAgIFVwOiBBUlJPV19VUCxcbiAgICBEb3duOiBBUlJPV19ET1dOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAgICBrZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5ID0gaXNTdHJpbmcoa2V5KSA/IGtleSA6IGtleS5rZXk7XG4gICAgcmV0dXJuIE5PJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JNQUxJWkFUSU9OX01BUFtrZXldIHx8IGtleTtcbiAgfVxuXG4gIHZhciBLRVlCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09BUkRfRVZFTlQgPSAia2V5ZG93biI7XG5cbiAgZnVuY3Rpb24gS2V5Ym9hcmQoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gICAgdmFyIF9FdmVudEludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmZhY2UxMCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgICBvbiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfRXZlbnRJbnRlcmZhY2UxMC5vbixcbiAgICAgICAgYmluZCA9IF9FdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UxMC5iaW5kLFxuICAgICAgICB1bmJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5iaW5kO1xuXG4gICAgdmFyIHJvb3QgPSBTcGxpZGUyLnJvb3Q7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciB0YXJnZXQ7XG4gICAgdmFyIGRpc2FibGVkO1xuXG4gICAgZnVuY3Rpb24gbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCkge1xuICAgICAgaW5pdCgpO1xuICAgICAgb24oRVZFTlRfVVBEQVRFRCwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3kpO1xuICAgICAgb24oRVZFTlRfVVBEQVRFRCwgaW5pdCk7XG4gICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdCgpIHtcbiAgICAgIHZhciBrZXlib2FyZCA9IG9wdGlvbnMua2V5Ym9hcmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgICBpZiAoa2V5Ym9hcmQpIHtcbiAgICAgICAgdGFyZ2V0ID0ga2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWJvYXJkID09PSAiZ2xvYmFsIiA/IHdpbmRvdyA6IHJvb3Q7XG4gICAgICAgIGJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKHRhcmdldCwgS0VZQk9BUkRfRVZFTlQsIG9uS2V5ZG93bik7XG4gICAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICB1bmJpbmQodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgS0VZQk9BUkRfRVZFTlQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNhYmxlKHZhbHVlKSB7XG4gICAgICBkaXNhYmxlZCA9IHZhbHVlO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgICBmdW5jdGlvbiBvbk1vdmUoKSB7XG4gICAgICB2YXIgX2Rpc2FiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZCA9IGRpc2FibGVkO1xuICAgICAgZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGlzYWJsZWQgPSBfZGlzYWJsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25LZXlkb3duKGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHZhciBrZXkgPSBub3JtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsaXplS2V5KGUpO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRlQpKSB7XG4gICAgICAgICAgU3BsaWRlMi5nbygiPCIpO1xuICAgICAgICB9IGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfUklHSFQpKSB7XG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZTIuZ28oIj4iKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4ge1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3ksXG4gICAgICBkaXNhYmxlOiBkaXNhYmxlXG4gICAgfTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgU1JDX0RBVEFfQVRUUklCVVRFID0gREFUQV9BVFRSSUJVVEUgKyAiLWxheicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IjtcbiAgdmFyIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSA9IFNSQ19EQVRBX0FUVFJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JVVEUgKyAiLXNyY3NldCI7XG4gIHZhciBJTUFHRV9TRUxFQ1RPUiA9ICJbIiArIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkNfREFUQV9BVFRSSUJVVEUgKyAiXSwgWyIgKyBTUkNTRVRfREFUQV9BVFRSSUJVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFICsgIl0iO1xuXG4gIGZ1bmN0aW9uIExhenlMb2FkKFNwbGlkZTIsIENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2UxMSA9IEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlMTEub24sXG4gICAgICAgIG9mZiA9IF9FdmVudEludGVyZmFjZTExLm9mZixcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UxMS5iaW5kLFxuICAgICAgICBlbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF9FdmVudEludGVyZmFjZTExLmVtaXQ7XG5cbiAgICB2YXIgaXNTZXF1ZW50aWFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG9wdGlvbnMubGF6eUxvYWQgPT09ICJzZXF1ZW50aWFsIjtcbiAgICB2YXIgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cyA9IFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRURdO1xuICAgIHZhciBlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmllcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKG9wdGlvbnMubGF6eUxvYWQpIHtcbiAgICAgICAgaW5pdCgpO1xuICAgICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfUkVGUkVTSCwgaW5pdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGluaXQoKSB7XG4gICAgICBlbXB0eShlbnRyaWVzKTtcbiAgICAgIHJlZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RlcigpO1xuXG4gICAgICBpZiAoaXNTZXF1ZW50aWFsKSB7XG4gICAgICAgIGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2FkTmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2ZmKGV2ZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgICBvbihldmVudHMsIGNoZWNrKTtcbiAgICAgICAgY2hlY2soJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnaXN0ZXIoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgQ29tcG9uZW50czIuU2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICBxdWVyeUFsbChTbGlkZS5zbGlkZSwgSU1BR0VfU0VMRUNUT1InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKS5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgICB2YXIgc3JjID0gZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZShpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBzcmNzZXQgPSBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNTRVRfREFUQV9BVFRSSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCVVRFKTtcblxuICAgICAgICAgIGlmIChzcmMgIT09IGltZy5zcmMgfHwgc3Jjc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichPT0gaW1nLnNyY3NldCkge1xuICAgICAgICAgICAgdmFyIGNsYXNzTmFtZSA9IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmNsYXNzZXMuc3Bpbm5lcjtcbiAgICAgICAgICAgIHZhciBwYXJlbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1nLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICB2YXIgc3Bpbm5lciA9IGNoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZChwYXJlbnQsICIuIiArIGNsYXNzTmFtZSkgfHwgY3JlYXRlKCJzcGFuIiwgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzTmFtZSwgcGFyZW50KTtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChbaW1nLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU2xpZGUsIHNwaW5uZXJdKTtcbiAgICAgICAgICAgIGltZy5zcmMgfHwgZGlzcGxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koaW1nLCAibm9uZSIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2soKSB7XG4gICAgICBlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmllcyA9IGVudHJpZXMuZmlsdGVyKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgZGlzdGFuY2UgPSBvcHRpb25zLnBlclBhZ2UgKiAoKG9wdGlvbnMucHJlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYWRQYWdlcyB8fCAxKSArIDEpIC0gMTtcbiAgICAgICAgcmV0dXJuIGRhdGFbMV0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzV2l0aGluKFNwbGlkZTIuaW5kZXgsIGRpc3RhbmNlKSA/IGxvYWQoZGF0YSkgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgZW50cmllcy5sZW5ndGggfHwgb2ZmKGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWQoZGF0YSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbWcgPSBkYXRhWzBdO1xuICAgICAgYWRkQ2xhc3MoZGF0YVsxXS5zbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX0xPQURJTkcpO1xuICAgICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KG9uTG9hZCwgZGF0YSkpO1xuICAgICAgc2V0QXR0cmlidXRlKGltZywgInMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmMiLCBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXRBdHRyaWJ1dGUoaW1nLCAic3Jjc2V0IiwgZ2V0QXR0cmlidXRlKGltZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSkpO1xuICAgICAgcmVtb3ZlQXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSk7XG4gICAgICByZW1vdmVBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ltZywgU1JDU0VUX0RBVEFfQVRUUklCVVRFKTtcbiAgICB9XG5cbiAgICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gb25Mb2FkKGRhdGEsIGUpIHtcbiAgICAgIHZhciBpbWcgPSBkYXRhWzBdLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICBTbGlkZSA9IGRhdGFbMV07XG4gICAgICByZW1vdmVDbGFzcyhTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUuc2xpZGUsIENMQVNTX0xPQURJTkcpO1xuXG4gICAgICBpZiAoZS50eXBlICE9PSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImVycm9yIikge1xuICAgICAgICByZW1vdmUoZGF0YVsyXSk7XG4gICAgICAgIGRpc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGF5KGltZywgIiIpO1xuICAgICAgICBlbWl0KEVWRU5UX0xBWllMT0FEX0xPQURFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGltZywgU2xpZGUpO1xuICAgICAgICBlbWl0KEVWRU5UX1JFU0laRSk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgICBpc1NlcXVlbnRpYWwgJiYgbG9hZE5leHQoKTtcbiAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgZnVuY3Rpb24gbG9hZE5leHQoKSB7XG4gICAgICBlbnRyaWVzLmxlbmd0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgbG9hZChlbnRyaWVzLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgbW91bnQ6IG1vdW50LFxuICAgICAgZGVzdHJveTogYXBwbHkoZW1wdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBlbnRyaWVzKSxcbiAgICAgIGNoZWNrOiBjaGVja1xuICAgIH07XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gUGFnaW5hdGlvbihTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMpIHtcbiAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIG9uID0gZXZlbnQub24sXG4gICAgICAgIGVtaXQgPSBldmVudC5lbWl0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgYmluZCA9IGV2ZW50LmJpbmQ7XG4gICAgdmFyIFNsaWRlcyA9IENvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnRzMi5TbGlkZXMsXG4gICAgICAgIEVsZW1lbnRzID0gQ29tcG9uZW50czIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzLFxuICAgICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xsZXI7XG4gICAgdmFyIGhhc0ZvY3VzID0gQ29udHJvbGxlci5oYXNGb2N1cyxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGdldEluZGV4ID0gQ29udHJvbGxlci5nZXRJbmRleCxcbiAgICAgICAgZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvID0gQ29udHJvbGxlci5nbztcbiAgICB2YXIgcmVzb2x2ZSA9IENvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5EaXJlY3Rpb24ucmVzb2x2ZTtcbiAgICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMucGFnaW5hdGlvbjtcbiAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICB2YXIgbGlzdDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIHBhZ2luYXRpb25DbGFzc2VzO1xuXG4gICAgZnVuY3Rpb24gbW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50KCkge1xuICAgICAgZGVzdHJveSgpO1xuICAgICAgb24oW0VWRU5UX1VQREFURUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRF0sIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMucGFnaW5hdGlvbjtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwbGFjZWhvbGRlciAmJiBkaXNwbGF5KHBsYWNlaG9sZGVyLCBlbmFibGVkID8gIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIDogIm5vbmUiKTtcblxuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKFtFVkVOVF9NT1ZFLCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVEXSwgdXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGF0ZSk7XG4gICAgICAgIGNyZWF0ZVBhZ2luYXRpb24oKTtcbiAgICAgICAgdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpO1xuICAgICAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCwge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBsaXN0OiBsaXN0LFxuICAgICAgICAgIGl0ZW1zOiBpdGVtc1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSwgZ2V0QXQoU3BsaWRlMi5pbmRleCkpO1xuICAgICAgfVxuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgaWYgKGxpc3QpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJlbW92ZShwbGFjZWhvbGRlciA/IHNsaWNlKGxpc3QuY2hpbGRyZW4pIDogbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3QpO1xuICAgICAgICByZW1vdmVDbGFzcyhsaXN0LCBwYWdpbmF0aW9uQ2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpO1xuICAgICAgICBlbXB0eShpdGVtcyk7XG4gICAgICAgIGxpc3QgPSBudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbDtcbiAgICAgIH1cblxuICAgICAgZXZlbnQuZGVzdHJveSgpO1xuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBjcmVhdGVQYWdpbmF0aW9uKCkge1xuICAgICAgdmFyIGxlbmd0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBTcGxpZGUyLmxlbmd0aDtcbiAgICAgIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NlcyxcbiAgICAgICAgICBpMThuID0gb3B0aW9ucy5pMThuLFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgICAgdmFyIG1heCA9IGhhc0YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1cygpID8gQ29udHJvbGxlci5nZXRFbmQoKSArIDEgOiBjZWlsKGxlbmd0aCAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwZXJQYWdlKTtcbiAgICAgIGxpc3QgPSBwbGFjZWhvbGRlciB8fCBjcmVhdGUoInUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCIsIGNsYXNzZXMucGFnaW5hdGlvbiwgRWxlbWVudHMudHJhY2sucGFyZW50RWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQpO1xuICAgICAgYWRkQ2xhc3MobGlzdCwgcGFnaW5hdGlvbkNsYXNzZXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfUEFHSU5BVElPTiArICItLSIgKyBnZXREaXJlY3Rpb24oKSk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0QXR0cmlidXRlKGxpc3QsIFJPTEUsICJ0YWJsaXN0Iik7XG4gICAgICBzZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cmlidXRlKGxpc3QsIEFSSUFfTEFCRUwsIGkxOG4uc2VsZWN0KTtcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUobGlzdCwgQVJJQV9PUklFTlRBVElPTiwgZ2V0RGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuXG4gICAgICBmb3IgKHZhciBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IDA7IGkgPCBtYXg7IGkrKykge1xuICAgICAgICB2YXIgbGkgPSBjcmVhdGUoImwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSIsIG51bGwsIGxpc3QpO1xuICAgICAgICB2YXIgYnV0dG9uID0gY3JlYXRlKCJidScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dG9uIiwge1xuICAgICAgICAgIGNsYXNzOiBjbGFzc2VzLnBhZ2UsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHR5cGU6ICJidXR0b24iXG4gICAgICAgIH0sIGxpKTtcbiAgICAgICAgdmFyIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cm9scyA9IFNsaWRlcy5nZXRJbihpKS5tYXAoZnVuY3Rpb24gKFNsaWRlKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgIHJldHVybiBTbGlkZS5zbGlkZS5pZDtcbiAgICAgICAgfSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgdGV4dCA9ICFoYXNGb2N1cygpICYmIHBlclBhZ2UgPiAxID8gaTE4bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucGFnZVggOiBpMThuLnNsaWRlWDtcbiAgICAgICAgYmluZChidXR0b24sICJjbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2siLCBhcHBseShvbkNsaWNrLCBpKSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb25LZXlib2FyZCkge1xuICAgICAgICAgIGJpbmQoYnV0dG9uLCAia2V5ZG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd24iLCBhcHBseShvbktleWRvd24sIGkpKTtcbiAgICAgICAgfVxuXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzZXRBdHRyaWJ1dGUobGksIFJPTEUsICJwcmVzZW50YXRpb24iKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldEF0dHJpYnV0ZShidXR0b24sIFJPTEUsICJ0YWIiKTtcbiAgICAgICAgc2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShidXR0b24sIEFSSUFfQ09OVFJPTFMsIGNvbnRyb2xzLmpvaW4oIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIikpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX0xBQkVMLCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ybWF0KHRleHQsIGkgKyAxKSk7XG4gICAgICAgIHNldEF0dHJpYnV0ZShidXR0b24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBUQUJfSU5ERVgsIC0xKTtcbiAgICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxpOiBsaSxcbiAgICAgICAgICBidXR0b246IGJ1dHRvbixcbiAgICAgICAgICBwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogaVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb25DbGljayhwYWdlKSB7XG4gICAgICBnbygiPiIgKyBwYWdlLCB0cnVlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgZnVuY3Rpb24gb25LZXlkb3duKHBhZ2UsIGUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgbGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuICAgICAgdmFyIGtleSA9IG5vcm1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpemVLZXkoZSk7XG4gICAgICB2YXIgZGlyID0gZ2V0RGlyZWN0aW9uKCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIG5leHRQYWdlID0gLTE7XG5cbiAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSUk9XX1JJR0hULCBmYWxzZSwgZGlyKSkge1xuICAgICAgICBuZXh0UGFnZSA9ICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInK3BhZ2UgJSBsZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gcmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoQVJST1dfTEVGVCwgZmFsc2UsIGRpcikpIHtcbiAgICAgICAgbmV4dFBhZ2UgPSAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0tcGFnZSArIGxlbmd0aCkgJSBsZW5ndGg7XG4gICAgICB9IGVsc2UgaWYgKGtleSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT09ICJIb21lIikge1xuICAgICAgICBuZXh0UGFnZSA9IDA7XG4gICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChrZXkgPT09ICJFbmQiKSB7XG4gICAgICAgIG5leHRQYWdlID0gbGVuZ3RoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIDE7XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVtID0gaXRlbXNbbmV4dFBhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlXTtcblxuICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgZm9jdXMoaXRlbS5idScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dG9uKTtcbiAgICAgICAgZ28oIj4iICsgbmV4dFBhZ2UpO1xuICAgICAgICBwcmV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudChlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRGlyZWN0aW9uKCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucGFnaW5hdGlvbkRpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpb24gfHwgb3B0aW9ucy5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGdldEF0KGluZGV4KSB7XG4gICAgICByZXR1cm4gaXRlbXNbQ29udHJvbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IudG9QYWdlKGluZGV4KV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICAgIHZhciBwcmV2ID0gZ2V0QXQoZ2V0SW5kZXgodHJ1ZSkpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBjdXJyID0gZ2V0QXQoZ2V0SW5kZXgoKSk7XG5cbiAgICAgIGlmIChwcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICB2YXIgYnV0dG9uID0gcHJldi5idXR0b247XG4gICAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVDbGFzcyhidXR0b24sIENMQVNTX0FDVElWRSk7XG4gICAgICAgIHJlbW92ZUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHRyaWJ1dGUoYnV0dG9uLCBBUklBX1NFTEVDVEVEKTtcbiAgICAgICAgc2V0QXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYnV0ZShidXR0b24sIFRBQl9JTkRFWCwgLTEpO1xuICAgICAgfVxuXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKGN1cnIpIHtcbiAgICAgICAgdmFyIF9idXR0b24gPSBjdXJyLmJ1dHRvbjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGFkZENsYXNzKF9idXR0b24sIENMQVNTX0FDVElWRSk7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgQVJJQV9TRUxFQ1RFRCwgdHJ1ZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgVEFCX0lOREVYLCAiIik7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRCwge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJldiwgY3Vycik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInczogaXRlbXMsXG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBkZXN0cm95OiBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSxcbiAgICAgIGdldEF0OiBnZXRBdCxcbiAgICAgIHVwZGF0ZTogdXBkYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZVxuICAgIH07XG4gIH1cblxuICB2YXIgVFJJR0dFUl9LRVlTID0gWyIgIiwgIkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlciJdO1xuXG4gIGZ1bmN0aW9uIFN5bmMoU3BsaWRlMiwgQ29tcG9uZW50czIsIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zKSB7XG4gICAgdmFyIGlzTmF2aWdhdGlvbiA9IG9wdGlvbnMuaXNOYXZpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbixcbiAgICAgICAgc2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpZGVGb2N1cztcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGV2ZW50cyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgU3BsaWRlMi5zcGxpZGVzLmZvckVhY2goZnVuY3Rpb24gKHRhcmdldCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgaWYgKCF0YXJnZXQuaXNQYXJlbnQpIHtcbiAgICAgICAgICBzeW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYyhTcGxpZGUyLCB0YXJnZXQuc3BsaWRlKTtcbiAgICAgICAgICBzeW5jKHRhcmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BsaWRlLCBTcGxpZGUyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoaXNOYXZpZ2F0aW9uKSB7XG4gICAgICAgIG5hdmlnYXRlKCk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LmRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm95KCk7XG4gICAgICB9KTtcbiAgICAgIGVtcHR5KGV2ZW50cyk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgICBkZXN0cm95KCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgbW91bnQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzeW5jKHNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIHRhcmdldCkge1xuICAgICAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2Uoc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSk7XG4gICAgICBldmVudC5vbihFVkVOVF9NT1ZFLCBmdW5jdGlvbiAoaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4LCBwcmV2LCBkZXN0KSB7XG4gICAgICAgIHRhcmdldC5nbyh0YXJnZXQuaXMoTE9PJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ApID8gZGVzdCA6IGluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgZXZlbnRzLnB1c2goJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBuYXZpZ2F0ZSgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igb24gPSBldmVudC5vbjtcbiAgICAgIG9uKEVWRU5UX0NMSUNLLCBvbkNsaWNrKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBvbihFVkVOVF9TTElERV9LRVlET1dOLCBvbktleWRvd24pO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEXSwgdXBkYXRlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBldmVudHMucHVzaChldmVudCk7XG4gICAgICBldmVudC5lbWl0KEVWRU5UX05BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZJR0FUSU9OX01PVU5URUQsIFNwbGlkZTIuc3BsaWRlcyk7XG4gICAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgIHNldEF0dHJpYnV0ZShDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIuRWxlbWVudHMubGlzdCwgQVJJQV9PUklFTlRBVElPTiwgb3B0aW9ucy5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmdW5jdGlvbiBvbkNsaWNrKFNsaWRlKSB7XG4gICAgICBTcGxpZGUyLmdvKFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5pbmRleCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25LZXlkb3duKFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSwgZSkge1xuICAgICAgaWYgKGluY2x1ZGVzKFRSSUdHRVJfS0VZUywgbm9ybScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbGl6ZUtleShlKSkpIHtcbiAgICAgICAgb25DbGljayhTbGlkZSk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcmV2ZW50KGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgc2V0dXA6IGFwcGx5KENvbXBvbmVudHMyLk1lZGlhLnNldCwge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVGb2N1czogaXNVbmRlZmluZWQoc2xpZGVGb2N1cykgPyBpc05hdmlnYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIDogc2xpZGVGb2N1c1xuICAgICAgfSwgdHJ1ZSksXG4gICAgICBtb3VudDogbW91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LFxuICAgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICAgIHJlbW91bnQ6IHJlbW91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFdoZWVsKFNwbGlkZTIsIENvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBfRXZlbnRJbnRlcmZhY2UxMiA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICAgYmluZCA9IF9FdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UxMi5iaW5kO1xuXG4gICAgdmFyIGxhc3RUaW1lID0gMDtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICAgIGlmIChvcHRpb25zLndoZWVsKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBiaW5kKENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrLCAid2hlZWwiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb25XaGVlbCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgfVxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBmdW5jdGlvbiBvbldoZWVsKGUpIHtcbiAgICAgIGlmIChlLmNhbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZWxhYmxlKSB7XG4gICAgICAgIHZhciBkZWx0YVkgPSBlLmRlbHRhWTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBiYWNrd2FyZHMgPSBkZWx0YVkgPCAwO1xuICAgICAgICB2YXIgdGltZVN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtcCA9IHRpbWVPZihlKTtcblxuICAgICAgICB2YXIgX21pbiA9IG9wdGlvbnMud2hlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsTWluVGhyZXNob2xkIHx8IDA7XG5cbiAgICAgICAgdmFyIHNsZWVwID0gb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mud2hlZWxTbGVlcCB8fCAwO1xuXG4gICAgICAgIGlmIChhYnMoZGVsdGFZKSA+IF9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luICYmIHRpbWVTdGFtcCAtIGxhc3RUaW1lID4gc2xlZXApIHtcbiAgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5nbyhiYWNrd2FyZHMgPyAiPCIgOiAiPiIpO1xuICAgICAgICAgIGxhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0VGltZSA9IHRpbWVTdGFtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHNob3VsZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQcmV2ZW50KGJhY2t3YXJkcykgJiYgcHJldmVudChlKTtcbiAgICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkUHJldmVudChiYWNrd2FyZHMpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICByZXR1cm4gIW9wdGlvbnMucmVsZWFzZVdoZWVsIHx8IFNwbGlkZTIucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlLmlzKE1PVklORykgfHwgQ29tcG9uZW50czIuQ29udHJvbGxlci5nZXRBZGonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlbnQoYmFja3dhcmRzKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBtb3VudDogbW91bnRcbiAgICB9O1xuICB9XG5cbiAgdmFyIFNSX1JFTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPVkFMX0RFTEFZID0gOTA7XG5cbiAgZnVuY3Rpb24gTGl2ZShTcGxpZGUyLCBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX0V2ZW50SW50ZXJmYWNlMTMgPSBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICAgIG9uID0gX0V2ZW50SW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZTEzLm9uO1xuXG4gICAgdmFyIHRyYWNrID0gQ29tcG9uZW50czIuRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnRyYWNrO1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5saXZlICYmICFvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducy5pc05hdmlnYXRpb247XG4gICAgdmFyIHNyID0gY3JlYXRlKCJzcGFuIiwgQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX1NSKTtcbiAgICB2YXIgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoU1JfUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTU9WQUxfREVMQVksIGFwcGx5KHRvZ2dsZSwgZmFsc2UpKTtcblxuICAgIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBtb3VudCgpIHtcbiAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgIGRpc2FibGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCFDb21wb25lbnRzMi5BdXRvcGxheS5pc1BhdXNlZCgpKTtcbiAgICAgICAgc2V0QScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZSh0cmFjaywgQVJJQV9BVE9NSUMsIHRydWUpO1xuICAgICAgICBzci50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dENvbnRlbnQgPSAiXFx1MjAyNiI7XG4gICAgICAgIG9uKEVWRU5UX0FVVE9QTEFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19QTEFZLCBhcHBseShkaXNhYmxlLCB0cnVlKSk7XG4gICAgICAgIG9uKEVWRU5UX0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVRPUExBWV9QQVVTRSwgYXBwbHkoZGlzYWJsZSwgZmFsc2UpKTtcbiAgICAgICAgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRURdLCBhcHBseSh0b2dnbGUsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9nZ2xlKGFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmUpIHtcbiAgICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVJJQV9CVVNZLCBhY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlKTtcblxuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhcHBlbmQodHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrLCBzcik7XG4gICAgICAgIGludGVydmFsLnN0YXJ0KCk7XG4gICAgICB9IGVsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgcmVtb3ZlKHNyKTtcbiAgICAgICAgaW50ZXJ2YWwuY2FuY2VsKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmVtb3ZlQXR0cmlidXRlKHRyYWNrLCBbQVJJQV9MSVZFLCBBUklBX0FUT00nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUMsIEFSSUFfQlVTWV0pO1xuICAgICAgcmVtb3ZlKHNyKTtcbiAgICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gZGlzYWJsZShkaXNhYmxlZCkge1xuICAgICAgaWYgKGVuYWJsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVJJQV9MSVZFLCBkaXNhYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWQgPyAib2ZmIiA6ICJwb2xpdGUiKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VudCxcbiAgICAgIGRpc2FibGU6IGRpc2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlLFxuICAgICAgZGVzdHJveTogZGVzdHJveVxuICAgIH07XG4gIH1cblxuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIENvbXBvbmVudENvbnN0cnVjdG9ycyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWV6ZSh7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIE1lZGlhOiBNZWRpYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgRGlyZWN0aW9uOiBEaXJlY3Rpb24sXG4gICAgRWxlbWVudHM6IEVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyxcbiAgICBTbGlkZXM6IFNsaWRlcyxcbiAgICBMYXlvdXQ6IExheW91dCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgQ2xvbmVzOiBDbG9uZXMsXG4gICAgTW92ZTogTW92ZSxcbiAgICBDb250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcjogQ29udHJvbGxlcixcbiAgICBBcnJvd3M6IEFycm93cyxcbiAgICBBdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEF1dG9wbGF5LFxuICAgIENvdmVyOiBDb3ZlcixcbiAgICBTY3JvbGw6IFNjcm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgRHJhZzogRHJhZyxcbiAgICBLZXlib2FyZDogS2V5Ym9hcmQsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIExhenlMb2FkOiBMYXp5TG9hZCxcbiAgICBQYWdpbmF0aW9uOiBQYWdpbmF0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBTeW5jOiBTeW5jLFxuICAgIFdoZWVsOiBXaGVlbCxcbiAgICBMaXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogTGl2ZVxuICB9KTtcbiAgdmFyIEkxOE4gPSB7XG4gICAgcHJldjogIlByZXZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291cyBzbGlkZSIsXG4gICAgbmV4dDogIk5leHQgc2xpZGUiLFxuICAgIGZpcnN0OiAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dvIHRvIGZpcnN0IHNsaWRlIixcbiAgICBsYXN0OiAiR28gdG8gbGFzdCBzbGlkZSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIHNsaWRlWDogIkdvIHRvIHNsaWRlICVzIixcbiAgICBwYWdlWDogIkdvIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbyBwYWdlICVzIixcbiAgICBwbGF5OiAiU3RhcnQgYXV0b3BsYXkiLFxuICAgIHBhdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogIlBhdXNlIGF1dG9wbGF5IixcbiAgICBjYXJvdXNlbDogImNhcm91c2VsIixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc2xpZGU6ICJzbGlkZSIsXG4gICAgc2VsZWN0OiAiU2VsZWN0IGEgc2xpZGUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIHNob3ciLFxuICAgIHNsaWRlTGFiZWw6ICIlcyBvZiAlcyJcbiAgfTtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBERUZBVUxUUyA9IHtcbiAgICB0eXBlOiAic2xpZGUiLFxuICAgIHJvbGU6ICJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaW9uIixcbiAgICBzcGVlZDogNDAwLFxuICAgIHBlclBhZ2U6IDEsXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lU3RhdHVzOiB0cnVlLFxuICAgIGFycm93czogdHJ1ZSxcbiAgICBwYWdpbmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbjogdHJ1ZSxcbiAgICBwYWdpbmF0aW9uS2V5Ym9hcmQ6IHRydWUsXG4gICAgaW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydmFsOiA1ZTMsXG4gICAgcGF1c2VPbkhvdmVyOiB0cnVlLFxuICAgIHBhdXNlT25GbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdXM6IHRydWUsXG4gICAgcmVzZXRQcm9ncmVzczogdHJ1ZSxcbiAgICBlYXNpbmc6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAuNSwgMSkiLFxuICAgIGRyYWc6IHRydWUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGRpcmVjdGlvbjogImx0ciIsXG4gICAgdHJpbVNwYWNlOiB0cnVlLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmb2N1c2FibGVOb2RlczogImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGlucHV0LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0LCBpZnJhbWUiLFxuICAgIGxpdmU6IHRydWUsXG4gICAgY2xhc3NlczogQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTRVMsXG4gICAgaTE4bjogSTE4TixcbiAgICByZWR1Y2VkTW90aW9uOiB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc3BlZWQ6IDAsXG4gICAgICByZXdpbmRTcGVlZDogMCxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhdXRvcGxheTogInBhdXNlIlxuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBGYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAgIHZhciBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzID0gQ29tcG9uZW50czIuU2xpZGVzO1xuXG4gICAgZnVuY3Rpb24gbW91bnQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgRXZlbnRJbnRlcmZhY2UoU3BsaWRlMikub24oW0VWRU5UX01PVU5URUQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBFVkVOVF9SRUZSRVNIXSwgaW5pdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluaXQoKSB7XG4gICAgICBTbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIFNsaWRlLnN0eWxlKCJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlWCgtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIgKyAxMDAgKiBTbGlkZS5pbmRleCArICIlKSIpO1xuICAgICAgfSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0KGluZGV4LCBkb25lKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGVzLnN0eWxlKCJ0cmFuc2l0aW9uIiwgIm9wYWNpdHkgIiArIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NwZWVkICsgIm1zICIgKyBvcHRpb25zLmVhc2luZyk7XG4gICAgICBuZXh0VGljaygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZG9uZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdW50OiBtb3VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsXG4gICAgICBzdGFydDogc3RhcnQsXG4gICAgICBjYW5jZWw6IG5vb3BcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIFNsaWRlKFNwbGlkZTIsIENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzMiwgb3B0aW9ucykge1xuICAgIHZhciBNb3ZlID0gQ29tcG9uZW50czIuTW92ZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgU2Nyb2xsID0gQ29tcG9uZW50czIuU2Nyb2xsO1xuICAgIHZhciBsaXN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IENvbXBvbmVudHMyLkVsZW1lbnRzLmxpc3Q7XG4gICAgdmFyIHRyYW5zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gYXBwbHkoc3R5bGUsIGxpc3QsICJ0cmFuc2l0aW9uIik7XG4gICAgdmFyIGVuZEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgICAgRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSW50ZXJmYWNlKFNwbGlkZTIpLmJpbmQobGlzdCwgInRyYW5zaXRpb25lbmQiLCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gKGUpIHtcbiAgICAgICAgaWYgKGUudGFyZ2V0ID09PSBsaXN0ICYmIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRDYWxsYmFjaykge1xuICAgICAgICAgIGNhbmNlbCgpO1xuICAgICAgICAgIGVuZEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gc3RhcnQoaW5kZXgsIGRvbmUpIHtcbiAgICAgIHZhciBkZXN0aW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gPSBNb3ZlLnRvUG9zaXRpb24oaW5kZXgsIHRydWUpO1xuICAgICAgdmFyIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24oKTtcbiAgICAgIHZhciBzcGVlZCA9IGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGVlZChpbmRleCk7XG5cbiAgICAgIGlmIChhYnMoZGVzdGluYXRpb24gLSBwb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24pID49IDEgJiYgc3BlZWQgPj0gMSkge1xuICAgICAgICBpZiAob3B0aW9ucy51JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlU2Nyb2xsKSB7XG4gICAgICAgICAgU2Nyb2xsLnNjcm9sbChkZXN0aW5hdGlvbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNwZWVkLCBmYWxzZSwgZG9uZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyYW5zaXRpb24oInRyYW5zZm9ybSAiICsgc3BlZWQgKyAibXMgIiArIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmVhc2luZyk7XG4gICAgICAgICAgTW92ZS50cmFuc2xhdGUoZGVzdGluYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0cnVlKTtcbiAgICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7XG4gICAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBNb3ZlLmp1bXAoaW5kZXgpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgZG9uZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZWwoKSB7XG4gICAgICB0cmFuc2l0aW9uKCIiKTtcbiAgICAgIFNjcm9sbC5jYW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3BlZWQoaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB2YXIgcmV3aW5kU3BlZWQgPSBvcHRpb25zLnJld2luZFNwZWVkO1xuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKFNwbGlkZTIuaXMoU0xJREUpICYmIHJld2luZFNwZWVkKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgcHJldiA9IENvbnRyb2xsZXIuZ2V0SW5kZXgodHJ1ZSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgZW5kID0gQ29udHJvbGxlci5nZXRFbmQoKTtcblxuICAgICAgICBpZiAocHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXYgPT09IDAgJiYgaW5kZXggPj0gZW5kIHx8IHByZXYgPj0gZW5kICYmIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiByZXdpbmRTcGVlZDtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdGlvbnMuc3BlZWQ7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIHJldHVybiB7XG4gICAgICBtb3VudDogbW91bnQsXG4gICAgICBzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnQ6IHN0YXJ0LFxuICAgICAgY2FuY2VsOiBjYW5jZWxcbiAgICB9O1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBfU3BsaWRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gX1NwbGlkZSh0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gRXZlbnRJbnRlcmZhY2UoKTtcbiAgICAgIHRoaXMuQ29tcG9uZW50cyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7fTtcbiAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZShDUkVBVEVEKTtcbiAgICAgIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnNwbGlkZXMgPSBbXTtcbiAgICAgIHRoaXMuX28gPSB7fTtcbiAgICAgIHRoaXMuXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFID0ge307XG4gICAgICB2YXIgcm9vdCA9IGlzU3RyaW5nKHRhcmdldCkgPyBxdWVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koZG9jdW1lbnQsIHRhcmdldCkgOiB0YXJnZXQ7XG4gICAgICBhc3NlcnQocm9vdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJvb3QgKyAiIGlzIGludmFsaWQuIik7XG4gICAgICB0aGlzLnJvb3QgPSByb290OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9wdGlvbnMgPSBtZXJnZSh7XG4gICAgICAgIGxhYmVsOiBnZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHJvb3QsIEFSSUFfTEFCRUwpIHx8ICIiLFxuICAgICAgICBsYWJlbGxlZGJ5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogZ2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUxMRURCWSkgfHwgIiJcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9LCBERUZBVUxUUywgX1NwbGlkZS5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgICB0cnkge1xuICAgICAgICBtZXJnZShvcHRpb25zLCBKU09OLnBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzZShnZXRBdHRyaWJ1dGUocm9vdCwgREFUQV9BVFRSSUJVVEUpKSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSBjYXRjaCAoZSkge1xuICAgICAgICBhc3NlcnQoZmFsc2UsICJJbnZhbGlkIEpTTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOIik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX28gPSBPYmplY3QuY3JlYXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZXJnZSh7fSwgb3B0aW9ucykpO1xuICAgIH1cblxuICAgIHZhciBfcHJvdG8gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX1NwbGlkZS5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8ubW91bnQgPSBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbW91bnQoRXh0ZW5zaW9ucywgVHJhbnNpdGlvbikge1xuICAgICAgdmFyIF90aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHRoaXM7XG5cbiAgICAgIHZhciBzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIENvbXBvbmVudHMyID0gdGhpcy5Db21wb25lbnRzO1xuICAgICAgYXNzZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChzdGF0ZS5pcyhbQ1JFQVRFRCwgREVTVFJPWUVEXSksICJBbHJlYWR5IG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkISIpO1xuICAgICAgc3RhdGUuc2V0KENSRUFURUQpO1xuICAgICAgdGhpcy5fQyA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDb21wb25lbnRzMjtcbiAgICAgIHRoaXMuX1QgPSBUcmFuc2l0aW9uIHx8IHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLl9UIHx8ICh0aGlzLmlzKEZBREUpID8gRmFkZSA6IFNsaWRlKTtcbiAgICAgIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLl9FID0gRXh0ZW5zaW9ucyB8fCB0aGlzLl9FO1xuICAgICAgdmFyIENvbnN0cnVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcnMgPSBhc3NpZ24oe30sIENvbXBvbmVudENvbnN0cnVjdG9ycywgdGhpcy5fRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHtcbiAgICAgICAgVHJhbnNpdGlvbjogdGhpcy5fVFxuICAgICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZm9yT3duKENvbnN0cnVjdG9ycywgZnVuY3Rpb24gKENvbXBvbmVudCwga2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSkge1xuICAgICAgICB2YXIgY29tcG9uZW50ID0gQ29tcG9uZW50KF90aGlzLCBDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50czIsIF90aGlzLl9vKTtcbiAgICAgICAgQ29tcG9uZW50czJba2V5XSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb21wb25lbnQ7XG4gICAgICAgIGNvbXBvbmVudC5zZXR1cCAmJiBjb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNldHVwKCk7XG4gICAgICB9KTtcbiAgICAgIGZvck93bihDb21wb25lbnRzMiwgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgICAgY29tcG9uZW50Lm1vdW50ICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb21wb25lbnQubW91bnQoKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5lbWl0KEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1VOVEVEKTtcbiAgICAgIGFkZENsYXNzKHRoaXMucm9vdCwgQ0xBU1NfSU5JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RJQUxJWkVEKTtcbiAgICAgIHN0YXRlLnNldChJRExFKTtcbiAgICAgIHRoaXMuZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoRVZFTlRfUkVBRFkpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBfcHJvdG8uc3luYyA9IGZ1bmN0aW9uIHN5bmMoc3BsaWRlKSB7XG4gICAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcy5zcGxpZGVzLnB1c2goe1xuICAgICAgICBzcGxpZGU6IHNwbGlkZVxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICAgICAgc3BsaWRlLnNwbGlkZXMucHVzaCh7XG4gICAgICAgIHNwbGlkZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMsXG4gICAgICAgIGlzUGFyZW50OiB0cnVlXG4gICAgICB9KTtcblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmICh0aGlzLnN0YXRlLmlzKElETEUpKSB7XG4gICAgICAgIHRoaXMuX0MuU3luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MucmVtb3VudCgpO1xuXG4gICAgICAgIHNwbGlkZS5Db21wb25lbnRzLlN5bmMucmVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBfcHJvdG8uZ28gPSBmdW5jdGlvbiBnbyhjb250cm9sKSB7XG4gICAgICB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5fQy5Db250cm9sbGVyLmdvKGNvbnRyb2wpO1xuXG4gICAgICByZXR1cm4gdGhpczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfTtcblxuICAgIF9wcm90by5vbiA9IGZ1bmN0aW9uIG9uKGV2ZW50cywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmV2ZW50Lm9uKGV2ZW50cywgY2FsbGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfcHJvdG8ub2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiA9IGZ1bmN0aW9uIG9mZihldmVudHMpIHtcbiAgICAgIHRoaXMuZXZlbnQub2ZmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudHMpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIF9wcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgIHZhciBfdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYickZXZlbnQ7XG5cbiAgICAgIChfdGhpcyRldmVudCA9IHRoaXMuZXZlbnQpLmVtaXQuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5KF90aGlzJGV2ZW50LCBbZXZlbnRdLmNvbmNhdChzbGljZShhcmd1bWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAxKSkpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgX3BybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0by5hZGQgPSBmdW5jdGlvbiBhZGQoc2xpZGVzLCBpbmRleCkge1xuICAgICAgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuX0MuU2xpZGVzLmFkZChzbGlkZXMsIGluZGV4KTtcblxuICAgICAgcmV0dXJuIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzO1xuICAgIH07XG5cbiAgICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZShtYXRjaGVyKSB7XG4gICAgICB0aGlzLl9DLlNsaWRlcy5yZW1vdmUobWF0Y2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIpO1xuXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgX3Byb3RvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyA9IGZ1bmN0aW9uIGlzKHR5cGUpIHtcbiAgICAgIHJldHVybiB0aGlzLl9vLnR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlID09PSB0eXBlO1xuICAgIH07XG5cbiAgICBfcHJvdG8ucmVmcmVzaCA9IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiByZWZyZXNoKCkge1xuICAgICAgdGhpcy5lbWl0KEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfcHJvdG8uZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KGNvbXBsZXRlbHkpIHtcbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcGxldGVseSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbXBsZXRlbHkgPSB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5ldmVudCxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgICBpZiAoc3RhdGUuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKENSRUFURUQpKSB7XG4gICAgICAgIEV2ZW50SW50ZXJmYWNlKHRoaXMpLm9uKEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9SRUFEWSwgdGhpcy5kZXN0cm95LmJpbmQodGhpcywgY29tcGxldGVseSkpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvck93bih0aGlzLl9DLCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbXBvbmVudC5kZXN0cm95ICYmIGNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQuZGVzdHJveShjb21wbGV0ZWx5KTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBldmVudC5lbWl0KEVWRU5UX0RFU1RST1kpO1xuICAgICAgICBldmVudC5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdHJveSgpO1xuICAgICAgICBjb21wbGV0ZWx5ICYmIGVtcHR5KHRoaXMuc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMpO1xuICAgICAgICBzdGF0ZS5zZXQoREVTVFJPWUVEKTtcbiAgICAgIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBfY3JlYXRlQ2xhc3MoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19TcGxpZGUsIFt7XG4gICAgICBrZXk6ICJvcHRpb25zIixcbiAgICAgIGdldDogZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX287XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KG9wdGlvbnMpIHtcbiAgICAgICAgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuX0MuTWVkaWEuc2V0KG9wdGlvbnMsIHRydWUsIHRydWUpO1xuICAgICAgfVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9LCB7XG4gICAgICBrZXk6ICJsZW5ndGgiLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fQy5TbGlkZXMuZ2V0TGVuZ3RoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlKTtcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBrZXk6ICJpbmRleCIsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQy5Db250cm9sbGVyLmdldEluZGV4KCk7XG4gICAgICB9XG4gICAgfV0pO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBfU3BsaWRlO1xuICB9KCk7XG5cbiAgdmFyIFNwbGlkZSA9IF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlO1xuICBTcGxpZGUuZGVmYXVsdHMgPSB7fTtcbiAgU3BsaWRlLlNUQVRFUyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBTVEFURVM7XG4gIHJldHVybiBTcGxpZGU7XG59KTtcbicsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUuanMnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzA6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ3sidmVyc2lvbiI6MywiZmlsZSI6InNwbGlkZS1yZW5kZXJlci5taW4uanMiLCJzb3VyY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyI6WyIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9BcnJvd3MvcGF0aC50cyIsIi4uLy4uLycKICAgICAgICAgICAgICAgICAgICAgICAgYidzcmMvanMvY29uc3RhbnRzL2RpcmVjdGlvbnMudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMvRGlyZWN0aW9uL0RpcmVjdGlvbi50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInL2Fycm93cy50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvcHJvamVjdC50cyIsIi4uLycKICAgICAgICAgICAgICAgICAgICAgICAgYicuLi9zcmMvanMvY29uc3RhbnRzL2NsYXNzZXMudHMiLCIuLi8uLi9zcmMvanMvY29uc3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cy9kZWZhdWx0cy50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvaTE4bi50cyIsIi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi8uLi9zcmMvanMvdXRpbHMvYXJyYXlMaWtlL3NsaWNlL3NsaWNlLnRzIiwiLi4vLi4vcycKICAgICAgICAgICAgICAgICAgICAgICAgYidyYy9qcy91dGlscy9mdW5jdGlvbi9hcHBseS9hcHBseS50cyIsIi4uLy4uL3NyYy9qcy91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RpbHMvdHlwZS90eXBlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L3RvQXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInL3RvQXJyYXkudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvYXJyYXkvZm9yRWFjaC9mb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaC50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheS9wdXNoL3B1c2gudHMiLCIuLi8uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4vc3JjL2pzL3V0aWxzL2RvbS9tYXRjaGVzL21hdGNoZXMudHMiLCIuLi8uLi9zcmMvanMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInL3V0aWxzL2RvbS9jaGlsZC9jaGlsZC50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vYycKICAgICAgICAgICAgICAgICAgICAgICAgYidoaWxkcmVuL2NoaWxkcmVuLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iamVjdC9vd25LJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V5cy9vd25LZXlzLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iamVjdC9mb3JPd24vZm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInck93bi50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9vYmplY3QvYXNzaWduL2Fzc2lnbi50cycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCIuLi8uLi9zcmMvanMvdXRpbHMvb2JqZWN0L21lcmdlL21lcmdlLnRzIiwiLi4vLi4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NyYy9qcy91dGlscy9kb20vcmVtb3ZlL3JlbW92ZS50cyIsIi4uLy4uL3NyYy9qcy91dGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHMvZG9tL3VuaXQvdW5pdC50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9lcnJvci9hc3NlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0L2Fzc2VydC50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9tYXRoL21hdGgvbWF0aC50cyIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIuLi8uLi9zcmMvanMvdXRpbHMvc3RyaW5nL2NhbWVsVG9LZWJhYi9jYW1lbFRvS2ViYWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL3N0cmluZy91bmlxdWVJZC91bmlxdWVJZC50cycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCIuLi8uLi9zcmMvanMvY29uc3RydWN0b3JzL0V2ZW50QmluZGVyL0V2ZW50QmluZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheS9lbXB0eS9lbXB0eS50cyIsIi4uLy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi9zcmMvanMvY29uc3RydWN0b3JzL0V2ZW50SW50ZXJmYWNlL0V2ZW50SW50ZXJmYWNlLicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvZXZlbnRzLnRzIiwiLi4vLi4vc3JjL2pzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9yZW5kZXJlci9jb25zdGFudHMvY2xhc3Nlcy50cyIsIi4uLy4uL3NyYy9qcy9yZW5kZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIvY29uc3RhbnRzL2RlZmF1bHRzLnRzIiwiLi4vLi4vc3JjL2pzL3JlbmRlcmVyL1N0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZS9TdHlsZS50cyIsIi4uLy4uL3NyYy9qcy9yZW5kZXJlci9TcGxpZGVSZW5kZXJlci9TJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlUmVuZGVyZXIudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvc3RyaW5nL3BhZC9wYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9xdWVyeUFsbC9xdWVyeUFsbC50cyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYicuLi8uLi9zcmMvanMvY29uc3RhbnRzL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIvKipcXHJcXG4gKiBUaGUgbmFtZXNwYWNlIGZvciBTVkcgZWxlbWVudHMuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGIiL1xcclxcbmV4cG9ydCBjb25zdCBYTUxfTkFNRV9TUEFDRSA9ICdodHRwOi8vd3d3LnciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiMy5vcmcvMjAwMC9zdmcnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBhcnJvdyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIicGF0aC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgUEFUSCA9ICdtMTUuNSAwLjkzMiIKICAgICAgICAgICAgICAgICAgICAgICAgYictNC4zIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuNiA0LjQtJwogICAgICAgICAgICAgICAgICAgICAgICBiIjQuMy00LjQtNC40LTE0LjYtMTQuNnonO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFNWIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0cgd2lkdGggYW5kIGhlaWdodC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgU0laRSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSA0MDtcXHJcXG4iLCIvKipcXHJcXG4gKiBFbnVtZXJhdGVzIHNsaWRlcyBmcm9tIGxlZicKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IHRvIHJpZ2h0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBMVFIgPSAnbHRyJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuLyoqXFxyXFxuICogRW51bWVyYXRlcyBzbGlkZXMgZnJvbSByaWdodCB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgbGVmdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgUlRMID0gJ3J0bCc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIEVudW1lcmF0ZXMgc2xpZGVzIGluIGEgY29sLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgVFRCID0gXCd0dGJcJztcXHJcXG4iLCJpbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IHsgQVJST1dfRE9XTiwgQVJST1dfTEVGVCwgQVJST1dfUklHSFQsIEFSUk9XX1VQJwogICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9hcnJvd3MnO1xcclxcbmltcG9ydCB7IFJUIgogICAgICAgICAgICAgICAgICAgICAgICBiIkwsIFRUQiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kaXJlY3Rpb25zJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJyIKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSBpbnRlcmZhY2UgZm9yIHRoZSBEaXJlY3Rpb24gY29tcG9uZW50LlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlIERpcmVjdGlvbkNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIHJlc29sdmUoIHByb3A6IHN0cmluZywgYXhpc09ubHk/OiBib29sZWFuLCBkaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW9uPzogT3B0aW9uc1snZGlyZWN0aW9uJ10gKTogc3RyaW5nO1xcclxcbiAgb3JpZW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCggdmFsdWU6IG51bWJlciApOiBudW1iZXI7XFxyXFxufVxcclxcblxcclxcbi8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBUaGUgdHJhbnNsYXRpb24gbWFwIGZvciBkaXJlY3Rpb25zLlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBPUklFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiQVRJT05fTUFQID0ge1xcclxcbiAgd2lkdGggICAgIDogWyAnaGVpZ2h0JyBdLFxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgIGxlZnQgICAgICA6IFsgJ3RvcCcsICdyaWdodCcgXSxcXHJcXG4gIHJpZ2h0ICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgOiBbICdib3R0b20nLCAnbGVmdCcgXSxcXHJcXG4gIHggICAgICAgICA6IFsgJ3knICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJdLFxcclxcbiAgWCAgICAgICAgIDogWyAnWScgXSxcXHJcXG4gIFkgICAgICAgICA6IFsgIgogICAgICAgICAgICAgICAgICAgICAgICBiIidYJyBdLFxcclxcbiAgQXJyb3dMZWZ0IDogWyBBUlJPV19VUCwgQVJST1dfUklHSFQgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ10sXFxyXFxuICBBcnJvd1JpZ2h0OiBbIEFSUk9XX0RPV04sIEFSUk9XX0xFRlQgXSxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxufTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgYWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInc29yYnMgdGhlIGRpZmZlcmVuY2UgYW1vbmcgZGlyZWN0aW9ucy5cXHJcXG4gKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgRGlyZWN0aW9uIGNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBEaXJlY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbnMgKTogRGlyZWN0aW9uQ29tcG9uZW50IHtcXHJcXG4gIC8qKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFJlc29sdmVzIHRoZSBwcm92aWRlZCBwcm9wZXJ0eSBuYW1lLlxcclxcbiAgICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAcGFyYW0gcHJvcCAgICAgIC0gQSBwcm9wZXJ0eSBuYW1lIHRvIHRyYW5zbGF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICAgKiBAcGFyYW0gYXhpc09ubHkgIC0gT3B0aW9uYWwuIElmIGB0dXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2AsIHJldHVybnMgdGhlIHNhbWUgcHJvcGVydHkgZm9yIExUUiBhbmQgUlRMLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBkaXJlY3Rpb24gLSBPcHRpb25hbC4gU3BlY2lmeSB0aGUgZGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGBkaXJlY3Rpb25gIG9wdGlvbi5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHJlc29sdmUoIHByb3A6IHN0cmluZywgYXhpJwogICAgICAgICAgICAgICAgICAgICAgICBiInNPbmx5PzogYm9vbGVhbiwgZGlyZWN0aW9uPzogT3B0aW9uc1snZGlyZWN0aW9uJ10gKToiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZyB7XFxyXFxuICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5kaXJlY3Rpb247XFxyXFxuICAgIGNvbnN0IGluZGV4ID0gZGlyZWN0aW9uID09PSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUlRMICYmICEgYXhpc09ubHkgPyAxIDogZGlyZWN0aW9uID09PSBUVEIgPyAwIDogLTE7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICByZXR1cm4gT1JJRU5UQVRJT05fTUFQWyBwcm9wIF0gJiYgT1JJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVEFUSU9OX01BUFsgcHJvcCBdWyBpbmRleCBdXFxyXFxuICAgICAgfHwgcHJvcC5yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VwbGFjZSggL3dpZHRofGxlZnR8cmlnaHQvaSwgKCBtYXRjaCwgb2Zmc2V0ICkgPT4ge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gT1JJRU5UQVRJT05fTUFQWyBtYXRjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2gudG9Mb3dlckNhc2UoKSBdWyBpbmRleCBdIHx8IG1hdGNoO1xcclxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBvZmZzZXQgPiAwID8gcmVwbGFjZW1lbnQuY2hhckF0KCAwICkudG9VcHBlckMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNlKCkgKyByZXBsYWNlbWVudC5zbGljZSggMSApIDogcmVwbGFjZW1lbnQ7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogT3JpZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMgdGhlIHZhbHVlIHRvd2FyZHMgdGhlIGN1cnJlbnQgZGlyZWN0aW9uLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIG9yaWVudC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgb3JpZW50ZWQgdmFsdWUuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBvcmllbnQoIHZhbHVlOiBudW1iZXIgKTogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB7XFxyXFxuICAgIHJldHVybiB2YWx1ZSAqICggb3B0aW9ucy5kaXJlY3Rpb24gPT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBSVEwgPyAxIDogLTEgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICByZXNvbHZlLFxcclxcbiAgICBvcmllbnQsXFxyXFxuICB9O1xcclxcbn1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuIiwiY29uc3QgQVJST1cgPSBcJ0Fycm93XCc7XFxyXFxuZXhwb3J0IGNvbnN0IEFSUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInV19MRUZUICA9IGAkeyBBUlJPVyB9TGVmdGA7XFxyXFxuZXhwb3J0IGNvbnN0IEFSUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInV19SSUdIVCA9IGAkeyBBUlJPVyB9UmlnaHRgO1xcclxcbmV4cG9ydCBjb25zdCBBUlInCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1dfVVAgICAgPSBgJHsgQVJST1cgfVVwYDtcXHJcXG5leHBvcnQgY29uc3QgQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0RPV04gID0gYCR7IEFSUk9XIH1Eb3duYDsiLCIvKipcXHJcXG4gKiBUaGUgcHJvamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgY29kZS5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiJleHBvcnQgY29uc3QgUFJPSkVDVF9DT0RFID0gJ3NwbGlkZSc7XFxyXFxuXFxyXFxuLyoqIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFRoZSBkYXRhIGF0dHJpYnV0ZSBwcmVmaXguXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IERBVEFfQVRUUkknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQlVURSA9IGBkYXRhLSR7IFBST0pFQ1RfQ09ERSB9YDtcXHJcXG4iLCJpbXBvcnQgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiUFJPSkVDVF9DT0RFIH0gZnJvbSAnLi9wcm9qZWN0JztcXHJcXG5cXHJcXG4vKipcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogVGhlIHByZWZpeCBmb3IgY2xhc3Nlcy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgNC4xLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBDTEFTU19QUkVGSVggPSBgJHsgUFJPSkVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQ09ERSB9X19gO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBwcmVmaXggZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdGF0dXMgY2xhc3Nlcy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSA0LjEuMFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiIm4gKi9cXHJcXG5jb25zdCBTVEFUVVNfQ0xBU1NfUFJFRklYID0gJ2lzLSc7XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbi8qKlxcclxcbiAqIEFsbCBjbGFzc2VzIGFzIGNvbnN0YW50cy5cXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1JPT1QgICAgICAgICAgICA9IFBST0pFQ1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0NPREU7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1RSQUNLICAgICAgICAgICA9IGAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJHsgQ0xBU1NfUFJFRklYIH10cmFja2A7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVNUICAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1saXN0YDtcXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGNvbnN0IENMQVNTX1NMSURFICAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfScKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0NMT05FICAgICAgICAgICA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgJHsgQ0xBU1NfU0xJREUgfS0tY2xvbmVgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ09OVEFJTkVSICAgICAgID0gYCR7IENMQVNTX1NMSURFIH1fX2NvbnRhaW5lcmAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BUlJPV1MgICAgICAgICAgPSBgJHsgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1BSRUZJWCB9YXJyb3dzYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfWFycm93YDtcXHJcXG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IENMQVNTX0FSUk9XX1BSRVYgICAgICA9IGAkeyBDTEFTU19BUlJPVyB9LS1wcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldmA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0FSUk9XX05FWFQgICAgICA9IGAkeycKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfQVJST1cgfS0tbmV4dGA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1BBRycKICAgICAgICAgICAgICAgICAgICAgICAgYidJTkFUSU9OICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1wYWdpbmF0aW9uYDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXhwb3J0IGNvbnN0IENMQVNTX1BBR0lOQVRJT05fUEFHRSA9IGAkeyBDTEFTU19QQUdJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05BVElPTiB9X19wYWdlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfUFJPR1JFU1MgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXByb2dyZXNzYDtcXHJcXG5leHBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IENMQVNTX1BST0dSRVNTX0JBUiAgICA9IGAkeyBDTEFTU19QUk9HUkVTUyB9X18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmFyYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVE9HR0xFICAgICAgICAgID0gYCQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneyBDTEFTU19QUkVGSVggfXRvZ2dsZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0dHTEVfUExBWSAgICAgPSBgJHsgQ0xBU1NfVE9HR0xFIH1fX3BsYXlgO1xcclxcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnQgY29uc3QgQ0xBU1NfVE9HR0xFX1BBVVNFICAgID0gYCR7IENMQVNTX1RPR0dMRScKICAgICAgICAgICAgICAgICAgICAgICAgYicgfV9fcGF1c2VgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19TUElOTkVSICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgID0gYCR7IENMQVNTX1BSRUZJWCB9c3Bpbm5lcmA7XFxyXFxuZXhwb3J0IGNvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19TUiAgICAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1zcmA7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmV4cG9ydCBjb25zdCBDTEFTU19JTklUSUFMSVpFRCAgICAgPSBgJHsgU1RBVFVTX0NMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19QUkVGSVggfWluaXRpYWxpemVkYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVElWRSAgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1hY3RpdmVgO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5leHBvcnQgY29uc3QgQ0xBU1NfUFJFViAgICAgICAgICAgID0gYCR7IFNUQVRVU19DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfUFJFRklYIH1wcmV2YDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfTkVYVCAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1uZXh0YDtcXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGNvbnN0IENMQVNTX1ZJU0lCTEUgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1BSRUZJWCB9dmlzaWJsZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0xPQURJTkcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgPSBgJHsgU1RBVFVTX0NMQVNTX1BSRUZJWCB9bG9hZGluZ2A7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBDTEFTU19GT0NVU19JTiAgICAgICAgPSBgJHsgU1RBVFVTX0NMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUkVGSVggfWZvY3VzLWluYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfT1ZFUicKICAgICAgICAgICAgICAgICAgICAgICAgYidGTE9XICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1vdmVyZmxvd2AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBhcnJheSB3aXRoIGFsbCBzdGF0dXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsYXNzZXMgZXhjZXB0IGZvciBgaXMtaW5pdGlhbGl6ZWRgLlxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTVEFUVVNfQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NTRVMgPSBbXFxyXFxuICBDTEFTU19BQ1RJVkUsXFxyXFxuICBDTEFTU19WSVNJQkxFLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIENMQVNTX1BSRVYsXFxyXFxuICBDTEFTU19ORVhULFxcclxcbiAgQ0xBU1NfTE9BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RJTkcsXFxyXFxuICBDTEFTU19GT0NVU19JTixcXHJcXG4gIENMQVNTX09WRVJGTE9XLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5dO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzIGZvciBlbGVtZW50cyB0aGF0IFNwbGlkZSBkeW5hbWljYWxseSBjcmVhdGVzLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgQ0xBU1NFUyA9IHtcXHJcXG4gIHNsaWRlICAgICA6IENMQVNTX1NMSURFLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNsb25lICAgICA6IENMQVNTX0NMT05FLFxcclxcbiAgYXJyb3dzICAgIDogQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX0FSUk9XUyxcXHJcXG4gIGFycm93ICAgICA6IENMQVNTX0FSUk9XLFxcclxcbiAgcHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YgICAgICA6IENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuICBuZXh0ICAgICAgOiBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfQVJST1dfTkVYVCxcXHJcXG4gIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgcGFnZSAgICAgIDogQ0xBU1NfUEFHSU5BVElPTl9QQUdFLFxcclxcbiAgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5uZXIgICA6IENMQVNTX1NQSU5ORVIsXFxyXFxufTtcXHJcXG4iLCJpbXBvcnQgeyBPcCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU0VTIH0gZiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyb20gJy4vY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4vaTE4biIKICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGRlIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhdWx0IG9wdGlvbnMuXFxyXFxuICogTm90ZSB0aGF0IHRoaXMgY29sbGVjdGlvbiBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29lcyBub3QgY29udGFpbiBhbGwgb3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgREVGQVVMVFM6IE9wdGlvbnMgPScKICAgICAgICAgICAgICAgICAgICAgICAgYiIge1xcclxcbiAgdHlwZSAgICAgICAgICAgICAgOiAnc2xpZGUnLFxcclxcbiAgcm9sZSAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICAgICAgIDogJ3JlZ2lvbicsXFxyXFxuICBzcGVlZCAgICAgICAgICAgICA6IgogICAgICAgICAgICAgICAgICAgICAgICBiJyA0MDAsXFxyXFxuICBwZXJQYWdlICAgICAgICAgICA6IDEsXFxyXFxuICBjbG9uZVN0YXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXMgICAgICAgOiB0cnVlLFxcclxcbiAgYXJyb3dzICAgICAgICAgICAgOiB0cnVlLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIHBhZ2luYXRpb24gICAgICAgIDogdHJ1ZSxcXHJcXG4gIHBhZ2luYXRpb25LZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5Ym9hcmQ6IHRydWUsXFxyXFxuICBpbnRlcnZhbCAgICAgICAgICA6IDUwMDAsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGF1c2VPbkhvdmVyICAgICAgOiB0cnVlLFxcclxcbiAgcGF1c2VPbkZvY3VzICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIDogdHJ1ZSxcXHJcXG4gIHJlc2V0UHJvZ3Jlc3MgICAgIDogdHJ1ZSxcXHJcXG4gIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYXNpbmcgICAgICAgICAgICA6ICdjdWJpYy1iZXppZXIoMC4yNSwgMSwgMC41LCAxKScsXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZHJhZyAgICAgICAgICAgICAgOiB0cnVlLFxcclxcbiAgZGlyZWN0aW9uICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgIDogJ2x0cicsXFxyXFxuICB0cmltU3BhY2UgICAgICAgICA6IHRydWUsXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibiAgZm9jdXNhYmxlTm9kZXMgICAgOiAnYSwgYnV0dG9uLCB0ZXh0YXJlYSwgaW5wdXQsICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzZWxlY3QsIGlmcmFtZScsXFxyXFxuICBsaXZlICAgICAgICAgICAgICA6IHRydWUsXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgY2xhc3NlcyAgICAgICAgICAgOiBDTEFTU0VTLFxcclxcbiAgaTE4biAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgIDogSTE4TixcXHJcXG4gIHJlZHVjZWRNb3Rpb246IHtcXHJcXG4gICAgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkICAgICAgOiAwLFxcclxcbiAgICByZXdpbmRTcGVlZDogMCxcXHJcXG4gICAgYXV0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGF5ICAgOiBcJ3BhdXNlXCcsXFxyXFxuICB9LFxcclxcbn07IiwiLyoqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSBjb2xsZWN0aW9uIG9mIGkxOG4gc3RyaW5ncy5cXHJcXG4gKlxcclxcbiAqIEBzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgSTE4TiA9IHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICBwcmV2ICAgICAgOiAnUHJldmlvdXMgc2xpZGUnLFxcclxcbiAgbmV4dCAgICAgIDoiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICdOZXh0IHNsaWRlJyxcXHJcXG4gIGZpcnN0ICAgICA6ICdHbyB0byBmaXJzdCBzbGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZGUnLFxcclxcbiAgbGFzdCAgICAgIDogJ0dvIHRvIGxhc3Qgc2xpZGUnLFxcclxcbiAgcyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJsaWRlWCAgICA6ICdHbyB0byBzbGlkZSAlcycsXFxyXFxuICBwYWdlWCAgICAgOiAnRyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvIHRvIHBhZ2UgJXMnLFxcclxcbiAgcGxheSAgICAgIDogJ1N0YXJ0IGF1dG9wbGF5JyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIsXFxyXFxuICBwYXVzZSAgICAgOiAnUGF1c2UgYXV0b3BsYXknLFxcclxcbiAgY2Fyb3VzIgogICAgICAgICAgICAgICAgICAgICAgICBiImVsICA6ICdjYXJvdXNlbCcsXFxyXFxuICBzbGlkZSAgICAgOiAnc2xpZGUnLFxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHNlbGVjdCAgICA6ICdTZWxlY3QgYSBzbGlkZSB0byBzaG93JyxcXHJcXG4gIHNsaWQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZUxhYmVsOiAnJXMgb2YgJXMnLCAvLyBbIHNsaWRlIG51bWJlciBdIC8gWyBzbGlkZSBzaSIKICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSBdXFxyXFxufTtcXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgc2xpY2UgbWV0aG9kICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3IgYW4gYXJyYXktbGlrZSBvYmplY3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5TGlrZSAtIEFuIGFycmF5LWxpa2Ugb2JqZWN0LlxcclxcbiAqIEBwYXJhbSBzdGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgICAgIC0gT3B0aW9uYWwuIEEgc3RhcnQgaW5kZXguXFxyXFxuICogQHBhcmFtIGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgICAgICAgLSBPcHRpb25hbC4gQSBlbmQgaW5kZXguXFxyXFxuICpcXHJcXG4gKiBAcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBBbiBhcnJheSB3aXRoIHNsaWNlZCBlbGVtZW50cy5cXHJcXG4gKi9cXHJcXG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IGZ1bmN0aW9uIHNsaWNlPFQ+KCBhcnJheUxpa2U6IEFycmF5TGlrZTxUPiwgc3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0PzogbnVtYmVyLCBlbmQ/OiBudW1iZXIgKTogVFtdIHtcXHJcXG4gIHJldHVybiBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoIGFycmF5TGlrZSwgc3RhcnQsIGVuZCApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG59XFxyXFxuIiwiaW1wb3J0IHsgQW55RnVuY3Rpb24sIFNoaWZ0TiB9IGZyb20gXCcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi4vLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi4vLi4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiL2FycmF5TGlrZSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ3JlYXRlIGEgZiIKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHdoZXJlIHByb3ZpZGVkIGFyZ3VtZW50cyBhcmUgYm91bmQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIGB0aGlzYCBwYXJhbWV0ZXIgd2lsbCBiZSBhbHdheXMgbnVsbC5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAcGFyYW0gZnVuYyAtIEEgZnVuY3Rpb24uXFxyXFxuICogQHBhcmFtIGFyZ3MgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0gQXJndW1lbnRzIHRvIGJpbmQgdG8gdGhlIGZ1bmN0aW9uLlxcclxcbiAqXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEByZXR1cm4gQSBmdW5jdGlvbiB3aGVyZSBhcmd1bWVudHMgYXJlIGJvdW5kLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gYXBwbHk8RiBleHRlbmRzIEFueUZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiwgQSBleHRlbmRzIGFueVtdID0gYW55W10+KFxcclxcbiAgZnVuYzogRixcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAuLi5hcmdzOiBBXFxyXFxuKTogKCAuLi5hcmdzOiBTaGlmdE48UGFyYW1ldGVycycKICAgICAgICAgICAgICAgICAgICAgICAgYic8Rj4sIEFbXFwibGVuZ3RoXFwiXT4gKSA9PiBSZXR1cm5UeXBlPEY+O1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGVyZSBwcm92aWRlZCBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidndW1lbnRzIGFyZSBib3VuZC5cXHJcXG4gKiBgdGhpc2AgcGFyYW1ldGVyIHdpbGwgYicKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGFsd2F5cyBudWxsLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGZ1bmMgLSBBIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gYXBwbHkoIGZ1bmM6IEFueUYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiApOiBhbnkge1xcclxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBwcmVmZXItcmVzdC1wYXJhbXMsIHByZWZlci1zcHJlYWRcXHJcXG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuYy5iaW5kKCBudWxsLCAuLi5zbGljZSggYXJndW1lbnRzLCAxICkgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcbiIsImltcG9ydCB7IEFueUZ1bmN0aW9uIH0gZnJvbSBcJy4uLy4uL3R5cGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiIic7XFxyXFxuaW1wb3J0IHsgYXBwbHkgfSBmcm9tICcuLi9mdW5jdGlvbic7XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFRoZSBhbGlhcyBvZiB0aGUgdHlwZSBjaGVjayBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24uXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdHlwZSAgICAtIEEgdHlwZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgdGhlIHNwZWNpZmllZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZS5cXHJcXG4gKi9cXHJcXG5mdW5jdGlvbiB0eXBlT2YoIHR5cGU6IHN0cmluZywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N1YmplY3Q6IHVua25vd24gKTogYm9vbGVhbiB7XFxyXFxuICByZXR1cm4gdHlwZW9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdWJqZWN0ID09PSB0eXBlO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGFuIG9iamVjdCBvciBub3QuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgYW4gbycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBpc09iamVjdCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZWN0IGlzIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Qge1xcclxcbiAgcmV0dXJuICEgaXNOdWxsKCBzdWJqZWN0ICkgJiYgdHlwZU9mKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ29iamVjdCcsIHN1YmplY3QgKTtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQyIKICAgICAgICAgICAgICAgICAgICAgICAgYidoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhbiBhcnJheSBvciBub3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgYW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5LCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGlzQXJyYXk6IDxUPiggc3ViamVjdDogdW5rbm93biApID0+IHN1YmplY3QgaXMgVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidbXSA9IEFycmF5LmlzQXJyYXk7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhIGZ1bmN0aW9uIG9yIG5vdC5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpc0Z1bmN0aW9uID0gPCggc3ViamVjdDogdW5rbm93biApID0+IHN1YmplY3QgaXMgQScKICAgICAgICAgICAgICAgICAgICAgICAgYiJueUZ1bmN0aW9uPmFwcGx5KCB0eXBlT2YsICdmdW5jdGlvbicgKTtcXHJcXG5cXHJcXG4vIgogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGEgc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QgaXMgYSBzdHJpbmcsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgY29uc3QgaXNTdHJpbmcgPSA8KCBzdWJqZWN0OiB1bmtub3duICkgPT4gc3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYmplY3QgaXMgc3RyaW5nPmFwcGx5KCB0eXBlT2YsICdzdHJpbmcnICk7XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBgdW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaW5lZGAgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzdWJqZWN0IGlzIGB1bmRlZmluZWRgLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IGlzVW5kZWZpbmVkID0gPCggc3ViamVjdDonCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHVua25vd24gKSA9PiBzdWJqZWN0IGlzIHVuZGVmaW5lZD5hcHBseSggdHlwZU9mLCAndSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuZGVmaW5lZCcgKTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGVja3MgaWYgdGhlICIKICAgICAgICAgICAgICAgICAgICAgICAgYidnaXZlbiBzdWJqZWN0IGlzIGBudWxsYCBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgYG51bGxgLCBvciBvdGhlcndpc2UgYCcKICAgICAgICAgICAgICAgICAgICAgICAgYidmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbCggc3ViamVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IHVua25vd24gKTogc3ViamVjdCBpcyBudWxsIHtcXHJcXG4gIHJldHVybiBzdWJqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCA9PT0gbnVsbDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YW5jZSBvciBubycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAqIFRoaXMgbWV0aG9kIHRha2VzIGludG8gYWNjb3VudCB3aGljaCBgdycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRvd2AgdGhlIG5vZGUgYmVsb25ncyB0by5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YW5jZSwgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NIVE1MRWxlbWVudCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZWN0IGlzIEhUTUxFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudCB7XFxyXFxuICB0cnkge1xcclxcbiAgICByZXR1cm4gc3ViamVjdCBpbnN0YW5jZScKICAgICAgICAgICAgICAgICAgICAgICAgYidvZiAoICggc3ViamVjdCBhcyBOb2RlICkub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgd2luZG93ICkuSFRNTEVsZW1lbnQ7XFxyXFxuICB9IGNhdGNoICggZSApIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBmYWxzZTtcXHJcXG4gIH1cXHJcXG59IiwiaW1wb3J0IHsgaXNBcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYiIgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBQdXNoIHRoZSBwcm92aWRlZCB2YWx1ZSB0byBhbiBhcnJheSBpZiB0aGUgdmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzIG5vdCBhbiBhcnJheS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSB2YWx1ZSAtIEEgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlIHRvIHB1c2guXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFycmF5IGNvbnRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luaW5nIHRoZSB2YWx1ZSwgb3IgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCBpcyBhbHJlYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSBhbiBhcnJheS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheTxUPicKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHZhbHVlOiBUIHwgVFtdICk6IFRbXSB7XFxyXFxuICByZXR1cm4gaXNBcnJheSggdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlICkgPyB2YWx1ZSA6IFsgdmFsdWUgXTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgJwogICAgICAgICAgICAgICAgICAgICAgICBiInRvQXJyYXkgfSBmcm9tICcuLi90b0FycmF5L3RvQXJyYXknO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBUaGUgZXh0ZW5kZWQgYEFycmF5I2ZvckVhY2hgIG1ldGhvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIHZhbHVlIGFzIGFuIGFyZ3VtZW50LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBwYXJhbSB2YWx1ZXMgICAtIEEgdmFsdWUgb3IgdmFsdWVzIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpdGVyYXRlIG92ZXIuXFxyXFxuICogQHBhcmFtIGl0ZXJhdGVlIC0gQW4gaXRlcmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlIGZ1bmN0aW9uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBmb3JFYWNoPFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiggdmFsdWVzOiBUIHwgVFtdLCBpdGVyYXRlZTogKCB2YWx1ZTogVCwgaW5kZXg6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIsIGFycmF5OiBUW10gKSA9PiB2b2lkICk6IHZvaWQge1xcclxcbiAgdG9BcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHZhbHVlcyApLmZvckVhY2goIGl0ZXJhdGVlICk7XFxyXFxufVxcclxcbiIsImltcG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiInQgeyB0b0FycmF5IH0gZnJvbSAnLi4vdG9BcnJheS90b0FycmF5JztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogRXh0ZW5kZWQgYEFycmF5I3B1c2goKWAgdGhhdCBhY2NlcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0cyBhbiBpdGVtIG9yIGFuIGFycmF5IHdpdGggaXRlbXMuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIGFycmF5IC0gQW4gYXJyYXkgdG8gcHVzaCBpdGVtcy5cXHJcXG4gKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIGl0ZW1zIC0gQW4gaXRlbSBvciBpdGVtcyB0byBwdXNoLlxcclxcbiAqXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEByZXR1cm4gQSBwcm92aWRlZCBhcnJheSBpdHNlbGYuXFxyXFxuICovXFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBmdW5jdGlvbiBwdXNoPFQ+KCBhcnJheTogVFtdLCBpdGVtczogVCB8IFRbXSApOiBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tdIHtcXHJcXG4gIGFycmF5LnB1c2goIC4uLnRvQXJyYXkoIGl0ZW1zICkgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gYXJyYXk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGlzSFRNTEVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IH0gZnJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGNhbiBiZSBzZWxlY3RlZCBieSB0aGUgcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZpZGVkIHNlbGVjdG9yIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBlbG0gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLSBBbiBlbGVtZW50IHRvIGNoZWNrLlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHNlbGVjdG9yIHRvIHRlc3QuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2AgaWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQsIG9yIG90aGVyd2lzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlcyggZWxtOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRWxlbWVudCB8IEV2ZW50VGFyZ2V0LCBzZWxlY3Rvcjogc3RyaW5nICk6IGJvb2xlYW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiIntcXHJcXG4gIHJldHVybiBpc0hUTUxFbGVtZW50KCBlbG0gKSAmJiAoIGVsbVsgJ21zIgogICAgICAgICAgICAgICAgICAgICAgICBiIk1hdGNoZXNTZWxlY3RvcicgXSB8fCBlbG0ubWF0Y2hlcyApLmNhbGwoIGVsbSwgc2VsZWMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9yICk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGNoaWxkcmVuIH0gZnJvbSBcJy4uL2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaGlsZHJlbi9jaGlsZHJlbic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmV0dSIKICAgICAgICAgICAgICAgICAgICAgICAgYidybnMgYSBjaGlsZCBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc3BlY2lmaWVkIHRhZyBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgY2xhc3MgbmFtZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVudCBlbGVtZW50LlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvIGZpbHRlciBjaGlsZHJlbi5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBtYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCBjaGlsZCBlbGVtZW50IGlmIGF2YWlsYWJsZSwgb3Igb3RoZXJ3aXNlIGB1bmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gY2hpbGQ8RSBleHRlbmRzIEgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MRWxlbWVudD4oIHBhcmVudDogSFRNTEVsZW1lbnQsIHNlbGVjdG9yPzogc3RyaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiBFIHwgdW5kZWZpbmVkIHtcXHJcXG4gIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbjxFPiggcGFyZW50LCBzZWxlY3RvciApWyAwIF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NoaWxkIGFzIEU7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IHNsaWNlIH0gZnJvbSBcJy4uJwogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCB7IG1hdGNoZXMgfSBmcm9tICcuLi9tIgogICAgICAgICAgICAgICAgICAgICAgICBiImF0Y2hlcy9tYXRjaGVzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBGaW5kcyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2hpbGRyZW4gdGhhdCBoYXMgdGhlIHNwZWNpZmllZCB0YWcgb3IgY2xhc3MgbmFtZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcGFyYW0gcGFyZW50ICAgLSBBIHBhcmVudCBlbGVtZW50LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBPcHRpb25hbC4gQSBzZWxlY3RvciB0byBmaWx0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGNoaWxkcmVuLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhcnJheSB3aXRoIGZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x0ZXJlZCBjaGlsZHJlbi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gY2hpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVuPEUgZXh0ZW5kcyBIVE1MRWxlbWVudD4oIHBhcmVudDogSFRNTEVsZW1lbnQsIHNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rvcj86IHN0cmluZyApOiBFW10ge1xcclxcbiAgY29uc3QgY2hpbGRyZW4gPSBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50ID8gc2xpY2UoIHBhcmVudC5jaGlsZHJlbiApIGFzIEVbXSA6IFtdO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcmVuLmZpbHRlciggY2hpbGQgPT4gbWF0Y2hlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoIGNoaWxkLCBzZWxlY3RvciApICkgOiBjaGlsZHJlbjtcXHJcXG59XFxyXFxuIiwiLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEFuIGFsaWFzIG9mIGBPYmplY3Qua2V5cygpYFxcclxcbiAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgY29uc3Qgb3duS2V5cyA9IE9iamVjdC5rZXlzOyIsImltcG9ydCB7IG93bicKICAgICAgICAgICAgICAgICAgICAgICAgYiJLZXlzIH0gZnJvbSAnLi4vb3duS2V5cy9vd25LZXlzJztcXHJcXG5cXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduLyoqXFxyXFxuICogSXRlcmF0ZXMgb3ZlciB0aGUgcHJvdmlkZWQgb2JqZWN0IGJ5ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd24gZW51bWVyYWJsZSBrZXlzIHdpdGggY2FsbGluZyB0aGUgaXRlcmF0ZWUgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG9iamVjdCAgIC0gQW4gb2JqZWN0IHRvIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyYXRlIG92ZXIuXFxyXFxuICogQHBhcmFtIGl0ZXJhdGVlIC0gQW4gaXRlcmF0ZWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYHZhbHVlYCBhbmQgYGtleWAgYXMgYXJndW1lbnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gcmlnaHQgICAgLSBJZiBgdHJ1ZWAsIHRoZSBtZXRob2QgaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJhdGVzIG92ZXIgdGhlIG9iamVjdCBmcm9tIHRoZSBlbmQgbGlrZSBgZm9yRWFjaFJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCgpYC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBwcm92aWRlZCBvYmplY3QgaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gZm9yT3duPFQgZXh0ZW5kcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0PihcXHJcXG4gIG9iamVjdDogVCxcXHJcXG4gIGl0ZXJhdGVlOiAoIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogVFsga2V5b2YgVCBdLCBrZXk6IHN0cmluZyApID0+IGJvb2xlYW4gfCB2b2lkLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJpZ2h0PzogYm9vbGVhblxcclxcbik6IFQge1xcclxcbiAgaWYgKCBvYicKICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0ICkge1xcclxcbiAgICAoIHJpZ2h0ID8gb3duS2V5cyggb2JqZWN0ICkucmV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyc2UoKSA6IG93bktleXMoIG9iamVjdCApICkuZm9yRWFjaCgga2V5ID0+IHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJuICAgICAga2V5ICE9PSAnX19wcm90b19fJyAmJiBpdGVyYXRlZSggb2JqZWN0WyBrZXkgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ10sIGtleSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9iamVjdDtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQ2FzdCwgSGVhZCwgUHVzaCwgUicKICAgICAgICAgICAgICAgICAgICAgICAgYiJlc29sdmUsIFNoaWZ0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgeyBzbGljZSB9IGZyb20gJy4uLy4uL2FycmF5TGlrZSc7XFxyXFxuaW1wb3J0IHsgZiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvck93biB9IGZyb20gJy4uL2Zvck93bi9mb3JPd24nO1xcclxcblxcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gKiBBc3NpZ25zIFUgdG8gVC5cXHJcXG4gKlxcclxcbiAqIEB0eXBlUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIFQgLSBBbiBvYmplY3QgdG8gYXNzaWduIHRvLlxcclxcbiAqIEB0eXBlUGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIFUgLSBBbiBvYmplY3QgdG8gYXNzaWduLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gYXNzaWduZWQgb2JqZWN0IHR5cGUuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgQXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2lnbjxULCBVPiA9IE9taXQ8VCwga2V5b2YgVT4gJiBVO1xcclxcblxcclxcbi8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBSZWN1cnNpdmVseSBhc3NpZ25zIFVbXSB0byBULlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEB0eXBlUGFyYW0gVCAtIEFuIG9iamVjdCB0byBhc3NpZ24gdG8uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEB0eXBlUGFyYW0gVSAtIEEgdHVwbGUgY29udGFpbnMgb2JqZWN0cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAcmV0dXJuIEFuIGFzc2lnbmVkIG9iamVjdCB0eXBlLlxcclxcbiAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5leHBvcnQgdHlwZSBBc3NpZ25lZDxUIGV4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdFtdLCBOIGV4dGVuZHMgbnVtYmVyLCBDIGV4dGVuZHMgYW55W10gPSBbXT4gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgMDogVCxcXHJcXG4gIDE6IEFzc2lnbmVkPEFzc2lnbjxULCBIZWFkPFU+PicKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIFNoaWZ0PFU+LCBOLCBQdXNoPEM+PixcXHJcXG59WyBDWydsZW5ndGgnXSBleHRlbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyBOID8gMCA6IDEgXSBleHRlbmRzIGluZmVyIEEgPyBDYXN0PEEsIGFueT4gOiBuZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I7XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUIGV4dGVuZHMgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndD4oIG9iamVjdDogVCApOiBUO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGlvbiBhc3NpZycKICAgICAgICAgICAgICAgICAgICAgICAgYiduPFQgZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmplY3RbXT4oXFxyXFxuICBvYicKICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0OiBULFxcclxcbiAgLi4uc291cmNlczogVVxcclxcbik6IFJlc29sdmU8QXNzaWduJwogICAgICAgICAgICAgICAgICAgICAgICBiImVkPFQsIFUsIFVbJ2xlbmd0aCddPj5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBBc3NpIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2ducyBhbGwgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBhbGwgc291cmNlIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RzIHRvIHRoZSBwcm92aWRlZCBvYmplY3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gbycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCAtIEFuIG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0by5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcmV0dXJuIEFuIG9iamVjdCBhc3NpZ25lZCBwcm9wZXJ0aWVzIG9mICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgc291cmNlcyB0by5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduJwogICAgICAgICAgICAgICAgICAgICAgICBiJzxUIGV4dGVuZHMgb2JqZWN0Piggb2JqZWN0OiBUICk6IGFueSB7XFxyXFxuICAvLyBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtcywgcHJlZmVyLXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJlYWRcXHJcXG4gIHNsaWNlKCBhcmd1bWVudHMsIDEgKS5mb3JFYWNoKCBzb3VyY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0+IHtcXHJcXG4gICAgZm9yT3duKCBzb3VyY2UsICggdmFsdWUsIGtleSApID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgb2JqZWN0WyBrZXkgXSA9IHNvdXJjZVsga2V5IF07XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9ICk7XFxyXFxuICB9ICk7XFxyXFxuXFxyXFxuICByZXR1cm4gb2JqZWN0O1xcclxcbn1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuIiwiaW1wb3J0IHsgQ2FzdCwgSGVhZCwgUHVzaCwgUmVzb2x2ZSwgU2hpZnQgfSBmcicKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbSAnLi4vLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLy4uL2FycmF5TGlrZSc7XFxyXFxuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QgfSIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgZnJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5pbXBvcnQgeyBmb3JPd24gfSBmciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbSAnLi4vZm9yT3duL2Zvck93bic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogIgogICAgICAgICAgICAgICAgICAgICAgICBiJ01lcmdlcyBVIHRvIFQuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVBhcmFtIFQgLSBBbiBvYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0IHRvIG1lcmdlIFUgaW50by5cXHJcXG4gKiBAdHlwZVBhcmFtIFUgLSBBbiBvYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0IHRvIG1lcmdlIHByb3BlcnRpZXMgZnJvbS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIEEgbWVyZ2VkIG9iamVjdCB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCB0eXBlIE1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JnZTxUIGV4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0PiA9IE9taXQ8VCwga2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneW9mIFU+ICYge1xcclxcbiAgWyBLIGluICgga2V5b2YgVCAmIGtleW9mIFUgKSBdOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVsgSyBdIGV4dGVuZHMgb2JqZWN0XFxyXFxuICAgID8gVVsgSyBdIGV4dGVuZHMgYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneVtdXFxyXFxuICAgICAgPyBVWyBLIF1cXHJcXG4gICAgICA6IFRbIEsgXSBleHRlbmRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3RcXHJcXG4gICAgICAgID8gTWVyZ2U8VFsgSyBdLCBVWyBLIF0+IGV4dGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGluZmVyIEEgPyBSZXNvbHZlPENhc3Q8QSwgb2JqZWN0Pj4gOiBuZXZlclxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIDogVVsgSyBdXFxyXFxuICAgIDogVVsgSyBdO1xcclxcbn0gJiBPbWl0PFUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBrZXlvZiBUPjtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZWN1cnNpdmVseSBtZXJnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIFVbXSB0byBULlxcclxcbiAqXFxyXFxuICogQHR5cGVQYXJhbSBUIC0gQW4gb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCB0byBhc3NpZ24gdG8uXFxyXFxuICogQHR5cGVQYXJhbSBVIC0gQSB0dXBsZSBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFpbnMgb2JqZWN0cy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXNzaWduZWQgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCB0eXBlIE1lcmdlZDxUIGV4dGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdFtdLCBOIGV4dGVuZHMgbnVtYmVyLCBDIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHRlbmRzIGFueVtdID0gW10+ID0ge1xcclxcbiAgMDogVCxcXHJcXG4gIDE6IE1lcmdlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic8TWVyZ2U8VCwgSGVhZDxVPj4sIFNoaWZ0PFU+LCBOLCBQdXNoPEM+PixcXHJcXG59WycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgQ1snbGVuZ3RoJ10gZXh0ZW5kcyBOID8gMCA6IDEgXSBleHRlbmRzIGluZmVyIEEgPyBDIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2FzdDxBLCBhbnk+IDogbmV2ZXI7XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIG1lcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTxUIGV4dGVuZHMgb2JqZWN0Piggb2JqZWN0OiBUICk6IFQ7XFxyXFxuXFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBmdW5jdGlvbiBtZXJnZTxUIGV4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tdPihcXHJcXG4gIG9iamVjdDogVCxcXHJcXG4gIC4uLnNvdXJjZXM6IFVcXHJcXG4pJwogICAgICAgICAgICAgICAgICAgICAgICBiIjogUmVzb2x2ZTxNZXJnZWQ8VCwgVSwgVVsnbGVuZ3RoJ10+Plxcclxcblxcclxcbi8qKlxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBSZWN1cnNpdmVseSBtZXJnZXMgc291cmNlIHByb3BlcnRpZXMgdG8gdGhlIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QuXFxyXFxuICogQmUgYXdhcmUgdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZ2UgYXJyYXlzLiBUaGV5IGFyZSBqdXN0IGR1cGxpY2F0ZWQgYnkgYHNsaWNlKClgLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBwYXJhbSBvYmplY3QgLSBBbiBvYmplY3QgdG8gbWVyZ2UgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3BlcnRpZXMgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgbmV3IG9iamVjdCB3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aCBtZXJnZWQgcHJvcGVydGllcy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1lcmdlPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplY3Q6IFQgKTogYW55IHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgc2xpY2UoIGFyZ3VtZW50cywgMSApLmZvckVhY2goIHNvdXJjZSA9PiB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBmb3JPd24oIHNvdXJjZSwgKCB2YWx1ZSwga2V5ICkgPT4ge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBpZiAoIGlzQXJyYXkoIHZhbHVlICkgKSB7XFxyXFxuICAgICAgICBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWyBrZXkgXSA9IHZhbHVlLnNsaWNlKCk7XFxyXFxuICAgICAgfSBlbHNlIGlmICggaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2JqZWN0KCB2YWx1ZSApICkge1xcclxcbiAgICAgICAgb2JqZWN0WyBrZXkgXSA9IG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJnZSgge30sIGlzT2JqZWN0KCBvYmplY3RbIGtleSBdICkgPyBvYmplY3RbIGtleSBdICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHt9LCB2YWx1ZSApO1xcclxcbiAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICBvYmplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0WyBrZXkgXSA9IHZhbHVlO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIH0gKTtcXHJcXG5cXHJcXG4gIHJldHVybiBvYmplY3Q7XFxyXFxufVxcclxcbiIsImknCiAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBmb3JFYWNoIH0gZnJvbSAnLi4vLi4vYXJyYXknO1xcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4vKipcXHJcXG4gKiBSZW1vdmVzIHRoZSBwcm92aWRlZCBub2RlIGZyb20gaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBwYXJlbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gbm9kZXMgLSBBIG5vZGUgb3IgbicKICAgICAgICAgICAgICAgICAgICAgICAgYidvZGVzIHRvIHJlbW92ZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyggbm9kZXM6IE5vZGUgfCBOb2RlW10gKTogdm9pZCB7XFxyXFxuICBmb3JFYWNoKCBuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29kZXMsIG5vZGUgPT4ge1xcclxcbiAgICBpZiAoIG5vZGUgJiYgbm9kZS5wYXJlbnROJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29kZSApIHtcXHJcXG4gICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlICk7XFxyXFxuICAgIH1cXHJcXG4gIH0gKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5cXHJcXG5cXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuLyoqXFxyXFxuICogQXBwZW5kcyBgcHhgIHRvIHRoZSBwcm92aWRlZCBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqIElmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywganVzdCByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJucyBpdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSB2YWx1ZSAtIEEgdmFsdWUgdG8gYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVuZCBgcHhgIHRvLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIHN0cmluZyB3aXRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgQ1NTIHVuaXQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHVuaXQoIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZTogbnVtYmVyIHwgc3RyaW5nICk6IHN0cmluZyB7XFxyXFxuICByZXR1cm4gaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiU3RyaW5nKCB2YWx1ZSApID8gdmFsdWUgOiB2YWx1ZSA/IGAkeyB2YWx1ZSB9cHhgIDogJyIKICAgICAgICAgICAgICAgICAgICAgICAgYidcJztcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgUFJPSkVDVF9DT0RFIH0gZnJvbSBcJycKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi8uLi8uLi9jb25zdGFudHMvcHJvamVjdCc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgcHJvdmlkZWQgY29uZGl0aW9uIGlzIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxzeS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBjb25kaXRpb24gLSBJZiBmYWxzeSwgYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGVycm9yIGlzIHRocm93bi5cXHJcXG4gKiBAcGFyYW0gbWVzc2FnZSAgIC0gT3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmFsLiBBIG1lc3NhZ2UgdG8gZGlzcGxheS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGFzc2VydCggY29uZGl0aW9uOiBhbnksIG1lc3NhZ2U/OiBzdHJpbmcgKTogdm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWQge1xcclxcbiAgaWYgKCAhIGNvbmRpdGlvbiApIHtcXHJcXG4gICAgdGhyb3cgbmV3ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJFcnJvciggYFskeyBQUk9KRUNUX0NPREUgfV0gJHsgbWVzc2FnZSB8fCAnJyB9YCApO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIH1cXHJcXG59XFxyXFxuIiwiZXhwb3J0IGNvbnN0IHsgbWluLCBtYXgsIGZsb29yLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2VpbCwgYWJzIH0gPSBNYXRoO1xcclxcbiIsIi8qKlxcclxcbiAqIENvbnZlcnRzIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgcHJvdmlkZWQgc3RyaW5nIGluIHRoZSBjYW1lbCBjYXNlIHRvIHRoZSBrZWJhYiBjYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBzdHJpbmcgLSBBIHN0cmluZyB0byBjb252ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidydC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gY2FtZWxUb0tlYmFiKCBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nOiBzdHJpbmcgKTogc3RyaW5nIHtcXHJcXG4gIHJldHVybiBzdHJpbmcucmVwbGFjJwogICAgICAgICAgICAgICAgICAgICAgICBiImUoIC8oW2EtejAtOV0pKFtBLVpdKS9nLCAnJDEtJDInICkudG9Mb3dlckNhc2UoKSIKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IHBhZCB9IGZyb20gXCcuLi9wYWQvcGFkJwogICAgICAgICAgICAgICAgICAgICAgICBiIic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogU3RvcmVzIHVuaXF1ZSBJRHMuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuY29uc3QgaWRzOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xcclxcblxcclxcbi8qKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBSZXR1cm5zIGEgc2VxdWVudGlhbCB1bmlxdWUgSUQgYXMgXFwieyBwcmVmaXggfS17ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIgfVxcIi5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBwcmVmaXggLSBBIHByZWZpeCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIHRoZSBJRC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSWQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwcmVmaXg6IHN0cmluZyApOiBzdHJpbmcge1xcclxcbiAgcmV0dXJuIGAkeyBwcmVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l4IH0keyBwYWQoICggaWRzWyBwcmVmaXggXSA9ICggaWRzWyBwcmVmaXggXSB8fCAwICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsgMSApICkgfWA7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFueUZ1bmN0aW9uIH0gZicKICAgICAgICAgICAgICAgICAgICAgICAgYiJyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBlbXB0eSwgZm9yRWFjaCB9ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIgogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlIGZvciBhbiBFdmVudFRhcmdldCBvciBhbiBhcnJheSB3aXRoIEV2ZW50VGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvYmplY3RzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbnR5cGUgRXZlbnRUYXJnZXRzID0gRXZlbnRUYXJnZXQgfCBFdmVudFRhcmdldFsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50QmluZGVyIG9iamVjdC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50QmluZGVyT2JqZWN0IHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBiaW5kKCB0YXJnZXQ6IEV2ZW50VGFyZ2V0cywgZXZlbnRzOiBzdHJpbmcgfCBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiwgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVyT3B0aW9ucyApOiB2b2lkXFxyXFxuICB1bmJpbmQoIHRhcmdldDogRXZlbnRUYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0IHwgRXZlbnRUYXJnZXRbXSwgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidiYWNrPzogQW55RnVuY3Rpb24gKTogdm9pZDtcXHJcXG4gIGRpc3BhdGNoPFQ+KCB0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0OiBFdmVudFRhcmdldCwgZXZlbnQ6IHN0cmluZywgZGV0YWlsPzogVCApOiB2b2lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIGRlc3Ryb3koKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBwcm92aWRlIG1ldGhvZHMgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YnNjcmliZSBuYXRpdmUgZXZlbnRzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuMFxcclxcbiAqIEBjb25zdHJ1Y3RvclxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRXZlbnRCaW5kZXIgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRCaW5kZXIoKTogRXZlbnRCaW5kZXJPYmplY3Qge1xcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogU3RvcmVzIGFsbCBoYW5kbGVycyB0aGF0IGxpc3RlbiB0byBuYXRpdmUgZXZlbnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIGBbIHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSwgY2FsbGJhY2ssICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW1vdmVyIF1gXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsaXN0ZW5lcnM6IFsgRXZlbnRUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0LCBzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZCwgQW55RnVuY3Rpb24sICgpID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiB2b2lkIF1bXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBMaXN0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyB0byBuYXRpdmUgZXZlbnRzLlxcclxcbiAgICogLSBgZGVzdHJveSgpYCBjYW4gdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Vic2NyaWJlIGFsbCBldmVudHMuXFxyXFxuICAgKiAtIEluIElFLCBtZWRpYVF1ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIneUxpc3QgZG9lcyBub3QgaW5oZXJpdCBFdmVudFRhcmdldCxcXHJcXG4gICAqICAgYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCBvbmx5IHN1cHBvcnRzIGRlcHJlY2F0ZWQgYGFkZExpc3RlbmVyYCBhbmQgYHJlbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidMaXN0ZW5lcmAuXFxyXFxuICAgKlxcclxcbiAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYVF1ZXJ5TGlzdC9hZGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTGlzdGVuZXJcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0cyAgLSBBIHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXQgZWxlbWVudCwgdGhlIHdpbmRvdyBvYmplY3Qgb3IgdGhlIGRvY3VtZW50IG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBvciBldmVudHMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGxpc3RlbiB0by5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbGJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NrIGZ1bmN0aW9uLlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW9uYWwuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgb3B0aW9ucyB0byBwYXNzIHRvIHRoZSBgYWRkRXZlbnRMaXN0ZW5lcmAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBiaW5kKFxcclxcbiAgICB0YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0czogRXZlbnRUYXJnZXRzLFxcclxcbiAgICBldmVudHM6IHN0cmluZyB8IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmdbXSxcXHJcXG4gICAgY2FsbGJhY2s6IEFueUZ1bmN0aW9uLFxcclxcbiAgICBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zXFxyXFxuICApOiB2b2lkIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGZvckVhY2hFdmVudCggdGFyZ2V0cywgZXZlbnRzLCAoIHRhcmdldCwgZXZlbnQsIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYW1lc3BhY2UgKSA9PiB7XFxyXFxuICAgICAgY29uc3QgaXNFdmVudFRhcmdldCA9ICciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYWRkRXZlbnRMaXN0ZW5lcicgaW4gdGFyZ2V0O1xcclxcbiAgICAgIGNvbnN0IHJlbW8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVyID0gaXNFdmVudFRhcmdldFxcclxcbiAgICAgICAgPyB0YXJnZXQucmVtb3ZlRXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50TGlzdGVuZXIuYmluZCggdGFyZ2V0LCBldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMgKScKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgICAgIDogdGFyZ2V0WyAncmVtb3ZlTGlzdGVuZXInIF0uYmluZCggdCIKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgY2FsbGJhY2sgKTtcXHJcXG5cXHJcXG4gICAgICBpc0V2ZW50VGFyZ2V0ID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldC5hZGRFdmVudExpc3RlbmVyKCBldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiOiB0YXJnZXRbICdhZGRMaXN0ZW5lcicgXSggY2FsbGJhY2sgKTtcXHJcXG4gICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdGVuZXJzLnB1c2goIFsgdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJlbW92ZXIgXSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBSZW1vdmVzIHRoZSBldmVudCBoYW5kbGVyLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0cyAgLSBBIHRhcmdldCBlbGVtZW50LCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHdpbmRvdyBvYmplY3Qgb3IgdGhlIGRvY3VtZW50IG9iamVjdC5cXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBuYW1lIG9yIG5hbWVzIHRvIHJlbW92ZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbC4gU3BlY2lmeSB0aGUgY2FsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidiYWNrIHRvIHJlbW92ZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdW5iaW5kKCB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0czogRXZlbnRUYXJnZXRzLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGJhY2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCggdGFyZ2V0cywgZXZlbnRzLCAoIHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSApID0+ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlciggbGlzdGVuZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyID0+IHtcXHJcXG4gICAgICAgIGlmICggbGlzdGVuZXJbIDAgXSA9PT0gdGFyZ2V0XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgICAmJiBsaXN0ZW5lclsgMSBdID09PSBldmVudFxcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgJiYgbGlzdGVuZXJbIDIgXSA9PT0gbmFtZXNwYWNlXFxyXFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiAoICEgY2FsbGJhY2sgfHwgbGlzdGVuZXJbIDMgXSA9PT0gY2FsbGJhY2sgKScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgICkge1xcclxcbiAgICAgICAgICBsaXN0ZW5lclsgNCBdKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XFxyXFxuICAgICAgICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxyXFxuICAgICAgfSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEaXNwYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBhIGN1c3RvbSBldmVudCBvZiB0aGUgdGFyZ2V0LlxcclxcbiAgICpcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gdGFyZ2V0IC0gQW4gZXZlbnQgdGFyZ2V0LlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlICAgLSBBbiBldmVudCB0eXBlLlxcclxcbiAgICogQHBhcmFtIGRldGFpbCAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBPcHRpb25hbC4gVGhlIGBkZXRhaWxgIG9iamVjdCBvZiB0aGUgZXZlbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gZXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZnVuY3Rpb24gZGlzcGF0Y2g8VD4oIHRhcmdldDogRXZlbnRUYXJnZXQsIHR5cGU6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmcsIGRldGFpbD86IFQgKTogQ3VzdG9tRXZlbnQge1xcclxcbiAgICBsZXQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IEN1c3RvbUV2ZW50O1xcclxcbiAgICBjb25zdCBidWJibGVzID0gdHJ1ZTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICAgIGlmICggdHlwZW9mIEN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nICkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBlID0gbmV3IEN1c3RvbUV2ZW50KCB0eXBlLCB7IGJ1YmJsZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBkZXRhaWwgfSApO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIGUgPSBkb2N1bScKICAgICAgICAgICAgICAgICAgICAgICAgYiJlbnQuY3JlYXRlRXZlbnQoICdDdXN0b21FdmVudCcgKTtcXHJcXG4gICAgICBlLmluaSIKICAgICAgICAgICAgICAgICAgICAgICAgYid0Q3VzdG9tRXZlbnQoIHR5cGUsIGJ1YmJsZXMsIGZhbHNlLCBkZXRhaWwgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIH1cXHJcXG5cXHJcXG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoIGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHJldHVybiBlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogSXRlcmF0ZXMgb3ZlciBlYWNoIHRhcmdldCBhbmQgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgd2luZG93IG9iamVjdCBvciB0aGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGl0ZXJhdGVlIC0gQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBmb3JFYWNoRXZlbnQoXFxyXFxuICAgIHRhcmdldHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudFRhcmdldHMsXFxyXFxuICAgIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBpdGVyYXRlZTogKCB0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudDogc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZywgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQgKSA9PiB2b2lkXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIHRhcmdldHMsIHRhcmdldCA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIHRhcmdldCAmJiBmb3JFYWNoKCBldmVudHMsIGV2ZW50cyA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcbiAgICAgICAgZXZlbnRzLnNwbGl0KCAnICcgKS5mb3JFYWNoKCBldmVudE5TID0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiB7XFxyXFxuICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZXZlbnROUy5zcGxpdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuJyApO1xcclxcbiAgICAgICAgICBpdGVyYXRlZSggdGFyZ2V0LCBmcmFnbWVudFsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAgXSwgZnJhZ21lbnRbIDEgXSApO1xcclxcbiAgICAgICAgfSApO1xcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIFJlbW92ZXMgYWxsIGxpc3RlbmVycy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgIGxpc3RlbmVycy5mb3JFYWNoKCBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0YSA9PiB7IGRhdGFbIDQgXSgpIH0gKTtcXHJcXG4gICAgZW1wdHkoIGxpc3RlbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIGJpbmQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICB1bmJpbmQsXFxyXFxuICAgIGRpc3BhdGNoLFxcclxcbiAgICBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIEVtcHRpZXMgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcnJheS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEEgYXJyYXkgdG8gZW1wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBlbXB0eSggYXJyYXk6IGFueVsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXSApOiB2b2lkIHtcXHJcXG4gIGFycmF5Lmxlbmd0aCA9IDA7XFxyXFxufVxcclxcbiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJpbXBvcnQgeyBFVkVOVF9ERVNUUk9ZIH0gZnJvbSBcJy4uLy4uL2NvbnN0YW50cy9ldmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnRzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBBbnlGdW5jdGlvbiwgRXZlbnRNYXAgfSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFwcGx5LCBhc3NpZ24sIGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIic0FycmF5LCBzbGljZSwgdG9BcnJheSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW1wb3J0IHsgRXZlbnRCaW5kZXIsIEV2ZW50QmluZGVyT2JqZWN0IH0gZnJvbSAnLi4vRSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ2ZW50QmluZGVyL0V2ZW50QmluZGVyJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyogVGhlIGludGVyZmFjZSBmb3IgdGhlIEV2ZW50SW50ZXJmYWNlIG9iamVjdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZSBFdmVudEludGVyZmFjZU9iamVjdCBleHRlbmRzIEV2ZW50QmluZGVyT2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCB7XFxyXFxuICBvbjxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudDogSywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrOiBFdmVudE1hcFsgSyBdICk6IHZvaWQ7XFxyXFxuICBvbiggZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInczogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIG9mZjxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudHM6IEsgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgS1tdIHwgc3RyaW5nIHwgc3RyaW5nW10gKTogdm9pZDtcXHJcXG4gIGVtaXQ8SyBleCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50OiBLLCAuLi5hcmdzOiBQYXJhbWV0ZXJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzxFdmVudE1hcFsgSyBdPiApOiB2b2lkXFxyXFxuICBlbWl0KCBldmVudDogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgLi4uYXJnczogYW55W10gKTogdm9pZDtcXHJcXG5cXHJcXG4gIC8qKiBAaW50ZXJuYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBidXM6IERvY3VtZW50RnJhZ21lbnQ7XFxyXFxufVxcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gKiBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdGhhdCBwcm92aWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW50ZXJmYWNlIGZvciBpbnRlcm5hbCBhbmQgbmF0aXZlIGV2ZW50cy5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKiBAY29uc3RydWN0b3JcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gU3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHJldHVybiBBIGNvbGxlY3Rpb24gb2YgaW50ZXJmYWNlIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50SW50ZXJmYWNlKCBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlPzogU3BsaWRlICk6IEV2ZW50SW50ZXJmYWNlT2JqZWN0IHtcXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFRoZSBkb2N1bWVudCBmcmFnbWVudCBmb3IgaW50ZXJuYWwgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqIFByb3ZpZGUgdGhlIFNwbGlkZSBpbnN0YW5jZSB0byBzaGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIGJ1cy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgYnVzID0gU3BsaWRlID8gU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5ldmVudC5idXMgOiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBBbiBldmVudCBiaW5kZXIgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gYW4gaW50ZXJuYWwgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9yIGV2ZW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXZlbnQgbmFtZSBvciBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBVc2UgYSBkb3QoJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4pIHRvIGFkZCBhIG5hbWVzcGFjZS5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gb24oIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbicKICAgICAgICAgICAgICAgICAgICAgICAgYid5RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIGJpbmRlci5iaW5kKCBidXMsIHRvQScKICAgICAgICAgICAgICAgICAgICAgICAgYiJycmF5KCBldmVudHMgKS5qb2luKCAnICcgKSwgZSA9PiB7XFxyXFxuICAgICAgY2FsbCIKICAgICAgICAgICAgICAgICAgICAgICAgYidiYWNrLmFwcGx5KCBjYWxsYmFjaywgaXNBcnJheSggZS5kZXRhaWwgKSA/IGUuZGV0YWlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA6IFtdICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIFRyaWdnZXJzIGNhbGxiYWNrIGZ1bmN0aW9ucy5cXHJcXG4gICAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzIGFjY2VwdHMgYWRkaXRpb25hbCBhcmd1bWVudHMgYW5kIHBhc3NlcyB0aGVtIHRvIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFja3MuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGV2ZW50IC0gQW4gZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IG5hbWUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGVtaXQoIGV2ZW50OiBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nICk6IHZvaWQge1xcclxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZWZlci1yZXN0LXBhcmFtcywgcHJlZmVyLXNwcmVhZFxcclxcbiAgICBiaW5kZXIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3BhdGNoKCBidXMsIGV2ZW50LCBzbGljZSggYXJndW1lbnRzLCAxICkgKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB9XFxyXFxuXFxyXFxuICBpZiAoIFNwbGlkZSApIHtcXHJcXG4gICAgU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5ldmVudC5vbiggRVZFTlRfREVTVFJPWSwgYmluZGVyLmRlc3Ryb3kgKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICByZXR1cm4gYXNzaWduKCBiaW5kZXIsIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1cyxcXHJcXG4gICAgb24sXFxyXFxuICAgIG9mZjogYXBwbHkoIGJpbmRlci51bmJpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBidXMgKSxcXHJcXG4gICAgZW1pdCxcXHJcXG4gIH0gKTtcXHJcXG59IiwiZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIidCBjb25zdCBFVkVOVF9NT1VOVEVEICAgICAgICAgICAgPSAnbW91bnRlZCc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibmV4cG9ydCBjb25zdCBFVkVOVF9SRUFEWSAgICAgICAgICAgICAgPSAncmVhZHknIgogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfTU9WRSAgICAgICAgICAgICAgID0gJ21vIgogICAgICAgICAgICAgICAgICAgICAgICBiInZlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfTU9WRUQgICAgICAgICAgICAgID0gIgogICAgICAgICAgICAgICAgICAgICAgICBiIidtb3ZlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0NMSUNLICAgICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgPSAnY2xpY2snO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BQ1RJVkUgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgID0gJ2FjdGl2ZSc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0lOQUNUSVZFIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICAgICAgPSAnaW5hY3RpdmUnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9WIgogICAgICAgICAgICAgICAgICAgICAgICBiIklTSUJMRSAgICAgICAgICAgID0gJ3Zpc2libGUnO1xcclxcbmV4cG9ydCBjb25zdCBFIgogICAgICAgICAgICAgICAgICAgICAgICBiIlZFTlRfSElEREVOICAgICAgICAgICAgID0gJ2hpZGRlbic7XFxyXFxuZXhwb3J0IGNvIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5zdCBFVkVOVF9SRUZSRVNIICAgICAgICAgICAgPSAncmVmcmVzaCc7XFxyXFxuZXhwIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCBjb25zdCBFVkVOVF9VUERBVEVEICAgICAgICAgICAgPSAndXBkYXRlZCc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmV4cG9ydCBjb25zdCBFVkVOVF9SRVNJWkUgICAgICAgICAgICAgPSAncmVzaXplJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1JFU0laRUQgICAgICAgICAgICA9ICdyZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaXplZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0RSQUcgICAgICAgICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiPSAnZHJhZyc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0RSQUdHSU5HICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgPSAnZHJhZ2dpbmcnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9EUkFHR0VEICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICAgID0gJ2RyYWdnZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9TQ1IiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiT0xMICAgICAgICAgICAgID0gJ3Njcm9sbCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiVF9TQ1JPTExFRCAgICAgICAgICAgPSAnc2Nyb2xsZWQnO1xcclxcbmV4cG9ydCBjb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgRVZFTlRfT1ZFUkZMT1cgICAgICAgICAgID0gJ292ZXJmbG93JztcXHJcXG5leHAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3J0IGNvbnN0IEVWRU5UX0RFU1RST1kgICAgICAgICAgICA9ICdkZXN0cm95JztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FSUk9XU19NT1VOVEVEICAgICA9ICdhcnJvd3M6bSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvdW50ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BUlJPV1NfVVBEQVRFRCAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgID0gJ2Fycm93czp1cGRhdGVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfUEFHSSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJOQVRJT05fTU9VTlRFRCA9ICdwYWdpbmF0aW9uOm1vdW50ZWQnO1xcclxcbmV4cG9ydCIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgY29uc3QgRVZFTlRfUEFHSU5BVElPTl9VUERBVEVEID0gJ3BhZ2luYXRpb246dXBkYXRlIgogICAgICAgICAgICAgICAgICAgICAgICBiImQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQgPSAnIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5hdmlnYXRpb246bW91bnRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FVVE9QIgogICAgICAgICAgICAgICAgICAgICAgICBiIkxBWV9QTEFZICAgICAgPSAnYXV0b3BsYXk6cGxheSc7XFxyXFxuZXhwb3J0IGNvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBFVkVOVF9BVVRPUExBWV9QTEFZSU5HICAgPSAnYXV0b3BsYXk6cGxheWluZyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVRPUExBWV9QQVVTRSAgICAgPSAnYXV0b3BsYXkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiOnBhdXNlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfTEFaWUxPQURfTE9BREVEICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICA9ICdsYXp5bG9hZDpsb2FkZWQnO1xcclxcblxcclxcbi8qKiBAaW50ZXJuYWwgKi9cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NMSURFX0tFWURPV04gICAgID0gJ3NrJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1NISUZURUQgICAgICAgICAgID0gJ3NoJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEID0gJ2VpJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuIiwiZXhwb3J0IGNvbnN0IENMQVNTX1JFTkRFUkVEID0gXCdpcy1yZW5kZXJlZFwnJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4iLCJpbXBvcnQgeyBSZW5kZXJlckNvbmZpZyB9IGZyb20gXCcuLi90eXBlcycKICAgICAgICAgICAgICAgICAgICAgICAgYiIvdHlwZXMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIERlZmF1bHQgb3B0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgZm9yIGdlbmVyYXRpbmcgc3RhdGljIEhUTUwuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFJFTkRFUkVSX0RFRkFVTFRfQycKICAgICAgICAgICAgICAgICAgICAgICAgYiJPTkZJRzogUmVuZGVyZXJDb25maWcgPSB7XFxyXFxuICBsaXN0VGFnIDogJ3VsJyxcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBzbGlkZVRhZzogXCdsaVwnLFxcclxcbn07XFxyXFxuIiwiaW1wb3J0IHsgT3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiImlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgZm9yT3duIH0gIgogICAgICAgICAgICAgICAgICAgICAgICBiImZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG5cXHJcXG5pbnRlcmZhY2UgU3R5IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlcyB7XFxyXFxuICBbIGJyZWFrcG9pbnQ6IHN0cmluZyBdOiB7XFxyXFxuICAgIFsgc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVjdG9yOiBzdHJpbmcgXTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJz5cXHJcXG4gIH07XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgZm9yIGdlbmVyYXRpbmcgc3R5bGVzIGFzIGEgc3RyaW5nLlxcclxcbiAqXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjbGFzcyBTdHlsZSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiByZWdpc3RlcmVkIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZXMgY2F0ZWdvcml6ZWQgYnkgZWFjaCBicmVha3BvaW50LlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgcHJpdmF0ZSByZWFkb25seSBzdHlsZXM6IFN0eWxlcyA9IHt9O1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogVGhlIElEIG9mIHRoZSBzbGlkZXIuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBwcml2YXRlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBIb2xkcyBvcHRpb25zLlxcclxcbiAgICovXFxyXFxuICBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmF0ZSByZWFkb25seSBvcHRpb25zOiBPcHRpb25zO1xcclxcblxcclxcbiAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogVGhlIFN0eWxlIGNvbnN0cnVjdG9yLlxcclxcbiAgICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBAcGFyYW0gaWQgICAgICAtIEEgc2xpZGVyIElELlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSBvcHRpb25zIC0gT3B0aW9ucy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3RydWN0b3IoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZDogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zICkge1xcclxcbiAgICB0aGlzLmlkICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgID0gaWQ7XFxyXFxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZWdpc3RlcnMgYSBDU1MgcnVsZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHNlbGVjdG9yIC0gQSBzZWxlY3Rvci5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAcGFyYW0gcHJvcFxcclxcbiAgICogQHBhcmFtIHZhbHVlXFxyXFxuICAgKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIGJyZWFrcG9pbnRcXHJcXG4gICAqL1xcclxcbiAgcnVsZSggc2VsZWN0b3I6IHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpbmcsIHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciwgYnJlYWtwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnQ/OiBzdHJpbmcgKTogdm9pZCB7XFxyXFxuICAgIGJyZWFrcG9pbnQgPSBicmVhaycKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb2ludCB8fCAnZGVmYXVsdCc7XFxyXFxuICAgIGNvbnN0IHNlbGVjdG9ycyA9ICggdCIKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuc3R5bGVzWyBicmVha3BvaW50IF0gPSB0aGlzLnN0eWxlc1sgYnJlYWtwb2ludCBdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCB7fSApO1xcclxcbiAgICBjb25zdCBzdHlsZXMgICAgPSAoIHNlbGVjdG9yc1sgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlbGVjdG9yIF0gPSBzZWxlY3RvcnNbIHNlbGVjdG9yIF0gfHwge30gKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0eWxlc1sgcHJvcCBdID0gdmFsdWU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBCdWlsZHMgc3R5bGVzIGFzIGEgc2luZ2xlIHN0cmluZy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogQHJldHVybiBCdWlsdCBzdHlsZXMuXFxyXFxuICAgKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICBidWlsZCgpOiBzdHJpbmcge1xcclxcbiAgICBsZXQgY3NzID0gJyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBpZiAoIHRoaXMuc3R5bGVzLmRlZmF1bHQgKSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNzcyArPSB0aGlzLmJ1aWxkU2VsZWN0b3JzKCB0aGlzLnN0eWxlcy5kZWZhdWx0ICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIE9iamVjdC5rZXlzKCB0aGlzLnN0eWxlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgKVxcclxcbiAgICAgIC5zb3J0KCAoIG4sIG0gKSA9PiB0aGlzLm9wdGlvbnMubWVkaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJhUXVlcnkgPT09ICdtaW4nID8gK24gLSArbSA6ICttIC0gK24gKVxcclxcbiAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicuZm9yRWFjaCggYnJlYWtwb2ludCA9PiB7XFxyXFxuICAgICAgICBpZiAoIGJyZWFrcCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJvaW50ICE9PSAnZGVmYXVsdCcgKSB7XFxyXFxuICAgICAgICAgIGNzcyArPSBgQG1lZCIKICAgICAgICAgICAgICAgICAgICAgICAgYidpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICR7IGJyZWFrcG9pbnQgfXB4KSB7YDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgICAgIGNzcyArPSB0aGlzLmJ1aWxkU2VsZWN0b3JzKCB0aGlzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZXNbIGJyZWFrcG9pbnQgXSApO1xcclxcbiAgICAgICAgICBjc3MgKz0gYH1gO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICAgIH1cXHJcXG4gICAgICB9ICk7XFxyXFxuXFxyXFxuICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY3NzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBCdWlsZHMgc3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlcyBmb3IgZWFjaCBicmVha3BvaW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3JzIC0gQW4gb2JqZWN0IHdpdGggc3R5bGVzLlxcclxcbiAgICpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIEJ1aWx0IHN0eWxlcy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VpbGRTZWxlY3RvcnMoIHNlbGVjdG9yczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmcsIHN0cmluZyB8IG51bWJlcj4+ICk6IHN0cmluZyB7XFxyXFxuICAgIGxldCBjc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiID0gJyc7XFxyXFxuXFxyXFxuICAgIGZvck93biggc2VsZWN0b3JzLCAoIHN0eWxlcywgcyIKICAgICAgICAgICAgICAgICAgICAgICAgYidlbGVjdG9yICkgPT4ge1xcclxcbiAgICAgIHNlbGVjdG9yID0gYCMkeyB0aGlzLmlkICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9ICR7IHNlbGVjdG9yIH1gLnRyaW0oKTtcXHJcXG4gICAgICBjc3MgKz0gYCR7IHNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciB9IHtgO1xcclxcblxcclxcbiAgICAgIGZvck93biggc3R5bGVzLCAoIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgcHJvcCApID0+IHtcXHJcXG4gICAgICAgIGlmICggdmFsdWUgfHwgdmFsdWUgPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwICkge1xcclxcbiAgICAgICAgICBjc3MgKz0gYCR7IHByb3AgfTogJHsgdmFsdWUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ307YDtcXHJcXG4gICAgICAgIH1cXHJcXG4gICAgICB9ICk7XFxyXFxuXFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGNzcyArPSAnfSc7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIGMiCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3M7XFxyXFxuICB9XFxyXFxufVxcclxcbiIsImltcG9ydCB7IFBBVEgsIFNJWkUsIFgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTUxfTkFNRV9TUEFDRSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQXJyb3dzL3BhdGgnOyIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5pbXBvcnQgeyBEaXJlY3Rpb24sIERpcmVjdGlvbkNvbXBvbmVudCB9IGZybycKICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi8uLi9jb21wb25lbnRzL0RpcmVjdGlvbi9EaXJlY3Rpb24nO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgeyBDTEFTU19BQ1RJVkUsIENMQVNTX0NMT05FLCBDTEFTU19MSVNULCBDTEFTU19SJwogICAgICAgICAgICAgICAgICAgICAgICBiIk9PVCwgQ0xBU1NfU0xJREUsIENMQVNTX1RSQUNLIH0gZnJvbSAnLi4vLi4vY29uc3RhbnQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIicy9jbGFzc2VzJztcXHJcXG5pbXBvcnQgeyBERUZBVUxUUyB9IGZyb20gJy4uLy4uL2MiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib25zdGFudHMvZGVmYXVsdHMnO1xcclxcbmltcG9ydCB7IFRUQiB9IGZyb20gJy4uLy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi9jb25zdGFudHMvZGlyZWN0aW9ucyc7XFxyXFxuaW1wb3J0IHsgRVZFTlRfTU9VTlQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiRUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTE9PUCwgU0xJREUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9ydCB7XFxyXFxuICBhc3NlcnQsXFxyXFxuICBhc3NpZ24sXFxyXFxuICBjYW1lbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUb0tlYmFiLFxcclxcbiAgY2hpbGQsXFxyXFxuICBmb3JPd24sXFxyXFxuICBpc09iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QsXFxyXFxuICBpc1N0cmluZyxcXHJcXG4gIG1heCxcXHJcXG4gIG1lcmdlLFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIHB1c2gsXFxyXFxuICBxdWVyeUFsbCxcXHJcXG4gIHJlbW92ZSxcXHJcXG4gIHVuJwogICAgICAgICAgICAgICAgICAgICAgICBiImlxdWVJZCxcXHJcXG4gIHVuaXQsXFxyXFxufSBmcm9tICcuLi8uLi91dGlscyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IENMQVNTX1JFTkRFUkVEIH0gZnJvbSAnLi4vY29uc3RhbnRzL2NsYXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIic2VzJztcXHJcXG5pbXBvcnQgeyBSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRyB9IGZyb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi9jb25zdGFudHMvZGVmYXVsdHMnO1xcclxcbmltcG9ydCB7IFN0eWxlIH0gZnIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib20gJy4uL1N0eWxlL1N0eWxlJztcXHJcXG5pbXBvcnQgeyBSZW5kZXJlckNvbmZpZywiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIFNsaWRlQ29udGVudCB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVGhlIGNsYXNzIHRvIGdlbmVyYXRlIHN0YXRpYyBIVE1MIG9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgc2xpZGVyIGZvciB0aGUgZmlyc3Qgdmlldy5cXHJcXG4gKlxcclxcbiAqIEBzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY2xhc3MgU3BsaWRlUmVuZGVyZXIgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyBhIHN0eWxlIGVsZW1lbnQgYW5kIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHNwbGlkZSAtIEEgU3BsaWRlIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0YW5jZS5cXHJcXG4gICAqL1xcclxcbiAgc3RhdGljIGNsZWFuKCBzcGxpZGU6IFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUgKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsgb24gfSA9IEV2ZW50SW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSggc3BsaWRlICk7XFxyXFxuICAgIGNvbnN0IHsgcm9vdCB9ID0gc3BsaWRlO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgY29uc3QgY2xvbmVzID0gcXVlcnlBbGwoIHJvb3QsIGAuJHsgQ0xBU1NfQ0xPTkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1gICk7XFxyXFxuXFxyXFxuICAgIG9uKCBFVkVOVF9NT1VOVEVELCAoKSA9PiB7JwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAgICAgIHJlbW92ZSggY2hpbGQoIHJvb3QsICdzdHlsZScgKSApO1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSApO1xcclxcblxcclxcbiAgICByZW1vdmUoIGNsb25lcyApO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgc2xpZGUgY29udGVudHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRlbnRzOiBzdHJpbmdbXScKICAgICAgICAgICAgICAgICAgICAgICAgYicgfCBTbGlkZUNvbnRlbnRbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBkYXRhIG9mIHNsaWRlcy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWFkb25sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3kgc2xpZGVzOiBTbGlkZUNvbnRlbnRbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhlIERpcmVjdGlvbiBjb21wb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncml2YXRlIHJlYWRvbmx5IERpcmVjdGlvbjogRGlyZWN0aW9uQ29tcG9uZW50O1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgdGhlIFN0eWxlIGluc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWFkb25seSBTdHlsZTogU3R5bGU7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBIb2xkcyBvcHRpb25zLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBPcHRpb25zID0ge307XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBIb2xkcyBvcHRpb25zIGZvciB0aGlzIGluc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFJlbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlckNvbmZpZztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHNsaWRlciBJRCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcmVhZG9ubHkgaWQ6IHN0cmluZzsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEFuIGFycmF5IHdpdGggb3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yIGVhY2ggYnJlYWtwb2ludC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWFkbycKICAgICAgICAgICAgICAgICAgICAgICAgYidubHkgYnJlYWtwb2ludHM6IFsgc3RyaW5nLCBPcHRpb25zIF1bXSA9IFtdO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIFNwbGlkZVJlbmRlcmVyIGNvbnN0cnVjdG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY29udGVudHMgLSBBbiBhcnJheSB3aXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCBzbGlkZSBjb250ZW50cy4gRWFjaCBpdGVtIG11c3QgYmUgYW4gSFRNTCBvciBhIHBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbiB0ZXh0LlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW9uYWwuIFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXIgb3B0aW9ucy5cXHJcXG4gICAqIEBwYXJhbSBjb25maWcgICAtIFN0YXRpYyBkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmYXVsdCBvcHRpb25zLlxcclxcbiAgICogQHBhcmFtIGRlZmF1bHRzIC0gRGVmYXVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucyBmb3IgdGhlIHNsaWRlci4gUGFzcyBgU3BsaWRlLmRlZmF1bHRzYCBpZiB5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ291IGFyZSB1c2luZyBpdC5cXHJcXG4gICAqL1xcclxcbiAgY29uc3RydWN0b3IoIGNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czogc3RyaW5nW10gfCBTbGlkZUNvbnRlbnRbXSwgb3B0aW9ucz86IE9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25maWc/OiBSZW5kZXJlckNvbmZpZywgZGVmYXVsdHM/OiBPcHRpb25zICkge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgbWVyZ2UoIERFRkFVTFRTLCBkZWZhdWx0cyB8fCB7fSApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbWVyZ2UoIG1lcmdlKCB0aGlzLm9wdGlvbnMsIERFRkFVTFRTICksIG9wdGlvbnMgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3t9ICk7XFxyXFxuXFxyXFxuICAgIHRoaXMuY29udGVudHMgID0gY29udGVudHM7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB0aGlzLmNvbmZpZyAgICA9IGFzc2lnbigge30sIFJFTkRFUkVSX0RFRkFVTFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0NPTkZJRywgY29uZmlnIHx8IHt9ICk7XFxyXFxuICAgIHRoaXMuaWQgICAgICAgID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRoaXMuY29uZmlnLmlkIHx8IHVuaXF1ZUlkKCAnc3BsaWRlJyApO1xcclxcbiAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5TdHlsZSAgICAgPSBuZXcgU3R5bGUoIHRoaXMuaWQsIHRoaXMub3B0aW9ucyApOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgdGhpcy5EaXJlY3Rpb24gPSBEaXJlY3Rpb24oIG51bGwsIG51bGwsICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLm9wdGlvbnMgKTtcXHJcXG5cXHJcXG4gICAgYXNzZXJ0KCB0aGlzLmNvbnRlbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiIi5sZW5ndGgsICdQcm92aWRlIGF0IGxlYXN0IDEgY29udGVudC4nICk7XFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICB0aGlzLmluaXQoKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEluaXRpYWxpemVzIHRoZSBpbnN0YW5jZS5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgdGhpcy5wYXJzZUJyZWFrcG9pbnRzKCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0aGlzLmluaXRTbGlkZXMoKTtcXHJcXG4gICAgdGhpcy5yZWdpc3RlclInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb290U3R5bGVzKCk7XFxyXFxuICAgIHRoaXMucmVnaXN0ZXJUcmFja1N0eWxlcygpO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgdGhpcy5yZWdpc3RlclNsaWRlU3R5bGVzKCk7XFxyXFxuICAgIHRoaXMucicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZ2lzdGVyTGlzdFN0eWxlcygpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogSW5pdGlhbGl6ZXMgc2xpZGVzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbml0U2xpZGVzKCk6IHZvaWQge1xcclxcbiAgICBwdXNoKCB0aGlzLnNsaWRlcywgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuY29udGVudHMubWFwKCAoIGNvbnRlbnQsIGluZGV4ICkgPT4ge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb250ZW50ID0gaXNTdHJpbmcoIGNvbnRlbnQgKSA/IHsgaHRtbDogY29udGVudCB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IGNvbnRlbnQ7XFxyXFxuICAgICAgY29udGVudC5zdHlsZXMgPSBjb250ZW50LnN0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXMgfHwge307XFxyXFxuICAgICAgY29udGVudC5hdHRycyAgPSBjb250ZW50LmF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidycyB8fCB7fTtcXHJcXG5cXHJcXG4gICAgICB0aGlzLmNvdmVyKCBjb250ZW50ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBgJHsgdGhpcy5vcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgYiJjbGFzc2VzLnNsaWRlIH0gJHsgaW5kZXggPT09IDAgPyBDTEFTU19BQ1RJVkUgOiAnJyB9IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2A7XFxyXFxuXFxyXFxuICAgICAgYXNzaWduKCBjb250ZW50LmF0dHJzLCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgY2xhc3M6IGAkeyBjbGFzc2VzIH0gJHsgY29udGVudC5hdHRycy5jbGFzcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIifHwgJycgfWAudHJpbSgpLFxcclxcbiAgICAgICAgc3R5bGU6IHRoaXMuYnVpbGRTdHkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVzKCBjb250ZW50LnN0eWxlcyApLFxcclxcbiAgICAgIH0gKTtcXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmV0dXJuIGNvbnRlbnQ7XFxyXFxuICAgIH0gKSApO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKCB0aGlzLmlzTG9vcCgpICkge1xcclxcbiAgICAgIHRoaXMuZ2VuZXJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xvbmVzKCB0aGlzLnNsaWRlcyApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgLyoqXFxyXFxuICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciB0aGUgcm9vdCBlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWdpc3RlclJvb3RTdHlsZXMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goICggWyB3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkdGgsIG9wdGlvbnMgXSApID0+IHtcXHJcXG4gICAgICB0aGlzLlN0eWxlLnJ1bGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAnICcsICdtYXgtd2lkdGgnLCB1bml0KCBvcHRpb25zLndpZHRoICksIHdpZHRoICk7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcnMgc3R5bGVzIGZvciB0aGUgdHJhY2sgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByaXZhdGUgcmVnaXN0ZXJUcmFja1N0eWxlcygpOiB2b2lkIHtcXHJcXG4gICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHsgU3R5bGUgfSA9IHRoaXM7XFxyXFxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInJHsgQ0xBU1NfVFJBQ0sgfWA7XFxyXFxuXFxyXFxuICAgIHRoaXMuYnJlYWtwb2ludHMuZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2goICggWyB3aWR0aCwgb3B0aW9ucyBdICkgPT4ge1xcclxcbiAgICAgIFN0eScKICAgICAgICAgICAgICAgICAgICAgICAgYiJsZS5ydWxlKCBzZWxlY3RvciwgdGhpcy5yZXNvbHZlKCAncGFkZGluZ0xlZnQnICksIHRoIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmNzc1BhZGRpbmcoIG9wdGlvbnMsIGZhbHNlICksIHdpZHRoICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgIFN0eWxlLnJ1bGUoIHNlbGVjdG9yLCB0aGlzLnJlc29sdmUoICdwYWRkaW5nUmlnaHQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJyApLCB0aGlzLmNzc1BhZGRpbmcoIG9wdGlvbnMsIHRydWUgKSwgd2lkdGggKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICAgICAgU3R5bGUucnVsZSggc2VsZWN0b3IsICdoZWlnaHQnLCB0aGlzLmNzc1RyYSIKICAgICAgICAgICAgICAgICAgICAgICAgYidja0hlaWdodCggb3B0aW9ucyApLCB3aWR0aCApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGxpc3QgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWdpc3RlckwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0U3R5bGVzKCk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IFN0eWxlIH0gPSB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncztcXHJcXG4gICAgY29uc3Qgc2VsZWN0b3IgPSBgLiR7IENMQVNTX0xJU1QgfWA7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goICggWyB3aWR0aCwgbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJwdGlvbnMgXSApID0+IHtcXHJcXG4gICAgICBTdHlsZS5ydWxlKCBzZWxlY3RvciwgJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0cmFuc2Zvcm0nLCB0aGlzLmJ1aWxkVHJhbnNsYXRlKCBvcHRpb25zICksIHdpZHRoICk7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICAgIGlmICggISB0aGlzLmNzc1NsaWRlSGVpZ2h0KCBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIicyApICkge1xcclxcbiAgICAgICAgU3R5bGUucnVsZSggc2VsZWN0b3IsICdhc3BlY3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLXJhdGlvJywgdGhpcy5jc3NBc3BlY3RSYXRpbyggb3B0aW9ucyApLCB3aWR0aCApIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAvKipcXHJcXG4gICAqIFJlZ2lzdGVycyBzdHlsZXMgZm9yIHNsaWRlcyBhbmQgY2xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lcy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZWdpc3RlclNsaWRlU3R5bGVzKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBTdHlsZSB9ID0gdGhpcztcXHJcXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IHNlbGVjdG9yID0gYC4keyBDTEFTU19TTElERSB9YDtcXHJcXG5cXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuYnJlYWtwb2ludHMuZm9yRWFjaCggKCBbIHdpZHRoLCBvcHRpb25zIF0gKSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIie1xcclxcbiAgICAgIFN0eWxlLnJ1bGUoIHNlbGVjdG9yLCAnd2lkdGgnLCB0aGlzLmMiCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NTbGlkZVdpZHRoKCBvcHRpb25zICksIHdpZHRoICk7XFxyXFxuICAgICAgU3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLnJ1bGUoIHNlbGVjdG9yLCAnaGVpZ2h0JywgdGhpcy5jc3NTbGlkZUhlaWdodCggb3B0aSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbnMgKSB8fCAnMTAwJScsIHdpZHRoICk7XFxyXFxuICAgICAgU3R5bGUucnVsZSggcyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJlbGVjdG9yLCB0aGlzLnJlc29sdmUoICdtYXJnaW5SaWdodCcgKSwgdW5pdCggb3B0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBiInMuZ2FwICkgfHwgJzBweCcsIHdpZHRoICk7XFxyXFxuICAgICAgU3R5bGUucnVsZSggIgogICAgICAgICAgICAgICAgICAgICAgICBiImAkeyBzZWxlY3RvciB9ID4gaW1nYCwgJ2Rpc3BsYXknLCBvcHRpb25zLmNvdmVyID8gJ24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIib25lJyA6ICdpbmxpbmUnLCB3aWR0aCApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBCdWlsZHMgbXVsdGlwbGUgYHRyYW5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhdGVYYCBmb3IgdGhlIGxpc3QgZWxlbWVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEByZXR1cm4gQSBzdHJpbmcgd2l0aCBtdWx0aXBsZSB0cmFuc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlIGZ1bmN0aW9ucy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBidWlsZFRyYW5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUoIG9wdGlvbnM6IE9wdGlvbnMgKTogc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgeycKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVzb2x2ZSwgb3JpZW50IH0gPSB0aGlzLkRpcmVjdGlvbjtcXHJcXG4gICAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHZhbHVlcyA9IFtdO1xcclxcblxcclxcbiAgICB2YWx1ZXMucHVzaCggdGhpcy5jc3NPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Zmc2V0Q2xvbmVzKCBvcHRpb25zICkgKTtcXHJcXG4gICAgdmFsdWVzLnB1c2goIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmNzc09mZnNldEdhcHMoIG9wdGlvbnMgKSApO1xcclxcblxcclxcbiAgICBpZiAoIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLmlzQ2VudGVyKCBvcHRpb25zICkgKSB7XFxyXFxuICAgICAgdmFsdWVzLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCB0aGlzLmJ1aWxkQ3NzVmFsdWUoIG9yaWVudCggLTUwICksICclJyApICk7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIHZhbHVlcy5wdXNoKCAuLi50aGlzLmNzc09mZnNldENlbnRlciggb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicgKSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiB2YWx1ZXNcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgLmZpbHRlciggQm9vbGVhbiApXFxyXFxuICAgICAgLm1hcCggdmFsdWUgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICBiImB0cmFuc2xhdGUkeyByZXNvbHZlKCAnWCcgKSB9KCR7IHZhbHVlIH0pYCApXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgIC5qb2luKCAnICcgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFJldHVybnMgb2Zmc2V0IGZvciB0aGUgbGlzdCBlbGVtZW50LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFRoaXMgZG9lcyBub3QgaW5jbHVkZSBnYXBzIGJlY2F1c2UgaXQgY2FuIG5vdCBiZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudmVydGVkIGludG8gcGVyY2VudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gVGhlIG9mZnNldC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBjcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzT2Zmc2V0Q2xvbmVzKCBvcHRpb25zOiBPcHRpb25zICk6IHN0cmluZyB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjb25zdCB7IHJlc29sdmUsIG9yaWVudCB9ID0gdGhpcy5EaXJlY3Rpb247XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBjb25zdCBjbG9uZUNvdW50ID0gdGhpcy5nZXRDbG9uZUNvdW50KCk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICBpZiAoIHRoaXMuaXNGaXhlZFdpZHRoKCBvcHRpb25zICkgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IHsgdmFsdWUsIHVuaXQgfSA9IHRoaXMucGFyc2VDc3NWYWx1ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIG9wdGlvbnNbIHJlc29sdmUoICdmaXhlZFdpZHRoJyApIF0gKTtcXHJcXG4gICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRoaXMuYnVpbGRDc3NWYWx1ZSggb3JpZW50KCB2YWx1ZSApICogY2xvbmVDbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsIHVuaXQgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBjb25zdCBwZXJjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9IDEwMCAqIGNsb25lQ291bnQgLyBvcHRpb25zLnBlclBhZ2U7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gYCR7IG9yaWVudCggcGVyY2VudCApIH0lYDtcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgb2Zmc2V0IGZvciBjZW50ZXJpbmcgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBhY3RpdmUgc2xpZGUuXFxyXFxuICAgKlxcclxcbiAgICogTm90ZTpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiAoIDEwMCUgKyBnYXAgKSAvIHBlclBhZ2UgLSBnYXBcXHJcXG4gICAqIDEwMCUgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGVyUGFnZSArIGdhcCAvIHBlclBhZ2UgLSBnYXA7XFxyXFxuICAgKiA1MCUgLyBwZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyUGFnZSArICggZ2FwIC8gcGVyUGFnZSAtIGdhcCApIC8gMjtcXHJcXG4gICAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIG9mZnNldC5cXHJcXG4gICAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIHByaXZhdGUgY3NzT2Zmc2V0Q2VudGVyKCBvcHRpb25zOiBPcHRpb25zICk6IHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbmdbXSB7XFxyXFxuICAgIGNvbnN0IHsgcmVzb2x2ZSwgb3JpZW50IH0gPSB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5EaXJlY3Rpb247XFxyXFxuXFxyXFxuICAgIGlmICggdGhpcy5pc0ZpeGVkV2lkdGgoIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zICkgKSB7XFxyXFxuICAgICAgY29uc3QgeyB2YWx1ZSwgdW5pdCB9ID0gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaXMucGFyc2VDc3NWYWx1ZSggb3B0aW9uc1sgcmVzb2x2ZSggJ2ZpeGVkV2lkdGgnICkgXSIKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgICByZXR1cm4gWyB0aGlzLmJ1aWxkQ3NzVmFsdWUoIG9yaWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHZhbHVlIC8gMiApLCB1bml0ICkgXTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgdmFsdWVzID0gW107XFxyXFxuICAgIGNvbnN0IHsgcGVyUGFnZSwgZ2FwICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9ID0gb3B0aW9ucztcXHJcXG5cXHJcXG4gICAgdmFsdWVzLnB1c2goIGAkeyBvcmllbnQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA1MCAvIHBlclBhZ2UgKSB9JWAgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBnYXAgKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGNvbnN0IHsgdmFsdWUsIHVuaXQgfSA9IHRoaXMucGFyc2VDc3NWYWx1ZSggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCApO1xcclxcbiAgICAgIGNvbnN0IGdhcE9mZnNldCA9ICggdmFsdWUgLyBwZXJQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSAtIHZhbHVlICkgLyAyO1xcclxcbiAgICAgIHZhbHVlcy5wdXNoKCB0aGlzLmJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZENzc1ZhbHVlKCBvcmllbnQoIGdhcE9mZnNldCApLCB1bml0ICkgKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHZhbHVlcztcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgb2Zmc2V0IGZvciBnYXBzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGVhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidoIGJyZWFrcG9pbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgb2Zmc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhcyBgY2FsYygpYC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBjc3NPZmZzZXRHYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyggb3B0aW9uczogT3B0aW9ucyApOiBzdHJpbmcge1xcclxcbiAgICBjb25zdCBjbG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVDb3VudCA9IHRoaXMuZ2V0Q2xvbmVDb3VudCgpO1xcclxcblxcclxcbiAgICBpZiAoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbG9uZUNvdW50ICYmIG9wdGlvbnMuZ2FwICkge1xcclxcbiAgICAgIGNvbnN0IHsgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyaWVudCB9ID0gdGhpcy5EaXJlY3Rpb247XFxyXFxuICAgICAgY29uc3QgeyB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHVuaXQgfSA9IHRoaXMucGFyc2VDc3NWYWx1ZSggb3B0aW9ucy5nYXAgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgICAgaWYgKCB0aGlzLmlzRml4ZWRXaWR0aCggb3B0aW9ucyApICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ3NzVmFsdWUoIG9yaWVudCggdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlICogY2xvbmVDb3VudCApLCB1bml0ICk7XFxyXFxuICAgICAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICBjb25zdCB7IHBlclBhZ2UgfSA9IG9wdGlvbnM7XFxyXFxuICAgICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGdhcHMgPSBjbG9uZUNvdW50IC8gcGVyUGFnZTtcXHJcXG4gICAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHRoaXMuYnVpbGRDc3NWYWx1ZSggb3JpZW50KCBnYXBzICogdmFsdWUgKSwgdW5pdCApJwogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gJyc7XFxyXFxuICB9XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXNvbHZlcyB0aGUgcHJvcCBmb3IgdGhlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJyZW50IGRpcmVjdGlvbiBhbmQgY29udmVydHMgaXQgaW50byB0aGUgS2ViYWIgY2FzZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHByb3AgLSBBIHByb3BlcnR5IG5hbWUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIHJlc29sdmUuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBIHJlc29sdmVkIHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9wZXJ0eSBuYW1lIGluIHRoZSBLZWJhYiBjYXNlLlxcclxcbiAgICovXFxyXFxuICBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmF0ZSByZXNvbHZlKCBwcm9wOiBzdHJpbmcgKTogc3RyaW5nIHtcXHJcXG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBjYW1lbFRvS2ViYWIoIHRoaXMuRGlyZWN0aW9uLnJlc29sdmUoIHByb3AgKSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBwYWRkaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMgLSBPcHRpb25zLlxcclxcbiAgICogQHBhcmFtIHJpZ2h0ICAgLSBEZXRlcm1pbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyB3aGV0aGVyIHRvIGdldCBwYWRkaW5nIHJpZ2h0IG9yIGxlZnQuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEByZXR1cm4gUGFkZGluZyBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIHByaXZhdGUgY3NzUGFkZGluZyggb3B0aW9uczogT3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpZ2h0OiBib29sZWFuICk6IHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IHsgcGFkZGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cgfSA9IG9wdGlvbnM7XFxyXFxuICAgIGNvbnN0IHByb3AgPSB0aGlzLkRpcmVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm4ucmVzb2x2ZSggcmlnaHQgPyAncmlnaHQnIDogJ2xlZnQnLCB0cnVlICk7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gcGFkZGluZyAmJiB1bml0KCBwYWRkaW5nWyBwcm9wIF0gfHwgKCBpc08nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYmplY3QoIHBhZGRpbmcgKSA/IDAgOiBwYWRkaW5nICkgKSB8fCAnMHB4JztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgaGVpZ2h0IG9mIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgdHJhY2sgZWxlbWVudCBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgICpcXHJcXG4gICAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIEhlaWdodCBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAqL1xcclxcbiAgcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXZhdGUgY3NzVHJhY2tIZWlnaHQoIG9wdGlvbnM6IE9wdGlvbnMgKTogc3RyaW5nIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIGxldCBoZWlnaHQgPSAnJztcXHJcXG5cXHJcXG4gICAgaWYgKCB0aGlzLmlzVmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRpY2FsKCkgKSB7XFxyXFxuICAgICAgaGVpZ2h0ID0gdGhpcy5jc3NIZWlnaHQoIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zICk7XFxyXFxuICAgICAgYXNzZXJ0KCBoZWlnaHQsIFwnXFwiaGVpZ2h0XFwiIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIicyBtaXNzaW5nLicgKTtcXHJcXG4gICAgICBoZWlnaHQgPSBgY2FsYygkeyBoZWlnaHQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH0gLSAkeyB0aGlzLmNzc1BhZGRpbmcoIG9wdGlvbnMsIGZhbHNlICkgfSAtICR7IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLmNzc1BhZGRpbmcoIG9wdGlvbnMsIHRydWUgKSB9KWA7XFxyXFxuICAgIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIHJldHVybiBoZWlnaHQ7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBSZXR1cm5zIGhlaWdodCBwcm92aWRlZCB0aG91Z2ggb3B0aW9ucyBpbiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NTUyBmb3JtYXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEhlaWdodCBpbiB0aGUgQ1NTICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JtYXQuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgY3NzSGVpZ2h0KCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogT3B0aW9ucyApOiBzdHJpbmcge1xcclxcbiAgICByZXR1cm4gdW5pdCggb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuaGVpZ2h0ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm5zIHdpZHRoIG9mIGVhY2ggc2xpZGUgaW4gdGhlIENTUyBmb3JtYXQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHJldHVybiBXaWR0aCBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIHByaXZhdGUgY3NzU2xpZGVXaWR0aCggb3B0aW9uczogT3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogc3RyaW5nIHtcXHJcXG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b1dpZHRoXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgID8gJydcXHJcXG4gICAgICA6IHVuaXQoIG9wdGlvbnMuZml4ZWRXaWR0aCApICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ8fCAoIHRoaXMuaXNWZXJ0aWNhbCgpID8gJycgOiB0aGlzLmNzc1NsaWRlU2l6ZSggb3B0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMgKSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBoZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcmV0dXJuIEhlaWdodCBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIHByaXZhdGUgY3NzU2xpZGVIZWlnaHQoIG9wdGlvbnM6IE9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICk6IHN0cmluZyB7XFxyXFxuICAgIHJldHVybiB1bml0KCBvcHRpb25zLmZpeGVkSGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCApXFxyXFxuICAgICAgfHwgKCB0aGlzLmlzVmVydGljYWwoKVxcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgID8gKCBvcHRpb25zLmF1dG9IZWlnaHQgPyAnJyA6IHRoaXMuY3NzU2xpZGVTaXplKCBvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucyApIClcXHJcXG4gICAgICAgIDogdGhpcy5jc3NIZWlnaHQoIG9wdGlvbnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJylcXHJcXG4gICAgICApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogUmV0dXJucyB3aWR0aCBvciBoZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiB0aGUgQ1NTIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JtYXQsIGNvbnNpZGVyaW5nIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcmV0dXJuIFdpZHRoIG9yIGhlaWdodCBpbiB0aGUgQ1NTIGZvcm1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgY3NzU2xpZGVTaXplKCBvcHRpb25zOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT3B0aW9ucyApOiBzdHJpbmcge1xcclxcbiAgICBjb25zdCBnYXAgPSB1bml0KCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5nYXAgKTtcXHJcXG4gICAgcmV0dXJuIGBjYWxjKCgxMDAlJHsgZ2FwICYmIGAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsgJHsgZ2FwIH1gIH0pLyR7IG9wdGlvbnMucGVyUGFnZSB8fCAxIH0keyBnYXAgJiYgYCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSAkeyBnYXAgfWAgfSlgO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogUmV0dXJucyB0aGUgYXNwZWN0UmF0aW8gdmFsdWUgdG8gc2ltdWxhdGUgdGhlIGBoZWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0UmF0aW9gIG9wdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBPcHRpb25zLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYXNwZWN0UmF0aW8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGNzc0FzcGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RSYXRpbyggb3B0aW9uczogT3B0aW9ucyApOiBzdHJpbmcge1xcclxcbiAgICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgeyBoZWlnaHRSYXRpbyB9ID0gb3B0aW9ucztcXHJcXG4gICAgcmV0dXJuIGhlaWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaHRSYXRpbyA/IGAkeyAxIC8gaGVpZ2h0UmF0aW8gfWAgOiAnJztcXHJcXG4gIH1cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIEJ1aWxkcyB0aGUgY3NzIHZhbHVlIGJ5IHRoZSBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdmlkZWQgdmFsdWUgYW5kIHVuaXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSAtIEEgdmFsdWUuXFxyXFxuICAgKiBAcGFyYW0gdW5pdCAgLSBBIENTUyB1bmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgYnVpbHQgdmFsdWUgZm9yIGEgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidTUyB2YWx1ZS5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBidWlsZENzc1ZhbHVlKCB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nICk6IHN0cmluZyB7XFxyXFxuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gYCR7IHZhbHVlIH0keyB1bml0IH1gO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogUGFyc2VzIHRoZSBDU1MgdmFsdWUgaW50byBudW1iZXIgYW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB1bml0LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgdmFsdWUgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcnNlLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gb2JqZWN0IHdpdGggdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlIGFuZCB1bml0LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIHBhcnNlQ3NzVmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VlKCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyICk6IHsgdmFsdWU6IG51bWJlciwgdW5pdDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZyB9IHtcXHJcXG4gICAgaWYgKCBpc1N0cmluZyggdmFsdWUgKSApIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgY29uc3QgbnVtYmVyID0gcGFyc2VGbG9hdCggdmFsdWUgKSB8fCAwO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICBjb25zdCB1bml0ICAgPSB2YWx1ZS5yZXBsYWNlKCAvXFxcXGQqKFxcXFwuJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcXFxkKik/LywgJycgKSB8fCAncHgnO1xcclxcbiAgICAgIHJldHVybiB7IHZhbHVlOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyLCB1bml0IH07XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHZhbHVlLCB1bml0OiAncHgnIH07XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBQYXJzZXMgYnJlYWtwb2ludHMgYW5kIGdlbmVyYXRlIG9wdGlvbnMgZm9yIGVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoIGJyZWFrcG9pbnQuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcGFyc2VCcmVha3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2ludHMoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsgYnJlYWtwb2ludHMgfSA9IHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLm9wdGlvbnM7XFxyXFxuXFxyXFxuICAgIHRoaXMuYnJlYWtwb2ludHMucHVzaCggWycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ2RlZmF1bHQnLCB0aGlzLm9wdGlvbnMgXSApO1xcclxcblxcclxcbiAgICBpZiAoIGJyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vha3BvaW50cyApIHtcXHJcXG4gICAgICBmb3JPd24oIGJyZWFrcG9pbnRzLCAoIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLCB3aWR0aCApID0+IHtcXHJcXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B1c2goIFsgd2lkdGgsIG1lcmdlKCBtZXJnZSgge30sIHRoaXMub3B0aW9ucyApLCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyApIF0gKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgc2xpZGUgd2lkdGggaXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpeGVkIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHNsaWRlIHdpZHRoIGlzIGZpeGVkLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgaXNGaXhlZFdpZHRoKCBvcHRpb25zOiBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyApOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuICEhIG9wdGlvbnNbIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLkRpcmVjdGlvbi5yZXNvbHZlKCAnZml4ZWRXaWR0aCcgKSBdO1xcclxcbiAgfVxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBzbGlkZXIgdHlwZSBpcyBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29vcCBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXIgdHlwZSBpcyBsb29wLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIHByaXZhdGUgaXNMb29wKCk6IGJvb2xlYW4ge1xcclxcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHRoaXMub3B0aW9ucy50eXBlID09PSBMT09QO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBhY3RpdmUgc2xpZGUgc2hvdScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZCBiZSBjZW50ZXJlZCBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWVgIGlmIHRoZSBzbGlkZSBzaG91bGQgYmUgY2VudGVyZWQsIG9yIG90aGVyd2lzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYGZhbHNlYC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBpc0NlbnRlciggb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYic6IE9wdGlvbnMgKTogYm9vbGVhbiB7XFxyXFxuICAgIGlmKCBvcHRpb25zLmZvY3VzICcKICAgICAgICAgICAgICAgICAgICAgICAgYiI9PT0gJ2NlbnRlcicgKSB7XFxyXFxuICAgICAgaWYgKCB0aGlzLmlzTG9vcCgpICkgeyIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgIHJldHVybiB0cnVlO1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaWYgKCB0aGlzLm9wdGlvbnMudHlwZSA9PT0gU0xJREUgKSB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmV0dXJuICEgdGhpcy5vcHRpb25zLnRyaW1TcGFjZTtcXHJcXG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiBmYWxzZTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgZGlyZWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBpcyBUVEIgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiB0aGUgZGlyZWN0aW9uIGlzIFRUQiwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBwcml2YXRlIGlzVmVydGljYWwoKTogYm9vbGVhbiB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRpcmVjdGlvbiA9PT0gVFRCO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQnVpbGRzIGNsYXNzZXMgb2YgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSByb290IGVsZW1lbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBDbGFzc2VzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3IgdGhlIHJvb3QgZWxlbWVudCBhcyBhIHNpbmdsZSBzdHJpbmcuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBwcml2YXRlIGJ1aWxkQ2xhc3NlcygpOiBzdHJpbmcge1xcclxcbiAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgeyBvcHRpb25zIH0gPSB0aGlzO1xcclxcblxcclxcbiAgICByZXR1cm4gWycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBDTEFTU19ST09ULFxcclxcbiAgICAgIGAkeyBDTEFTU19ST09UIH0tJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0keyBvcHRpb25zLnR5cGUgfWAsXFxyXFxuICAgICAgYCR7IENMQVNTX1JPT1QgfS0tJwogICAgICAgICAgICAgICAgICAgICAgICBiJyR7IG9wdGlvbnMuZGlyZWN0aW9uIH1gLFxcclxcbiAgICAgIG9wdGlvbnMuZHJhZyAmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYgYCR7IENMQVNTX1JPT1QgfS0tZHJhZ2dhYmxlYCxcXHJcXG4gICAgICBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pc05hdmlnYXRpb24gJiYgYCR7IENMQVNTX1JPT1QgfS0tbmF2YCxcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgQ0xBU1NfQUNUSVZFLFxcclxcbiAgICAgICEgdGhpcy5jb25maWcuaGlkZGVuICYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19SRU5ERVJFRCxcXHJcXG4gICAgXS5maWx0ZXIoIEJvb2xlYW4gKS5qb2luJwogICAgICAgICAgICAgICAgICAgICAgICBiIiggJyAnICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnZlcnQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBwcm92aWRlZCBhdHRyaWJ1dGVzIGludG8gYSBzaW5nbGUgc3RyaW5nLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gYXR0cnMgLSBBbiBvYmplY3Qgd2l0aCBhdHRyaWInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXRlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgYnVpbHQgc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBidWlsZEF0dHJzKCBhdHRyczogUmVjb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4+ICk6IHN0cmluZyB7JwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAgICBsZXQgYXR0ciA9ICcnO1xcclxcblxcclxcbiAgICBmb3JPd24oIGF0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ3RycywgKCB2YWx1ZSwga2V5ICkgPT4ge1xcclxcbiAgICAgIGF0dHIgKz0gdmFsdWUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8gYCAkeyBjYW1lbFRvS2ViYWIoIGtleSApIH09XFwiJHsgdmFsdWUgfVxcImAgOiBcJycKICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIHJldHVybiBhdHRyLnRyaW0oKSIKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnZlcnRzIHByb3ZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZCBzdHlsZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXFxyXFxuICAgKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBzdHlsZXMgLSBBbiBvYmplY3Qgd2l0aCBzdHlsZXMuXFxyXFxuICAgKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcuXFxyXFxuICAgKi9cXHJcXG4gIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l2YXRlIGJ1aWxkU3R5bGVzKCBzdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIidW1iZXI+ICk6IHN0cmluZyB7XFxyXFxuICAgIGxldCBzdHlsZSA9ICcnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgZm9yT3duKCBzdHlsZXMsICggdmFsdWUsIGtleSApID0+IHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgc3R5bGUgKz0gYCAkeyBjYW1lbFRvS2ViYWIoIGtleSApIH06JHsgdmFsdWUgfScKICAgICAgICAgICAgICAgICAgICAgICAgYic7YDtcXHJcXG4gICAgfSApO1xcclxcblxcclxcbiAgICByZXR1cm4gc3R5bGUudHJpbScKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogR2VuZXJhdGVzIEhUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01MIG9mIHNsaWRlcyB3aXRoIGluc2VydGluZyBwcm92aWRlZCBjb250ZW50cy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgSFRNTCBmb3IgYWxsIHNsaWRlcyBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kIGNsb25lcy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZW5kZXJTbGlkZXMoKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IHsgc2xpZGVUYWc6IHRhZyB9ID0gdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uZmlnO1xcclxcblxcclxcbiAgICByZXR1cm4gdGhpcy5zbGlkZXMubWFwKCBjb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9PiB7XFxyXFxuICAgICAgcmV0dXJuIGA8JHsgdGFnIH0gJHsgdGhpcy5idWlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJBdHRycyggY29udGVudC5hdHRycyApIH0+JHsgY29udGVudC5odG1sIHx8ICcnIH08LyR7IgogICAgICAgICAgICAgICAgICAgICAgICBiIiB0YWcgfT5gO1xcclxcbiAgICB9ICkuam9pbiggJycgKTtcXHJcXG4gIH1cXHJcXG5cXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIEFkZCB0aGUgYGJhY2tncm91bmRgIHN0eWxlIGZvciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIGNvdmVyIG1vZGUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRlbnQgLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBzbGlkZSBjb250ZW50LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGNvdmVyKCBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udGVudDogU2xpZGVDb250ZW50ICk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiInlsZXMsIGh0bWwgPSAnJyB9ID0gY29udGVudDtcXHJcXG5cXHJcXG4gICAgaWYgKCB0aGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5vcHRpb25zLmNvdmVyICYmICEgdGhpcy5vcHRpb25zLmxhenlMb2FkICkge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICBjb25zdCBzcmMgPSBodG1sLm1hdGNoKCAvPGltZy4qP3NyY1xcXFxzKj0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxcXHMqKFtcJ1xcIl0pKC4rPylcXFxcMS4qPz4vICk7XFxyXFxuXFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICggc3JjICYmIHNyY1sgMiBdICkge1xcclxcbiAgICAgICAgc3R5bGVzLmJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZ3JvdW5kID0gYGNlbnRlci9jb3ZlciBuby1yZXBlYXQgdXJsKCckeyBzcmNbIDIgXSB9JyIKICAgICAgICAgICAgICAgICAgICAgICAgYicpYDtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIEdlbmVyYXRlcyBjbG9uZXMuXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBjb250ZW50cyAtIEFuIGFycmF5IHdpdGggU2xpZGVDb250ZW50IG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGdlbmVyYXRlQ2xvbmVzKCBjb250ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHM6IFNsaWRlQ29udGVudFtdICk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzIH0gPSB0aGlzLm9wdGlvbnM7XFxyXFxuICAgIGNvbnN0IGNvdW50ICA9IHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmdldENsb25lQ291bnQoKTtcXHJcXG4gICAgY29uc3Qgc2xpZGVzID0gY29udGVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnNsaWNlKCk7XFxyXFxuXFxyXFxuICAgIHdoaWxlICggc2xpZGVzLmxlbmd0aCA8IGNvdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCApIHtcXHJcXG4gICAgICBwdXNoKCBzbGlkZXMsIHNsaWRlcyApO1xcclxcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBwdXNoKCBzbGlkZXMuc2xpY2UoIC1jb3VudCApLnJldmVyc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCksIHNsaWRlcy5zbGljZSggMCwgY291bnQgKSApLmZvckVhY2goICggY29udGVudCwgaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4ICkgPT4ge1xcclxcbiAgICAgIGNvbnN0IGF0dHJzID0gYXNzaWduKCB7fSwgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRlbnQuYXR0cnMsIHsgY2xhc3M6IGAkeyBjb250ZW50LmF0dHJzLmNsYXNzIH0gJHsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzZXMuY2xvbmUgfWAgfSApO1xcclxcbiAgICAgIGNvbnN0IGNsb25lID0gYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lnbigge30sIGNvbnRlbnQsIHsgYXR0cnMgfSApO1xcclxcbiAgICAgIGluZGV4IDwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvdW50ID8gY29udGVudHMudW5zaGlmdCggY2xvbmUgKSA6IGNvbnRlbnRzLnB1c2goIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2xvbmVzIHRvIGdlbmVyYXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgbnVtYmVyIG9mIGNsb25lcycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgZ2V0Q2xvbmVDb3VudCgpOiBudW1iZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgaWYgKCB0aGlzLmlzTG9vcCgpICkge1xcclxcbiAgICAgIGNvbnN0IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMgfSA9IHRoaXM7XFxyXFxuXFxyXFxuICAgICAgaWYgKCBvcHRpb25zLmNsbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMgKSB7XFxyXFxuICAgICAgICByZXR1cm4gb3B0aW9ucy5jbG9uZXM7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cXHJcXG5cXHJcXG4gICAgICBjb25zdCBwZXJQYWdlID0gbWF4KCAuLi50aGlzLmInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVha3BvaW50cy5tYXAoICggWyAsIG9wdGlvbnMgXSApID0+IG9wdGlvbnMucGVyUGFnZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKSApO1xcclxcbiAgICAgIHJldHVybiBwZXJQYWdlICogKCAoIG9wdGlvbnMuZmxpYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrTWF4UGFnZXMgfHwgMSApICsgMSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gMDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogR2VuZXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcyBhcnJvd3MgYW5kIHRoZSB3cmFwcGVyIGVsZW1lbnQuXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gVGhlIEhUTUwgZm9yIGFycm93cy5cXHJcXG4gICAqL1xcclxcbiAgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaXZhdGUgcmVuZGVyQXJyb3dzKCk6IHN0cmluZyB7XFxyXFxuICAgIGxldCBodG1sICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IFwnXCc7XFxyXFxuXFxyXFxuICAgIGh0bWwgKz0gYDxkaXYgY2xhc3M9XFwiJHsgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMub3B0aW9ucy5jbGFzc2VzLmFycm93cyB9XFwiPmA7XFxyXFxuICAgIGh0bWwgKz0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMucmVuZGVyQXJyb3coIHRydWUgKTtcXHJcXG4gICAgaHRtbCArPSB0aGlzLnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXJBcnJvdyggZmFsc2UgKTtcXHJcXG4gICAgaHRtbCArPSBgPC9kaXY+YDtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHJldHVybiBodG1sO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogR2VuZXJhdGVzIGFuIGFycm93IEhUTUwuXFxyXFxuICAgKiBTb21lIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHRyaWJ1dGVzIGFyZSB0ZW1wb3JhcnksIGFuZCBTcGxpZGUgY2hhbmdlcyB0aGVtIGFmdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciBtb3VudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJldiAtIE9wdGlvbnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEhUTUwgZm9yIHRoZSBwcmV2IG9yIG5leHQgYXJyb3cuXFxyXFxuICAgKi9cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcml2YXRlIHJlbmRlckFycm93KCBwcmV2OiBib29sZWFuICk6IHN0cmluZyB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBjb25zdCB7IGNsYXNzZXMsIGkxOG4gfSA9IHRoaXMub3B0aW9ucztcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGNvbnN0IGF0dHJzID0ge1xcclxcbiAgICAgIGNsYXNzICAgIDogYCR7IGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzLmFycm93IH0gJHsgcHJldiA/IGNsYXNzZXMucHJldiA6IGNsYXNzZXMubmV4dCB9JwogICAgICAgICAgICAgICAgICAgICAgICBiImAsXFxyXFxuICAgICAgdHlwZSAgICAgOiAnYnV0dG9uJyxcXHJcXG4gICAgICBhcmlhTGEiCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVsOiBwcmV2ID8gaTE4bi5wcmV2IDogaTE4bi5uZXh0LFxcclxcbiAgICB9O1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgcmV0dXJuIGA8YnV0dG9uICR7IHRoaXMuYnVpbGRBdHRycyggYXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidzICkgfT5gXFxyXFxuICAgICAgK1xcdGA8c3ZnIHhtbG5zPVxcIiR7IFhNTF9OQU1FX1NQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRSB9XFwiIHZpZXdCb3g9XFwiMCAwICR7IFNJWkUgfSAkeyBTSVpFIH1cXCIgd2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoPVxcIiR7IFNJWkUgfVxcIiBoZWlnaHQ9XFwiJHsgU0laRSB9XFwiPmBcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKyBgPHBhdGggZD1cXCIkeyB0aGlzLm9wdGlvbnMuYXJyb3dQYXRoIHx8IFBBVEggfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXCIgLz5gXFxyXFxuICAgICAgKyBgPC9zdmc+YFxcclxcbiAgICAgICsgYDwvYnV0dG9uPicKICAgICAgICAgICAgICAgICAgICAgICAgYidgO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBIJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RNTCBvZiB0aGUgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5lcmF0ZWQgSFRNTC5cXHJcXG4gICAqL1xcclxcbiAgaHRtbCgpOiBzdHJpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgY29uc3QgeyByb290Q2xhc3MsIGxpc3RUYWcsIGFycm93cywgYmVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yZVRyYWNrLCBhZnRlclRyYWNrLCBzbGlkZXIsIGJlZm9yZVNsaWRlciwgYWZ0ZXJTbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZGVyIH0gPSB0aGlzLmNvbmZpZztcXHJcXG5cXHJcXG4gICAgbGV0IGh0bWwgPSAnJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIGh0bWwgKz0gYDxkaXYgaWQ9XFwiJHsgdGhpcy5pZCB9XFwiIGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncz1cXCIkeyB0aGlzLmJ1aWxkQ2xhc3NlcygpIH0gJHsgcm9vdENsYXNzIHx8IFwnXCcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cXCI+YDtcXHJcXG4gICAgaHRtbCArPSBgPHN0eWxlPiR7IHRoaXMuU3R5bGUuYnVpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkKCkgfTwvc3R5bGU+YDtcXHJcXG5cXHJcXG4gICAgaWYgKCBzbGlkZXIgKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcbiAgICAgIGh0bWwgKz0gYmVmb3JlU2xpZGVyIHx8ICcnO1xcclxcbiAgICAgIGh0bSIKICAgICAgICAgICAgICAgICAgICAgICAgYidsICs9IGA8ZGl2IGNsYXNzPVxcInNwbGlkZV9fc2xpZGVyXFwiPmA7XFxyXFxuICAgIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuXFxyXFxuICAgIGh0bWwgKz0gYmVmb3JlVHJhY2sgfHwgJyc7XFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBpZiAoIGFycm93cyApIHtcXHJcXG4gICAgICBodG1sICs9IHRoaXMucmVuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInckFycm93cygpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGh0bWwgKz0gYDxkaXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsYXNzPVxcInNwbGlkZV9fdHJhY2tcXCI+YDtcXHJcXG4gICAgaHRtbCArPSBgPCR7ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0VGFnIH0gY2xhc3M9XFwic3BsaWRlX19saXN0XFwiPmA7XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBodG1sICs9IHRoaXMucmVuZGVyU2xpZGVzKCk7XFxyXFxuXFxyXFxuICAgIGh0bWwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJys9IGA8LyR7IGxpc3RUYWcgfT5gO1xcclxcbiAgICBodG1sICs9IGA8L2Rpdj5gOyAvJwogICAgICAgICAgICAgICAgICAgICAgICBiIi8gLnRyYWNrXFxyXFxuXFxyXFxuICAgIGh0bWwgKz0gYWZ0ZXJUcmFjayB8fCAnJyIKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAgIGlmICggc2xpZGVyICkge1xcclxcbiAgICAgIGh0bWwgKycKICAgICAgICAgICAgICAgICAgICAgICAgYiI9IGA8L2Rpdj5gO1xcclxcbiAgICAgIGh0bWwgKz0gYWZ0ZXJTbGlkZXIgfHwgJyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGh0bWwgKz0gYDwvZGl2PmA7IC8vIC5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgIHJldHVybiBodG1sO1xcclxcbiAgfVxcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiLyoqXFxyXFxuICogUGFkcyB0aGUgbnVtYmVyIHdpdGggMC5cXHJcXG4gKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBAcGFyYW0gbnVtYmVyIC0gQSBudW1iZXIgdG8gcGFkLlxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEByZXR1cm4gc3RyaW5nIC0gUGFkZGVkIG51bWJlci5cXHJcXG4gKi9cXHJcXG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0IGZ1bmN0aW9uIHBhZCggbnVtYmVyOiBudW1iZXIgKTogc3RyaW5nIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gbnVtYmVyIDwgMTAgPyBgMCR7IG51bWJlciB9YCA6IGAkeyBudW1iZXIgfWAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gXCcuLi8uLi9hcnJheUwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWtlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZXR1cm5zIGVsZW1lbnRzICIKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGF0IG1hdGNoIHRoZSBwcm92aWRlZCBzZWxlY3Rvci5cXHJcXG4gKlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gcGFyZW50ICAgLSBBIHBhcmVudCBlbGVtZW50IHRvIHN0YXJ0IHNlYXJjaGluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnJvbS5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBBIHNlbGVjdG9yIHRvIHF1ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIneS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBtYXRjaGVkIGVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50cy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlBbGw8RSBleHRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kcyBFbGVtZW50ID0gRWxlbWVudD4oIHBhcmVudDogRWxlbWVudCB8IERvY3VtZW50LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3I/OiBzdHJpbmcgKTogRVtdIHtcXHJcXG4gIHJldHVybiBzZWxlY3RvciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPyBzbGljZTxFPiggcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIHNlbGVjdG9yICkgKSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidbXTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIHRoZSByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidndWxhciBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYiIvXFxyXFxuZXhwb3J0IGNvbnN0IFNMSURFID0gJ3NsaWRlJztcXHJcXG5cXHJcXG4vKiIKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogVGhlIHR5cGUgZm9yIHRoZSBjYXJvdXNlbCBzbGlkZXIuXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IExPT1AgPScKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ2xvb3AnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSB0eXBlIGZvciB0aGUgZiIKICAgICAgICAgICAgICAgICAgICAgICAgYidhZGUgc2xpZGVyIHRoYXQgY2FuIG5vdCBoYXZlIG11bHRpcGxlIHNsaWRlcyBpbiBhIHBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBjb25zdCBGQURFID0gXCdmYWRlXCc7XFxyXFxuIl0sIm5hbWVzIjpbIlJUTCIsIlRUQicKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJPUklFTlRBVElPTl9NQVAiLCJ3aWR0aCIsImxlZnQiLCJyaWdodCIsIngiLCJYIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1kiLCJBcnJvd0xlZnQiLCJBUlJPVyIsIkFycm93UmlnaHQiLCJEaXJlY3Rpb24iLCJTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIiwiQ29tcG9uZW50cyIsIm9wdGlvbnMiLCJyZXNvbHZlIiwicHJvcCIsImF4aXNPbicKICAgICAgICAgICAgICAgICAgICAgICAgYidseSIsImRpcmVjdGlvbiIsImluZGV4IiwicmVwbGFjZSIsIm1hdGNoIiwib2Zmc2V0IiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlcGxhY2VtZW50IiwidG9Mb3dlckNhc2UiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGljZSIsIm9yaWVudCIsInZhbHVlIiwiUFJPSkVDVF9DT0RFIiwiQ0xBU1NfUFJFRklYIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIkNMQVNTX1JPT1QiLCJDTEFTU19UUkFDSyIsIkNMQVNTX0xJU1QiLCJDTEFTU19TTElEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UiLCJDTEFTU19DTE9ORSIsIkNMQVNTX0FSUk9XIiwiQ0xBU1NfUEFHSU5BVElPTiIsIkMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19BQ1RJVkUiLCJTVEFUVVNfQ0xBU1NfUFJFRklYIiwiREVGQVVMVFMiLCJ0eXBlIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsInJvbGUiLCJzcGVlZCIsInBlclBhZ2UiLCJjbG9uZVN0YXR1cyIsImFycm93cyIsInBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dpbmF0aW9uIiwicGFnaW5hdGlvbktleWJvYXJkIiwiaW50ZXJ2YWwiLCJwYXVzZU9uSG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVyIiwicGF1c2VPbkZvY3VzIiwicmVzZXRQcm9ncmVzcyIsImVhc2luZyIsImRyYWciLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicidHJpbVNwYWNlIiwiZm9jdXNhYmxlTm9kZXMiLCJsaXZlIiwiY2xhc3NlcyIsInNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsImNsb25lIiwiYXJyb3ciLCJwcmV2IiwibmV4dCIsInBhZ2UiLCJzcGlubmVyIiwiaTEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOG4iLCJmaXJzdCIsImxhc3QiLCJzbGlkZVgiLCJwYWdlWCIsInBsYXkiLCJwYXVzZSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidjYXJvdXNlbCIsInNlbGVjdCIsInNsaWRlTGFiZWwiLCJyZWR1Y2VkTW90aW9uIiwicmV3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZFNwZWVkIiwiYXV0b3BsYXkiLCJhcnJheUxpa2UiLCJzdGFydCIsImVuZCIsIkFycmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSIsInByb3RvdHlwZSIsImNhbGwiLCJhcHBseSIsImZ1bmMiLCJiaW5kIiwiYXJndW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cyIsInR5cGVPZiIsInN1YmplY3QiLCJpc09iamVjdCIsImlzQXJyYXkiLCJpc1N0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ciLCJ0b0FycmF5IiwiZm9yRWFjaCIsInZhbHVlcyIsIml0ZXJhdGVlIiwicHVzaCIsImEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJheSIsIml0ZW1zIiwibWF0Y2hlcyIsImVsbSIsInNlbGVjdG9yIiwib3duZXJEb2N1bScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQiLCJkZWZhdWx0VmlldyIsIndpbmRvdyIsIkhUTUxFbGVtZW50IiwiZSIsImNoaWxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsInBhcmVudCIsImNoaWxkcmVuIiwiZmlsdGVyIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3duS2V5cyIsIk9iamVjdCIsImtleXMiLCJmb3JPd24iLCJvYmplY3QiLCJyZXZlcnNlIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsImtleSIsImFzc2lnbiIsInNvdXJjZSIsIm1lcmdlIiwicmVtb3ZlIiwibm9kZXMiLCJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29kZSIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInVuaXQiLCJhc3NlcnQiLCJjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGl0aW9uIiwibWVzc2FnZSIsIkVycm9yIiwiTWF0aCIsIm1pbiIsIm1heCIsImZsb29yIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsImNlaWwiLCJhYnMiLCJjYW1lbFRvS2ViYWIiLCJzdHJpbmciLCJpZHMiLCJFdmVudEJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXIiLCJsaXN0ZW5lcnMiLCJmb3JFYWNoRXZlbnQiLCJ0YXJnZXRzIiwiZXZlbnRzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInInRhcmdldCIsInNwbGl0IiwiZXZlbnROUyIsImZyYWdtZW50IiwiY2FsbGJhY2siLCJldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQiLCJuYW1lc3BhY2UiLCJpc0V2ZW50VGFyZ2V0IiwicmVtb3ZlciIsInJlbW92ZUV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInVuYmluZCIsImxpc3RlbmVyIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImRpc3BhdGNoIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiZG9jdW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwiY3JlYXRlRXZlbnQiLCJpbml0Q3VzdG9tRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3kiLCJkYXRhIiwibGVuZ3RoIiwiRXZlbnRJbnRlcmZhY2UiLCJidXMiLCJjcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlRG9jdW1lbnRGcmFnbWVudCIsImJpbmRlciIsIm9uIiwiam9pbiIsIm9mZiIsImVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwiUkVOREVSRVJfREVGQVVMVF9DT05GSUciLCJsaXN0VGFnIiwic2xpZGVUYWciLCJTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGUiLCJpZCIsInRoaXMiLCJzdHlsZXMiLCJydWxlIiwiYnJlYWtwb2ludCIsInNlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3RvcnMiLCJidWlsZCIsIl90aGlzIiwiY3NzIiwiZGVmYXVsdCIsImJ1aWxkU2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidycyIsInNvcnQiLCJuIiwibSIsIm1lZGlhUXVlcnkiLCJfdGhpczIiLCJ0cmltIiwiU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZVJlbmRlcmVyIiwiY29udGVudHMiLCJjb25maWciLCJkZWZhdWx0cyIsInNsaWRlcyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJicmVha3BvaW50cyIsInByZWZpeCIsIm51bWJlciIsImluaXQiLCJjbGVhbiIsInNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUiLCJyb290IiwiY2xvbmVzIiwicXVlcnlTZWxlY3RvckFsbCIsInBhcnNlQnJlYWtwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pbnRzIiwiaW5pdFNsaWRlcyIsInJlZ2lzdGVyUm9vdFN0eWxlcyIsInJlZ2lzdGVyVHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrU3R5bGVzIiwicmVnaXN0ZXJTbGlkZVN0eWxlcyIsInJlZ2lzdGVyTGlzdFN0eWxlcycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJfdGhpczMiLCJtYXAiLCJjb250ZW50IiwiaHRtbCIsImF0dHJzIiwiY292ZXIiLCJjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3MiLCJzdHlsZSIsImJ1aWxkU3R5bGVzIiwiaXNMb29wIiwiZ2VuZXJhdGVDbG9uZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiX3RoaXM0IiwiX3JlZiIsIl90aGlzNSIsIl9yZWYyIiwiY3NzUGFkZGluZyIsImNzcycKICAgICAgICAgICAgICAgICAgICAgICAgYidUcmFja0hlaWdodCIsIl90aGlzNiIsIl9yZWYzIiwiYnVpbGRUcmFuc2xhdGUiLCJjc3NTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVIZWlnaHQiLCJjc3NBc3BlY3RSYXRpbyIsIl90aGlzNyIsIl9yZWY0IiwiY3NzU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlV2lkdGgiLCJnYXAiLCJfdGhpcyREaXJlY3Rpb24iLCJjc3NPZmZzZXRDbG9uZXMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciY3NzT2Zmc2V0R2FwcyIsImlzQ2VudGVyIiwiYnVpbGRDc3NWYWx1ZSIsImNzc09mZnNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RDZW50ZXIiLCJCb29sZWFuIiwiX3RoaXMkRGlyZWN0aW9uMiIsImNsb25lQ291bnQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0Q2xvbmVDb3VudCIsImlzRml4ZWRXaWR0aCIsIl90aGlzJHBhcnNlQ3NzVmFsdWUiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicicGFyc2VDc3NWYWx1ZSIsIl90aGlzJERpcmVjdGlvbjMiLCJfdGhpcyRwYXJzZUNzc1ZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZTIiLCJfdGhpcyRwYXJzZUNzc1ZhbHVlMyIsIl90aGlzJHBhcnNlQ3NzVmFsdWU0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInInBhZGRpbmciLCJoZWlnaHQiLCJpc1ZlcnRpY2FsIiwiY3NzSGVpZ2h0IiwiYXV0b1dpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aCIsImZpeGVkV2lkdGgiLCJjc3NTbGlkZVNpemUiLCJmaXhlZEhlaWdodCIsImF1dG9IJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VpZ2h0IiwiaGVpZ2h0UmF0aW8iLCJwYXJzZUZsb2F0IiwiX3RoaXM4IiwiZm9jdXMiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnVpbGRDbGFzc2VzIiwiaXNOYXZpZ2F0aW9uIiwiaGlkZGVuIiwiYnVpbGRBdHRycyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyIiwicmVuZGVyU2xpZGVzIiwiX3RoaXM5IiwidGFnIiwiX2NvbnRlbnQkaHRtbCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJsYXp5TG9hZCIsInNyYyIsImJhY2tncm91bmQiLCJjb3VudCIsInVuc2hpZnQiLCJfcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZjUiLCJmbGlja01heFBhZ2VzIiwicmVuZGVyQXJyb3dzIiwicmVuZGVyQXJyb3ciLCJfdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMkb3B0aW9ucyIsImFyaWFMYWJlbCIsImFycm93UGF0aCIsIl90aGlzJGNvbmZpZyIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJyb290Q2xhc3MiLCJiZWZvcmVUcmFjayIsImFmdGVyVHJhY2siLCJzbGlkZXIiLCJiZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JlU2xpZGVyIiwiYWZ0ZXJTbGlkZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozt5Q0FHTyxJQycKICAgICAgICAgICAgICAgICAgICAgICAgYidLTUEsRUFBTSxNQUtOQyxFQUFNLE1DUU5DLEVBQWtCLENBQzdCQyxNQUFZLENBQUUsVUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RDLEtBQVksQ0FBRSxNQUFPLFNBQ3JCQyxNQUFZLENBQUUsU0FBVSxRQUN4QkMsRUFBWSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBRSxLQUNkQyxFQUFZLENBQUUsS0FDZEMsRUFBWSxDQUFFLEtBQ2RDLFVBQVksQ0N6QicKICAgICAgICAgICAgICAgICAgICAgICAgYidpQkMsVUFEQUEsY0QyQjdCQyxXQUFZLENDekJpQkQsWUFIQUEsWURvQkEsRUFzQmYsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FFLEVBQVdDLEVBQWdCQyxFQUF3QkMsR0E4QjFELE1BQUEsQ0FDTEMsUUF2Qk8sU0FBU0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWNDLEVBQW9CQyxHQUU1QyxJQUFBQyxHQURORCxFQUFZQSxHQUFhSixFQUFRSSxhQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDTG5CLEdBQVNrQixFQUFlQyxJQUFjbEIsRUFBTSxFQUFJLENBQUEsRUFBNUIsRUFFekMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BQUFDLEVBQWlCZSxJQUFVZixFQUFpQmUsR0FBUUcsSUFDdERILEVBQUtJLFFBQVMsb0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFxQixTQUFFQyxFQUFPQyxHQUN2Q0MsRUFBY3RCLEVBQWlCb0IsRUFBTUcsWUFBTixHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBdUJMLElBQVdFLEVBQ2hFLE9BQVMsRUFBVEMsRUFBYUMsRUFBWUUsT0FBUSxDQUFwQixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBd0JDLFlBQXhCLEVBQXdDSCxFQUFZSSxNQUFPLENBQW5CLEVBQXlCSixDQUNyRixDQUgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxDQUlQLEVBZUVLLE9BTkYsU0FBaUJDLEdBQ2YsT0FBT0EsR0FBVWYsRUFBUUksWUFBYycKICAgICAgICAgICAgICAgICAgICAgICAgYiduQixFQUFNLEVBQUksQ0FBQSxFQUNuRCxDQUVPLENBSVQsQ0V4RU8sSUFBTStCLEVBQWUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NDRXRCQyxFQUFtQkQsRUFBekIsS0FZYUUsRUFBd0JGLEVBQ3hCRyxFQUE0QkYsRUFBbEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFFBQ01HLEVBQTRCSCxFQUFsQyxPQUNNSSxFQUE0QkosRUFBbEMsUUFDTUssRUFBNEJELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFsQyxVQUdNRSxFQUE0Qk4sRUFBbEMsUUFHTU8sRUFBNEJQLEVBQWxDLGFBVU1RLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0E0QkMsWUM1QjVCQyxFQUFvQixDQUMvQkMsS0FBb0IsUUFDcEJDLEtBQW9CLFNBQ3BCQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTUFBb0IsSUFDcEJDLFFBQW9CLEVBQ3BCQyxZQUFvQixDQUFBLEVBQ3BCQyxPQUFvQixDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxFQUNwQkMsV0FBb0IsQ0FBQSxFQUNwQkMsbUJBQW9CLENBQUEsRUFDcEJDLFNBQW9CJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUNwQkMsYUFBb0IsQ0FBQSxFQUNwQkMsYUFBb0IsQ0FBQSxFQUNwQkMsY0FBb0IsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDcEJDLE9BQW9CLGdDQUNwQkMsS0FBb0IsQ0FBQSxFQUNwQnJDLFVBQW9CLE1BQycKICAgICAgICAgICAgICAgICAgICAgICAgYidwQnNDLFVBQW9CLENBQUEsRUFDcEJDLGVBQW9CLDZDQUNwQkMsS0FBb0IsQ0FBQSxFQUNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JDLFFEcUNxQixDQUNyQkMsTUFBWXpCLEVBQ1owQixNQUFZekIsRUFDWlcsT0E3Q3VDaEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWxDLFNBOENMK0IsTUFBWXpCLEVBQ1owQixLQTdDdUMxQixFQUFsQyxTQThDTDJCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLQTdDdUMzQixFQUFsQyxTQThDTFcsV0FBWVYsRUFDWjJCLEtBN0N1QzNCLEVBQWxDLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzhDTDRCLFFBeEN1Q25DLEVBQWxDLFNBK0JnQixFQ3BDckJvQyxLQzFCa0IsQ0FDbEJKLEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFZLGlCQUNaQyxLQUFZLGFBQ1pJLE1BQVksb0JBQ1pDLEtBQVksbUJBQ1pDLE9BQVksaScKICAgICAgICAgICAgICAgICAgICAgICAgYidCQUNaQyxNQUFZLGdCQUNaQyxLQUFZLGlCQUNaQyxNQUFZLGlCQUNaQyxTQUFZLFdBQ1pkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFZLFFBQ1plLE9BQVkseUJBQ1pDLFdBQVksVUFaTSxFRDJCbEJDLGNBQWUsQ0FDYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxNQUFhLEVBQ2JrQyxZQUFhLEVBQ2JDLFNBQWEsT0FIQSxDQXJCZ0IsRUVGakIsU0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidwRCxFQUFVcUQsRUFBeUJDLEVBQWdCQyxHQUNqRSxPQUFPQyxNQUFNQyxVQUFVekQsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ00wRCxLQUFNTCxFQUFXQyxFQUFPQyxDQUE5QyxDQUNULENDYU8sU0FBU0ksRUFBT0MsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXJCLE9BQU9BLEVBQUtDLEtBQUxGLE1BQUFDLEVBQVcsQ0FBQSxNQUFTNUQsT0FBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU84RCxVQUFXLENBQVgsRUFBbEMsQ0FDRixDQ2ZBLFNBQVNDLEVBQVFoRCxFQUFjaUQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQzdCLE9BQU8sT0FBT0EsSUFBWWpELENBQzVCLENBU08sU0FBU2tELEVBQVVELEdBQ3gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixPQStDbUIsT0EvQ0ZBLEdBQWFELEVBQVEsU0FBVUMsQ0FBbEIsQ0FDaEMsQ0FTTyxJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBTUUsRUFBcURWLE1BQU1VLFFBa0IzREMsR0FUNkRSLEVBQU9JLEVBQVEsVUFBUixFQVNkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0osRUFBT0ksRUFBUSxRQUFSLEdDMUNuRSxTQUFTSyxFQUFZbEUsR0FDMUIsT0FBT2dFLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTaEUsQ0FBQSxFQUFVQSxFQUFRLENBQUVBLEVBQ3RDLENDSGdCLFNBQUFtRSxFQUFZQycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBaUJDLEdBQ2xDSCxFQUFBRSxDQUFBLEVBQVNELFFBQVNFLENBQWxCLENBQ1gsQ0NBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dCLFNBQUFDLEVBQVNDLEVBQVlDLEdBRTVCLE9BRFBELEVBQU1ELEtBQU5DLE1BQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFlTCxFQUFTTSxDQUFBLENBQXhCLEVBQ09ELENBQ1QsQ0NIZ0IsU0FBQUUsRUFBU0MsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQTRCQyxHQUM1QyxPSnNFRixTQUF3QmIsR0FDekIsSUFDRixPQUFPQSxhQUF1QkEsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tCYyxjQUFjQyxhQUFlQyxRQUFTQyxXQUd4RixPQUZVQyxHQUNELE1BQUEsQ0FBQSxDQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCxDQUNGLEVJNUV3Qk4sQ0FBZixJQUEwQkEsRUFBQSxtQkFBOEJBLEVBQUlELFNBQVVqQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBTWtCLEVBQUtDLENBQXZELENBQ25DLENDRmdCLFNBQUFNLEVBQThCQyxFQUFxQlAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ2pFLE9BQU9BLEdDQTZEQSxFREE3QkEsRUNDakNRLEdBRHlDRCxFREFoQkEsR0NDTHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixFQUFPb0YsRUFBT0MsUUFBZCxFQUFrQyxJQUNyRFIsRUFBV1EsRUFBU0MsT0FBUSxTQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUgsR0FBQSxPQUFTUixFQUFTUSxFQUFPTixFQUF6QixDQUFqQlEsRUFBeURBLEdERnhCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFNRCxFQUFPRyxrQkNBbEQsSUFBc0RWLENEQ3RFLENMZ0R5RWxCLEVBQU9JLEVBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQVIsRU8xRHpFLElBQU15QixFQUFVQyxPQUFPQyxLQ1NkLFNBQUFDLEVBQ2RDLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBckIsRUFDQTlGLEdBRUttSCxJQUNEbkgsRUFBUStHLEVBQVNJLENBQUEsRUFBU0MsUUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xCLEVBQThCTCxFQUFTSSxDQUFBLEdBQVd2QixRQUFTLFNBQU95QixHQUNsRSxjQUFSQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBdUJ2QixFQUFVcUIsRUFBUUUsR0FBT0EsQ0FBekIsQ0FDdkIsQ0FGQSxDQU1OLENDaycKICAgICAgICAgICAgICAgICAgICAgICAgYidCTyxTQUFTQyxFQUEwQkgsR0FRakMsT0FOUDVGLEVBQU84RCxVQUFXLENBQWxCLEVBQXNCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ08sUUFBUyxTQUFVMkIsR0FDL0JMLEVBQUFLLEVBQVEsU0FBRTlGLEVBQU80RixHQUN2QkYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFFLEdBQVFFLEVBQVFGLEVBQ3hCLENBRk0sQ0FHUixDQUpGLEVBTU9GLENBQ1QsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidDQ08sU0FBU0ssRUFBeUJMLEdBY2hDLE9BWlA1RixFQUFPOEQsVUFBVyxDQUFsQixFQUFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JPLFFBQVMsU0FBVTJCLEdBQy9CTCxFQUFBSyxFQUFRLFNBQUU5RixFQUFPNEYsR0FDbEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInNUIsRUFBU2hFLENBQVQsRUFDSzBGLEVBQUFFLEdBQVE1RixFQUFNRixNQUFkLEVBQ0VpRScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBVS9ELENBQUEsRUFDcEIwRixFQUFRRSxHQUFRRyxFQUFPLEdBQUloQyxFQUFVMkIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVFFLEVBQVIsRUFBa0JGLEVBQVFFLEdBQVEsR0FBSTVGLENBQTNELEVBRWhCMEYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVFFLEdBQVE1RixDQUVsQixDQVJNLENBU1IsQ0FWRixFQVlPMEYsQ0FDVCxDQzNETyxTQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBU00sRUFBUUMsR0FDdEI5QixFQUFTOEIsRUFBTyxTQUFRQyxHQUNqQkEsR0FBUUEsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tDLFlBQ1hELEVBQUFDLFdBQVdDLFlBQWFGLENBQXhCLENBRVAsQ0FKRixDQUtGLENDSE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQVNHLEVBQU1yRyxHQUNwQixPQUFPaUUsRUFBVWpFLEdBQVVBLEVBQVFBLEVBQVlBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFaLEtBQXlCLEVBQzlELENDSmdCLFNBQUFzRyxFQUFRQyxFQUFnQkMsR0FDdEMsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ssQ0FBRUQsRUFDTCxNQUFNLElBQUlFLE1BQVl4RyxJQUFBQSxRQUFtQnVHLEdBQVcsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXBELENBRUosQ0NiOENFLEtBQS9CQyxJQUFSLElBQWFDLEVBQTBCRixLQUExQkUsSUFBMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCRixLQUFyQkcsTUFBcUJILEtBQWRJLEtBQWNKLEtBQVJLLElDSy9CLFNBQVNDLEVBQWNDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUM1QixPQUFPQSxFQUFPMUgsUUFBUyxxQkFBc0IsT0FBdEMsRUFBZ0RJLFlBQXZELEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNGLENDQ0EsSUFBTXVILEVBQThCLEdDdUI3QixTQUFTQyxJQUtkLElBQUlDLEVBQW9GLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQXVGL0UsU0FBQUMsRUFDUEMsRUFDQUMsRUFDQWxELEdBRUFGLEVBQVNtRCxFQUFTLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FVRSxHQUNoQkEsR0FBQXJELEVBQVNvRCxFQUFRLFNBQUFBLEdBQ3pCQSxFQUFPRSxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTyxHQUFkRixFQUFvQnBELFFBQVMsU0FBV3VELEdBQ2hDQyxFQUFXRCxFQUFRRCxNQUFPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFmLEVBQ2pCcEQsRUFBVW1ELEVBQVFHLEVBQVUsR0FBS0EsRUFBVSxFQUEzQyxDQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUhGSixDQUlBLENBTFEsQ0FNVixDQVBGLENBUUYsQ0FVTyxNQUFBLENBQ0w1RCxLQWgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0YsU0FDRTJELEVBQ0FDLEVBQ0FLLEVBQ0EzSSxHQUVBb0ksRUFBY0MsRUFBU0MsRUFBUScKICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBRUMsRUFBUUssRUFBT0MsR0FDOUMsSUFBTUMsRUFBZ0IscUJBQXNCUCxFQUN0Q1EsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVVELEVBQ1pQLEVBQU9TLG9CQUFvQnRFLEtBQU02RCxFQUFRSyxFQUFPRCxFQUFVM0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQTFELEVBQ0F1SSxFQUFBLGVBQTJCN0QsS0FBTTZELEVBQVFJLENBQXpDLEVBRVlHLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFBUCxFQUFPVSxpQkFBa0JMLEVBQU9ELEVBQVUzSSxDQUExQyxFQUFzRHVJLEVBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1lBQXlCSSxDQUF6QixFQUN0RVIsRUFBVTlDLEtBQU0sQ0FBRWtELEVBQVFLLEVBQU9DLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFXRixFQUFVSSxFQUF0RCxDQUNBLENBUkYsQ0FTRixFQWtGRUcsT0F6RU8sU0FBUWIsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXVCQyxFQUEyQkssR0FDakVQLEVBQWNDLEVBQVNDLEVBQVEsU0FBRUMsRUFBUUssRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09DLEdBQ2xDVixFQUFBQSxFQUFVaEMsT0FBUSxTQUFZZ0QsR0FDeEMsTUFBS0EsQ0FBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUFBLEVBQVUsS0FBUVosR0FDbEJZLEVBQVUsS0FBUVAsR0FDbEJPLEVBQVUsS0FBUScKICAgICAgICAgICAgICAgICAgICAgICAgYidOLEdBQ2RGLEdBQVlRLEVBQVUsS0FBUVIsS0FFckNRLEVBQVUsR0FBVixFQUNPLENBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBSVQsQ0FYVSxDQVlaLENBYkYsQ0FjRixFQTJERUMsU0FoRE8sU0FBYWIsRUFBcUIzRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBY3lILEdBQ25ELElBQUF0RCxFQVdHLE1BUnFCLFlBQXZCLE9BQU91RCxZQUNWdkQsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUksSUFBSXVELFlBQWExSCxFQUFNLENBQUUySCxRQUhmLENBQUEsRUFHd0JGLE9BQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFYLENBQXZCLEdBRUF0RCxFQUFBeUQsU0FBU0MsWUFBYSxhQUF0QixHQUNGQyxnQkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWlCOUgsRUFOTCxDQUFBLEVBTW9CLENBQUEsRUFBT3lILENBQXpDLEVBR0ZkLEVBQU9vQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsY0FBZTVELENBQXRCLEVBQ09BLENBQ1QsRUFvQ0U2RCxRQVRGLFdBQ0V6QixFQUFVakQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1FBQVMsU0FBUTJFLEdBQUVBLEVBQU0sR0FBTixDQUFjLENBQTNDLEVBQ08xQixFQ3pJSDInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixPQUFTLENEMElmLENBRU8sQ0FNVCxDRXZITyxTQUFTQyxFQUFnQmpLLEdBSzlCLElBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNa0ssRUFBTWxLLEVBQVNBLEVBQU84SSxNQUFNb0IsSUFBTVIsU0FBU1MsdUJBQWpELEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tNQyxFQUFTaEMsRUFBZixFQTZCQSxPQUpLcEksR0FDSEEsRUFBTzhJLE1BQU11QixHQ2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRHVCLFVEa0RKRCxFQUFPTixPQUF2QzlKLEVBR0s4RyxFQUFRc0QsRUFBUSxDQUNyQkYsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFBLEVBQ0FHLEdBdkJPLFNBQUk3QixFQUEyQkssR0FDL0J1QixFQUFBeEYsS0FBTXNGJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFLL0UsRUFBU3FELENBQUEsRUFBUzhCLEtBQU0sR0FBeEIsRUFBK0IsU0FBS3JFLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUMzQzRDLEVBQUFuRSxNQUFPbUUsRUFBVTVELEVBQVNnQixFQUFFc0QsTUFBRixFQUFhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidELEVBQUVzRCxPQUFTLEVBQWxELENBQ1QsQ0FGSyxDQUdULEVBb0JFZ0IsSUFBSzdGLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPMEYsRUFBT2hCLE9BQVFjLENBQXRCLEVBQ0xNLEtBYkYsU0FBZTFCLEdBRWJzQixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2QsU0FBVVksRUFBS3BCLEVBQU8vSCxFQUFPOEQsVUFBVyxDQUFYLENBQXBDLENBQ0YsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBTXVCLEVBTXpCLENFOUVPLElDUU00RixFQUEwQyxDQUNyREMsUUFBVSxLQUNWQyxTQUFVJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUYyQyxFQ08xQ0MsYUFzQlgsU0FBYUMsRUFBQUEsRUFBWTNLLEdBbEJ6QjRLLEtBQWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkMsT0FBaUIsR0FtQmhDRCxLQUFLRCxHQUFVQSxFQUNmQyxLQUFLNUssUUFBVUEsQ0FDaicKICAgICAgICAgICAgICAgICAgICAgICAgYidCLDRCQVVBOEssS0FBQSxTQUFNcEYsRUFBa0J4RixFQUFjYSxFQUF3QmdLLEdBRXREQyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBY0osS0FBS0MsT0FEekJFLEVBQWFBLEdBQWMsV0FDcUJILEtBQUtDLE9BQVFFLElBQWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixJQUN6REMsRUFBV3RGLEdBQWFzRixFQUFXdEYsSUFBYyxJQUM3RHhGLEdBQVNhLENBQycKICAgICAgICAgICAgICAgICAgICAgICAgYiduQixJQU9Ba0ssTUFBQSxXQUFnQixJQUFBQyxFQUFBTixLQUNWTyxFQUFNLEdBZ0JILE9BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RGUCxLQUFLQyxPQUFPTyxVQUNmRCxHQUFPUCxLQUFLUyxlQUFnQlQsS0FBS0MsT0FBT08nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQWpDLEdBR0Y5RSxPQUFBQyxLQUFNcUUsS0FBS0MsTUFBWCxFQUNKUyxLQUFNLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFQyxFQUFHQyxHQUFMLE1BQXdDLFFBQTVCTixFQUFLbEwsUUFBUXlMLFdBQXVCLENBQUNGJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFJLENBQUNDLEVBQUksQ0FBQ0EsRUFBSSxDQUFDRCxDQUFoRSxDQURGLEVBRUpyRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUFBUyxTQUFjNkYsR0FDRixZQUFmQSxJQUdJSSxHQUZQQSxHQUFBLGlDQUF5Q0osRUFBeicKICAgICAgICAgICAgICAgICAgICAgICAgYidDLFNBQ09HLEVBQUtHLGVBQWdCSCxFQUFLTCxPQUFRRSxFQUFsQyxFQUNBLElBRVQsQ0FSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0csRUFVQUksQ0FDVCxJQVNRRSxlQUFBLFNBQWdCTCxHQUFxRSxJQUFBVSxFQUFBZCxLQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndkZPLEVBQU0sR0FlSCxPQWJDM0UsRUFBQXdFLEVBQVcsU0FBRUgsRUFBUW5GLEdBQzNCQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsT0FBZ0JnRyxFQUFLZixHQUFRakYsSUFBQUEsR0FBWWlHLEtBQXpDLEVBQ0FSLEdBQVd6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0YsRUFBWCxLQUVRYyxFQUFBcUUsRUFBUSxTQUFFOUosRUFBT2IsR0FDbEJhLENBQUFBLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFtQixJQUFWQSxJQUNab0ssR0FBV2pMLEVBQVdhLEtBQUFBLEVBQXRCLElBRUYsQ0FKTScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFNRG9LLEdBQUEsR0FDUCxDQVhNLEVBYURBLENBQ1QseUJDSEEsU0FBQVMsRUFBYUMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQXFDN0wsRUFBbUI4TCxFQUF5QkMsR0F4QzlGbkIsS0FBaUJvQixPQUF5QixHQWUxQ3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixLQUFpQjVLLFFBQW1CLEdBZXBDNEssS0FBaUJxQixZQUFxQyxHQVc3Q25GLEVBQUFuRicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBVW9LLEdBQVksRUFBdEIsRUFDUGpGLEVBQU9BLEVBQU84RCxLQUFLNUssUUFBUzJCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFZM0IsR0FBVyxFQUFuRCxFQUVBNEssS0FBS2lCLFNBQVlBLEVBQ2pCakIsS0FBS2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixPQUFZbEYsRUFBUSxHQUFJMkQsRUFBeUJ1QixHQUFVLEVBQXZDLEVBQ3pCbEIsS0FBSycKICAgICAgICAgICAgICAgICAgICAgICAgYidELEdBQVlDLEtBQUtrQixPQUFPbkIsSVI3RnhCLElBRGlCdUIsRVE4RnVCLFlDdEc1QkMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VUU1VsRSxFQUFLaUUsSUFBYWpFLEVBQUtpRSxJQUFZLEdBQU0sR1NSdEQsR0FBVUMsSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLEtBQWdCQSxHRHNHeEN2QixLQUFLRixNQUFZLElBQUlBLEVBQU9FLEtBQUtELEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidJQyxLQUFLNUssT0FBekIsRUFDakI0SyxLQUFLL0ssVUFBWUEsRUFBVyxFQUFNLEVBQU0rJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ssS0FBSzVLLE9BQTVCLEVBRVRxSCxFQUFBdUQsS0FBS2lCLFNBQVMvQixPQUFRLDZCQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEIsRUFFUmMsS0FBS3dCLEtBQUwsQ0FDRixHQXpFT0MsTUFBUCxTQUFjQyxHQUNaLElFaicKICAgICAgICAgICAgICAgICAgICAgICAgYidDK0U1RyxFRmlDdkV5RSxFQUFPSixFQUFnQnVDLENBQWhCLEVBQVBuQyxHQUNBb0MsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NELEVBQVRDLEtBQ0ZDLEdFbkM2Q3ZHLEVGbUMxQnNHLEdFbkNzRDdHLEVGbUNoRSxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncUJwRSxHRWxDcEJULEVBQVVvRixFQUFPd0csaUJBQWtCL0csQ0FBekIsQ0FBQSxFQUF3QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsSUZvQ2xFeUUsRUpoRG9DLFVJZ0RqQixXQUNUcEQsRUFBQWYsRUFBT3VHLEVBQU0sT0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2IsQ0FBQSxDQUNSLENBRkYsRUFJQXhGLEVBQVF5RixDQUFSLENBQ0YsNkJBb0VRSixLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxXQUNOeEIsS0FBSzhCLGlCQUFMLEVBQ0E5QixLQUFLK0IsV0FBTCxFQUNBL0IsS0FBSycKICAgICAgICAgICAgICAgICAgICAgICAgYidnQyxtQkFBTCxFQUNBaEMsS0FBS2lDLG9CQUFMLEVBQ0FqQyxLQUFLa0Msb0JBQUwsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FsQyxLQUFLbUMsbUJBQUwsQ0FDRixJQUtRSixXQUFBLFdBQW1CLElBQUFLLEVBQUFwQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0FDekJ2RixFQUFNdUYsS0FBS29CLE9BQVFwQixLQUFLaUIsU0FBU29CLElBQUssU0FBRScKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBQVM3TSxJQUMvQzZNLEVBQVVsSSxFQUFVa0ksR0FBWSxDQUFFQyxLQUFNRCxDQUFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFvQkEsR0FDNUNyQyxPQUFTcUMsRUFBUXJDLFFBQVUsR0FDM0JxQyxFQUFBRSxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0YsRUFBUUUsT0FBUyxHQUVsQ0osRUFBS0ssTUFBT0gsQ0FBWixFQUVNckssRUFBY21LLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFLaE4sUUFBUTZDLFFBQVFDLE1BQW5DLEtBQXdELElBQVZ6QyxFN0J0R2pCcUIsWTZCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NHOEMsSUFPMUUsT0FMUGtGLEVBQVFzRyxFQUFRRSxNQUFPLENBQ3JCRSxPQUFXekssRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUosS0FBaUJxSyxFQUFRRSxNQUFNRSxPQUFTLEtBQU0zQixLQURoQyxFQUVyQjRCLE1BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidPUCxFQUFLUSxZQUFhTixFQUFRckMsTUFBMUIsQ0FGYyxDQUF2QixFQUtPcUMsQ0FDUCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FmaUIsQ0FBbkIsRUFpQkt0QyxLQUFLNkMsT0FBTCxHQUNFN0MsS0FBQThDLGVBQWdCOUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQUtvQixNQUFyQixDQUVULElBS1FZLG1CQUFBLFdBQTJCLElBQUFlLEVBQUEvQyxLQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDakNBLEtBQUtxQixZQUFZL0csUUFBUyxTQUEwQjBJLEdBQUEsSUFBdEJ4TyxFQUFzQndPJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFBLEdBQWY1TixFQUFlNE4sRUFBQSxHQUM3Q0QsRUFBQWpELE1BQU1JLEtBQU0sSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUssWUFBYTFELEVBQU1wSCxFQUFRWixPQUFTQSxDQUFyRCxDQUNMLENBRkYsQ0FHRixJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidLUXlOLG9CQUFBLFdBQTRCLElBQUFnQixFQUFBakQsS0FDMUJGLEVBQVVFLEtBQVZGLE1BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NGaEYsTUFBZ0J2RSxFQUV0QnlKLEtBQUtxQixZQUFZL0csUUFBUyxTQUEwQjRJLEdBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQXRCMU8sRUFBc0IwTyxFQUFBLEdBQWY5TixFQUFlOE4sRUFBQSxHQUNsRHBELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNSSxLQUFNcEYsRUFBVW1JLEVBQUs1TixRQUFTLGFBQWQsRUFBK0I0TixFQUFLRSxXQUFZJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9OLEVBQVMsQ0FBQSxDQUExQixFQUFtQ1osQ0FBeEZzTCxFQUNBQSxFQUFNSSxLQUFNcEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVVtSSxFQUFLNU4sUUFBUyxjQUFkLEVBQWdDNE4sRUFBS0UsV0FBWS9OLEVBQVMsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsQ0FBMUIsRUFBa0NaLENBQXhGc0wsRUFDQUEsRUFBTUksS0FBTXBGLEVBQVUsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VtSSxFQUFLRyxlQUFnQmhPLENBQXJCLEVBQWdDWixDQUFoRXNMLENBQ0EsQ0FKRixDQUsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixJQUtRcUMsbUJBQUEsV0FBMkIsSUFBQWtCLEVBQUFyRCxLQUN6QkYsRUFBVUUsS0FBVicKICAgICAgICAgICAgICAgICAgICAgICAgYidGLE1BQ0ZoRixNQUFnQnRFLEVBRXRCd0osS0FBS3FCLFlBQVkvRyxRQUFTLFNBQTBCZ0osJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQUEsSUFBdEI5TyxFQUFzQjhPLEVBQUEsR0FBZmxPLEVBQWVrTyxFQUFBLEdBQ2xEeEQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU1JLEtBQU1wRixFQUFVLFlBQWF1SSxFQUFLRSxlQUFnQm5PLENBQXJCLEVBQWdDWicKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBbkVzTCxFQUVPdUQsRUFBS0csZUFBZ0JwTyxDQUFyQixHQUNMMEssRUFBTUksS0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01wRixFQUFVLGVBQWdCdUksRUFBS0ksZUFBZ0JyTyxDQUFyQixFQUFnQ1osQ0FBdEVzTCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FFRixDQU5GLENBT0YsSUFLUW9DLG9CQUFBLFdBQTRCLElBQUF3QixFQUFBMUQsS0FDMScKICAgICAgICAgICAgICAgICAgICAgICAgYidCRixFQUFVRSxLQUFWRixNQUNGaEYsTUFBZ0JyRSxFQUV0QnVKLEtBQUtxQixZQUFZL0csJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1FBQVMsU0FBMEJxSixHQUFBLElBQXRCblAsRUFBc0JtUCxFQUFBLEdBQWZ2TyxFQUFldU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUEsR0FDbEQ3RCxFQUFNSSxLQUFNcEYsRUFBVSxRQUFTNEksRUFBS0UsY0FBZXhPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFwQixFQUErQlosQ0FBOURzTCxFQUNBQSxFQUFNSSxLQUFNcEYsRUFBVSxTQUFVNEksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUtGLGVBQWdCcE8sQ0FBckIsR0FBa0MsT0FBUVosQ0FBMUVzTCxFQUNBQSxFQUFNSSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBTXBGLEVBQVU0SSxFQUFLck8sUUFBUyxhQUFkLEVBQStCbUgsRUFBTXBILEVBQVF5TycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBZCxHQUF1QixNQUFPclAsQ0FBbkZzTCxFQUNBQSxFQUFNSSxLQUFVcEYsV0FBbUIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VBQVcxRixFQUFRcU4sTUFBUSxPQUFTLFNBQVVqTyxDQUFqRnNMLENBQ0EsQ0FMRixDQU0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixJQVNReUQsZUFBQSxTQUFnQm5PLEdBQ3RCLElBQUEwTyxFQUE0QjlELEtBQUsvSyxVQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBekJJLElBQUFBLFFBQVNhLElBQUFBLE9BQ1hxRSxFQUFTLEdBVWYsT0FSQUEsRUFBT0UsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQU11RixLQUFLK0QsZ0JBQWlCM08sQ0FBdEIsQ0FBYixFQUNBbUYsRUFBT0UsS0FBTXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixLQUFLZ0UsY0FBZTVPLENBQXBCLENBQWIsRUFFSzRLLEtBQUtpRSxTQUFVN08sQ0FBZicKICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFDSG1GLEVBQU9FLEtBQU11RixLQUFLa0UsY0FBZWhPLEVBQVEsQ0FBSSxJQUFHLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FuQyxDQUFiLEVBQ0FxRSxFQUFPRSxLQUFQYixNQUFBVyxFQUFnQnlGLEtBQUttRSxnQkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWlCL08sQ0FBdEIsQ0FBaEIsR0FHS21GLEVBQ0pnQixPQUFRNkksT0FESixFQUVKL0IsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUssU0FBQWxNLEdBQUEsTUFBQSxZQUFzQmQsRUFBUyxHQUFULE1BQW9CYyxFQUExQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxDQUZELEVBR0pxSixLQUFNLEdBSEYsQ0FJVCxJQVVRdUUsZ0JBQUEsU0FBaUIzTywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDdkIsSUFJVWUsRUFKVmtPLEVBQTRCckUsS0FBSy9LLFVBQXpCSSxJQUFBQSxRQUFTYScKICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFBQUEsT0FDWG9PLEVBQWF0RSxLQUFLdUUsY0FBbEIsRUFFRCxPQUFBdkUsS0FBS3dFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxhQUFjcFAsQ0FBbkIsR0FDS2UsR0FBZ0JzTyxFQUFBekUsS0FBSzBFLGNBQWV0UCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0MsRUFBUyxZQUFBLEVBQXRDLEdBQWhCYyxNQUFPcUcsSUFBQUEsS0FDUndELEtBQUtrRScKICAgICAgICAgICAgICAgICAgICAgICAgYicsY0FBZWhPLEVBQVFDLENBQVIsRUFBa0JtTyxFQUFZOUgsQ0FBbEQsR0FJRXRHLEVBREssJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQU1vTyxFQUFhbFAsRUFBUStCLFNBQ3BDLEdBQ1QsSUFjUWdOLGdCQUFBLFNBQWlCL08nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQ3ZCLElBUVErQixFQUtFaEIsRUFiVndPLEVBQTRCM0UsS0FBSy9LLFVBQXpCSSxJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsUUFBU2EsSUFBQUEsT0FFWixPQUFBOEosS0FBS3dFLGFBQWNwUCxDQUFuQixHQUNLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsR0FBZ0J5TyxFQUFBNUUsS0FBSzBFLGNBQWV0UCxFQUFTQyxFQUFTLFlBQUEsRUFBdEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQWhCYyxNQUFPcUcsSUFBQUEsS0FDUixDQUFFd0QsS0FBS2tFLGNBQWVoTyxFQUFRQycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUSxDQUFoQixFQUFxQnFHLENBQXpDLEtBSUhyRixFQUFpQi9CLEVBQWpCK0IsUUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MwTSxFQUFRek8sRUFBUnlPLEtBRFh0SixFQUFTLElBR1JFLEtBQVV2RSxFQUFRLEdBQUsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUIsQ0FBTCxFQUF6QixHQUFBLEVBRUswTSxJQUNLMU4sR0FBUjBPLEVBQXdCN0UsS0FBSycKICAgICAgICAgICAgICAgICAgICAgICAgYicwRSxjQUFlYixDQUFwQixHQUFoQjFOLE1BQU9xRyxJQUFBQSxLQUVmakMsRUFBT0UsS0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ011RixLQUFLa0UsY0FBZWhPLEdBRGJDLEVBQVFnQixFQUFVaEIsR0FBVSxHQUNNcUcsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXpDLENBQWIsR0FHS2pDLEVBQ1QsSUFTUXlKLGNBQUEsU0FBZTVPLEdBQ2YsSUFHSWMsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0FDLEVBQU9xRyxFQUpYOEgsRUFBYXRFLEtBQUt1RSxjQUFsQixFQUVELE9BQUFELEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FjbFAsRUFBUXlPLEtBQ2pCM04sRUFBVzhKLEtBQUsvSyxVQUFoQmlCLE9BQ0FDLEdBQUYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMk8sRUFBa0I5RSxLQUFLMEUsY0FBZXRQLEVBQVF5TyxHQUE1QixHQUFoQjFOLE1BQU9xRycKICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFBQUEsS0FFVndELEtBQUt3RSxhQUFjcFAsQ0FBbkIsRUFDSTRLLEtBQUtrRSxjQUFlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hPLEVBQVFDLEVBQVFtTyxDQUFoQixFQUE4QjlILENBQWxELEdBR0RyRixFQUFZL0IsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVorQixRQUVENkksS0FBS2tFLGNBQWVoTyxFQURkb08sRUFBYW5OLEVBQ2dCaEIsQ0FBZicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBd0JxRyxDQUE1QyxJQUdGLEVBQ1QsSUFTUW5ILFFBQUEsU0FBU0MsR0FDZixPQUFPJwogICAgICAgICAgICAgICAgICAgICAgICBiJzZILEVBQWM2QyxLQUFLL0ssVUFBVUksUUFBU0MsQ0FBeEIsQ0FBQSxDQUN2QixJQVVRNk4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQUEsU0FBWS9OLEVBQWtCVixHQUM1QnFRLEVBQVkzUCxFQUFaMlAsUUFDRnpQLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidPMEssS0FBSy9LLFVBQVVJLFFBQVNYLEVBQVEsUUFBVSxPQUFRLENBQUEsQ0FBbEQsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ04sT0FBQXFRLEdBQVd2SSxFQUFNdUksRUFBU3pQLEtBQVk0RSxFQUFVNkssR0FBWSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUEsS0FBZSxLQUN4RixJQVNRM0IsZUFBQSxTQUFnQmhPLEdBQ3RCLElBQUk0UCxFQUFTLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQVFOLE9BTkZoRixLQUFLaUYsV0FBTCxJQUVIeEksRUFEU3VJLEVBQUFoRixLQUFLa0YsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VBQVc5UCxDQUFoQixFQUNPLHNCQUFoQixFQUNTNFAsVUFBU0EsRUFBVCxNQUF1QmhGLEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFLbUQsV0FBWS9OLEVBQVMsQ0FBQSxDQUExQixFQUF2QixNQUFnRTRLLEtBQUttRCxXQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWS9OLEVBQVMsQ0FBQSxDQUExQixFQUFoRSxLQUdKNFAsQ0FDVCxJQVNRRSxVQUFBLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FXOVAsR0FDVixPQUFBb0gsRUFBTXBILEVBQVE0UCxNQUFkLENBQ1QsSUFTUXBCLGNBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQWV4TyxHQUNyQixPQUFPQSxFQUFRK1AsVUFDWCxHQUNBM0ksRUFBTXBILEVBQVFnUScKICAgICAgICAgICAgICAgICAgICAgICAgYicsVUFBZCxJQUFnQ3BGLEtBQUtpRixXQUFMLEVBQW9CLEdBQUtqRixLQUFLcUYsYUFBY2pRJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFuQixFQUMvRCxJQVNRb08sZUFBQSxTQUFnQnBPLEdBQ3RCLE9BQU9vSCxFQUFNcEgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFrUSxlQUNkdEYsS0FBS2lGLFdBQ0o3UCxFQUFBQSxFQUFRbVEsV0FBYSxHQUFLdicKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEtBQUtxRixhQUFjalEsQ0FBbkIsRUFDNUI0SyxLQUFLa0YsVUFBVzlQLENBQWhCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VSLElBU1FpUSxhQUFBLFNBQWNqUSxHQUNkLElBQUF5TyxFQUFNckgsRUFBTXBILEVBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneU8sR0FBUixFQUNYLE1BQUEsY0FBY0EsU0FBY0EsR0FBNUIsTUFBeUN6TyxFQUFRK0IsUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVcsSUFBTTBNLFNBQWNBLEdBQWhGLEdBQ1QsSUFTUUosZUFBQSxTQUFnQnJPLEdBQ2RvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1EsRUFBZ0JwUSxFQUFoQm9RLFlBQ0QsT0FBQUEsRUFBQSxHQUFrQixFQUFJQSxFQUFpQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDaEQsSUFVUXRCLGNBQUEsU0FBZS9OLEVBQWVxRyxHQUNwQyxNQUFXckcsR0FBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVVxRyxDQUN2QixJQVNRa0ksY0FBQSxTQUFldk8sR0FDaEIsT0FBQWlFLEVBQVVqRSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVixFQUdJLENBQUVBLE1BRk1zUCxXQUFZdFAsQ0FBQSxHQUFXLEVBRWRxRyxLQURUckcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU1ULFFBQVMsY0FBZSxFQUE5QixHQUFzQyxJQUM5QyxFQUdGLENBQUVTLE1BQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPcUcsS0FBTSxJQUFmLENBQ1QsSUFLUXNGLGlCQUFBLFdBQXlCLElBQUE0RCxFQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzFGLEtBQ3ZCcUIsRUFBZ0JyQixLQUFLNUssUUFBckJpTSxZQUVSckIsS0FBS3FCLFlBQVknCiAgICAgICAgICAgICAgICAgICAgICAgIGInNUcsS0FBTSxDQUFFLFVBQVd1RixLQUFLNUssUUFBekMsRUFFS2lNLEdBQ0t6RixFQUFBeScKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEVBQWEsU0FBRWpNLEVBQVNaLEdBQzlCa1IsRUFBS3JFLFlBQVk1RyxLQUFNLENBQUVqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0csRUFBTzBILEVBQU9BLEVBQU8sR0FBSXdKLEVBQUt0USxPQUFoQixFQUEyQkEsQ0FBM0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQXZDLENBQ0EsQ0FGTSxDQUlaLElBT1FvUCxhQUFBLFNBQWNwUCxHQUNwQixNQUFPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFDLENBQUVBLEVBQVM0SyxLQUFLL0ssVUFBVUksUUFBUyxZQUF4QixFQUNyQixJQU9RJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dOLE9BQUEsV0FDQyxNR3RkUyxTSHNkVDdDLEtBQUs1SyxRQUFRNEIsSUFDdEIsSUFPUWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInTixTQUFBLFNBQVU3TyxHQUNaLEdBQWtCLFdBQWxCQSxFQUFRdVEsTUFBcUIsQ0FDMUIsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEzRixLQUFLNkMsT0FBTCxFQUNJLE1BQUEsQ0FBQSxFQUdKLEdHM2VVLFVIMmVWN0MsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQUs1SyxRQUFRNEIsS0FDVCxNQUFBLENBQUVnSixLQUFLNUssUUFBUTBDLFNBRTFCLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUVPLE1BQUEsQ0FBQSxDQUNULElBT1FtTixXQUFBLFdBQ0MsT0FBQWpGLEtBQUs1SyxRQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUUksWUFBY2xCLENBQ3BDLElBT1FzUixhQUFBLFdBQ0EsSUFBRXhRLEVBQVk0SyxLQUFaJwogICAgICAgICAgICAgICAgICAgICAgICBiJzVLLFFBRUQsTUFBQSxDQUNMa0IsRUFDSUEsT0FBaUJsQixFQUFRNEIsS0FDekJWLE9BQWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQmxCLEVBQVFJLFVBQzdCSixFQUFReUMsTUFBWXZCLEVBQXBCLGNBQ0FsQixFQUFReVEsYycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQW9CdlAsRUFMdkIsUUFNTE8sRUFDQSxDQUFFbUosS0FBS2tCLE9BQU80RSxRSGhoQlUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VHaWhCeEJ2SyxPQUFRNkksT0FSSCxFQVFhNUUsS0FBTSxHQVJuQixDQVNULElBU1F1RywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInV0FBQSxTQUFZdkQsR0FDbEIsSUFBSXdELEVBQU8sR0FNWCxPQUpRcEssRUFBQTRHLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidPLFNBQUVyTSxFQUFPNEYsR0FDdEJpSyxHQUFRN1AsRUFBUSxJQUFLZ0gsRUFBY3BCLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBQW5CLEtBQStCNUYsRUFBL0IsSUFBMkMsRUFDM0QsQ0FGTSxFQUlENlAsRUFBS2onCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixLQUFaLENBQ0YsSUFTUTZCLFlBQUEsU0FBYTNDLEdBQ25CLElBQUkwQyxFQUFRLEdBTScKICAgICAgICAgICAgICAgICAgICAgICAgYidaLE9BSlEvRyxFQUFBcUUsRUFBUSxTQUFFOUosRUFBTzRGLEdBQ2Q0RyxPQUFLeEYsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NwQixDQUFBLEVBQW5CLElBQThCNUYsRUFBOUIsR0FDVCxDQUZNLEVBSUR3TSxFQUFNNUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQWIsQ0FDRixJQU9Ra0YsYUFBQSxXQUF1QixJQUFBQyxFQUFBbEcsS0FDWG1HLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidRbkcsS0FBS2tCLE9BQXZCckIsU0FFRCxPQUFBRyxLQUFLb0IsT0FBT2lCLElBQUssU0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dDLEdBQzFCLE1BQUEsSUFBSzZELEVBQVMsSUFBQUQsRUFBS0gsV0FBWXpELEVBQVFFLEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUF6QixPQUFzQ0YsRUFBUUMsTUFBUSxTQUFTNEQsRUFBN0UsR0FDUCxDQUZLLEVBRUgzRycKICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBTSxFQUZILENBR1QsSUFPUWlELE1BQUEsU0FBT0gsR0FDYixJQUFRckMsRUFBc0JxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsRUFBdEJyQyxPQUFzQnFDLEVBQUFBLEVBQWRDLEtBQUFBLGFBQU8sR0FBdkI2RCxFQUUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS3BHLEtBQUs1SyxRQUFRcU4sT0FBV3pDLENBQUFBLEtBQUs1SyxRQUFRaVIsV0FDbENDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFNL0QsRUFBSzVNLE1BQU8sb0NBQVosSUFFQTJRLEVBQUssS0FDUnJHLEVBQUFzRyxXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSwrQkFBNkNELEVBQUssR0FBbEQsS0FHYixJQU9ReEQsZUFBQSxTQUFnQjdCLEdBS2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBSkYsSUFBRWhKLEVBQVkrSCxLQUFLNUssUUFBakI2QyxRQUNGdU8sRUFBU3hHLEtBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidLdUUsY0FBZCxFQUNBbkQsRUFBU0gsRUFBU2hMLE1BQWxCLEVBRUVtTCxFQUFPbEMsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NzSCxHQUN0Qi9MLEVBQU0yRyxFQUFRQSxDQUFkLEVBR0YzRyxFQUFNMkcsRUFBT25MLE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFPLENBQUN1USxDQUFmLEVBQXVCMUssUUFBN0IsRUFBd0NzRixFQUFPbkwsTUFBTyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBR3VRLENBQWpCLENBQXhDLEVBQW1FbE0sUUFBUyxTQUFFZ0ksRUFBUzdNLEdBQ3JGLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNK00sRUFBUXhHLEVBQVEsR0FBSXNHLEVBQVFFLE1BQU8sQ0FBRUUsTUFBV0osRUFBUUUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQU1FLE1BQWxCLElBQTZCekssRUFBUUUsS0FBOUMsQ0FBM0IsRUFDUkEsRUFBUTZELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRLEdBQUlzRyxFQUFTLENBQUVFLE1BQUFBLENBQUYsQ0FBYixFQUN0Qi9NLEVBQVErJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1EsRUFBUXZGLEVBQVN3RixRQUFTdE8sQ0FBbEIsRUFBNEI4SSxFQUFTeEcsS0FBTXRDLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFmLENBQzVDLENBSkYsQ0FLRixJQU9Rb00sY0FBQSxXQUNELElBQ0tuUCxFQURMLE9BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBNEssS0FBSzZDLE9BQUwsR0FDS3pOLEVBQVk0SyxLQUFaNUssU0FFS3dNLFFBSUc3RSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQW5ELGFBQVFvRyxLQUFLcUIsWUFBWWdCLElBQUssU0FBQXFFLEdBQUEsT0FBQUEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsR0FBNkJ2UCxPQUE3QixDQUF0QixDQUFSLElBQ0svQixFQUFRdVIsZUFBaUIsR0FBTScKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FHL0MsQ0FDVCxJQU9RQyxhQUFBLFdBQ04sSUFBSXJFLEVBQU8sR0FPSixPQUxDQSxrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JBQWdCdkMsS0FBSzVLLFFBQVE2QyxRQUFRWixPQUFyQyxNQUNBMkksS0FBSzZHLFlBQWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsQ0FBbEIsRUFDQTdHLEtBQUs2RyxZQUFhLENBQUEsQ0FBbEIsRUFDQSxRQUdWLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJQVVRQSxZQUFBLFNBQWF4TyxHQUNuQixJQUFBeU8sRUFBMEI5RyxLQUFLNUssUUFBdkI2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsSUFBQUEsUUFBU1EsSUFBQUEsS0FDWCtKLEVBQVEsQ0FDWkUsTUFBZXpLLEVBQVFHLFcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFXQyxFQUFPSixFQUFRSSxLQUFPSixFQUFRSyxNQUNoRXRCLEtBQVcsU0FDWCtQLFVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidXMU8sRUFBT0ksRUFBS0osS0FBT0ksRUFBS0gsSUFIdkIsRUFNZCxNQUFtQixXQUFBMEgsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQUsrRixXQUFZdkQsQ0FBakIsRUFBbkIsaUdBRWlCeEMsS0FBSzVLLFFBQVE0UixXbEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndnBCZCx5RmtDcXBCaEIscUJBS0YsSUFPQXpFLEtBQUEsV0FDUSxJQUFBMEUsRUFBNkZqSCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBS2tCLE9BQWhHZ0csSUFBQUEsVUFBV3RILElBQUFBLFFBQVN2SSxJQUFBQSxPQUFRJwogICAgICAgICAgICAgICAgICAgICAgICBiJzhQLElBQUFBLFlBQWFDLElBQUFBLFdBQVlDLElBQUFBLE9BQVFDLElBQUFBLGFBQWNDLEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQSxZQUUvRWhGLEVBQU8sR0FpQ0osT0E5QkNBLEdBRFJBLEdBQUEsWUFBcUJ2QyxLQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBS0QsR0FBZ0IsWUFBQUMsS0FBSzRGLGFBQUwsRUFBeUJzQixLQUFBQSxHQUFhLElBQWhGJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxpQkFDbUJsSCxLQUFLRixNQUFNTyxRQUF0QixZQUVIZ0gsSUFFSzlFLEVBRFJBLEdBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInK0UsR0FBZ0IsSUFDaEIsZ0NBR1YvRSxHQUFRNEUsR0FBZSxHQUVsQjlQLElBQ0hrTCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUXZDLEtBQUs0RyxhQUFiLEdBV0ZyRSxHQUhBQSxHQUpBQSxFQURRQSxFQUFBLCtCQUNSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFhM0MsRUFBYiwyQkFFUUksS0FBS2lHLGFBQWIsR0FFQSxLQUFjckcsRUFBZCxNQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUSxVQUVBd0gsR0FBYyxJQUVqQkMsSUFFSDlFLEVBRFFBLEVBQUEsVUFDQWdGLEdBQWUsSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBR2pCaEYsR0FBQSxRQUdWIn0nLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLXJlbmRlcmVyLm1pbi5qcy5tYXAnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYid7InZlcnNpb24iOjMsImZpbGUiOiJzcGxpZGUtcmVuZGVyZXIubWluLmpzIiwic28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJjZXMiOlsiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQXJyb3dzL3BhdGgudHMiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9kaXJlY3Rpb25zLnRzIiwiLi4vLi4vcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYy9qcy9jb21wb25lbnRzL0RpcmVjdGlvbi9EaXJlY3Rpb24udHMiLCIuLi8uLi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3JjL2pzL2NvbnN0YW50cy9hcnJvd3MudHMiLCIuLi8uLi9zcmMvanMvY29uc3RhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cy9wcm9qZWN0LnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9jbGFzc2VzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvZGVmYXVsdHMudHMiLCIuLi8uLi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3JjL2pzL2NvbnN0YW50cy9pMThuLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JheUxpa2Uvc2xpY2Uvc2xpY2UudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uL2FwcGx5L2FwcGx5LnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL3R5cGUvdHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGUudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvYXJyYXkvdG9BcnJheS90b0FycmF5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheS9mb3JFYWNoL2ZvckVhY2gudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L3B1c2gvcHVzaC50cyIsIi4uLy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLi9zcmMvanMvdXRpbHMvZG9tL21hdGNoZXMvbWF0Y2hlcy50cyIsIi4uLy4uL3NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MvanMvdXRpbHMvZG9tL2NoaWxkL2NoaWxkLnRzIiwiLi4vLi4vc3JjL2pzL3V0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidscy9kb20vY2hpbGRyZW4vY2hpbGRyZW4udHMiLCIuLi8uLi9zcmMvanMvdXRpbHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL29iamVjdC9vd25LZXlzL293bktleXMudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdC9mb3JPd24vZm9yT3duLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QvYXNzaWduL2Fzc2lnbi50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9vYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL21lcmdlL21lcmdlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9yZW1vdmUvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW92ZS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vdW5pdC91bml0LnRzIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIi4uLy4uL3NyYy9qcy91dGlscy9lcnJvci9hc3NlcnQvYXNzZXJ0LnRzIiwiLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLy4uL3NyYy9qcy91dGlscy9tYXRoL21hdGgvbWF0aC50cyIsIi4uLy4uL3NyYy9qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MvdXRpbHMvc3RyaW5nL2NhbWVsVG9LZWJhYi9jYW1lbFRvS2ViYWIudHMiLCIuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvLi4vc3JjL2pzL3V0aWxzL3N0cmluZy91bmlxdWVJZC91bmlxdWVJZC50cyIsIi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLi8uLi9zcmMvanMvY29uc3RydWN0b3JzL0V2ZW50QmluZGVyL0V2ZW50QmluZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheS9lbXB0eS9lbXB0eS50cyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi8uLi9zcmMvanMvY29uc3RydWN0b3JzL0V2ZW50SW50ZXJmYWNlL0V2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZS50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvZXZlbnRzLnRzIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4uLy4uL3NyYy9qcy9yZW5kZXJlci9jb25zdGFudHMvY2xhc3Nlcy50cyIsIi4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi9zcmMvanMvcmVuZGVyZXIvY29uc3RhbnRzL2RlZmF1bHRzLnRzIiwiLi4vLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL3NyYy9qcy9yZW5kZXJlci9TdHlsZS9TdHlsZS50cyIsIi4uLy4uL3NyYy9qcy9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZGVyZXIvU3BsaWRlUmVuZGVyZXIvU3BsaWRlUmVuZGVyZXIudHMiLCIuLi8uLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvc3JjL2pzL3V0aWxzL3N0cmluZy9wYWQvcGFkLnRzIiwiLi4vLi4vc3JjL2pzL3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlscy9kb20vcXVlcnlBbGwvcXVlcnlBbGwudHMiLCIuLi8uLi9zcmMvanMvY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YW50cy90eXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcXHJcXG4gKiBUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIG5hbWVzcGFjZSBmb3IgU1ZHIGVsZW1lbnRzLlxcclxcbiAqL1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgY29uc3QgWE1MX05BTUVfU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiMDAvc3ZnJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgYXJyb3cgcGF0aCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFBBVEggPSAnbTE1LjUgMC45MzIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLTQuMyA0LjM4IDE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAxNC42LTE0LjYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjQuNC00LjMtNC40LTQuNC0xNC42LTE0LjZ6JztcXHJcXG5cXHJcXG4vKipcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogU1ZHIHdpZHRoIGFuZCBoZWlnaHQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBTSVpFID0gNDA7XFxyXFxuIiwiLyoqXFxyXFxuICogRW51bWVyYXRlcyBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzIGZyb20gbGVmdCB0byByaWdodC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInN0IExUUiA9ICdsdHInO1xcclxcblxcclxcbi8qKlxcclxcbiAqIEVudW1lcmF0ZXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlcyBmcm9tIHJpZ2h0IHRvIGxlZnQuXFxyXFxuICovXFxyXFxuZXhwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjb25zdCBSVEwgPSAncnRsJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBFbnVtZXJhdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBzbGlkZXMgaW4gYSBjb2wuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVEIgPSBcJ3R0YlwnO1xcclxcbiIsImltcG9ydCB7IEFSUk9XX0RPV04sIEFSUk9XJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIl9MRUZULCBBUlJPV19SSUdIVCwgQVJST1dfVVAgfSBmcm9tICcuLi8uLi9jb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhbnRzL2Fycm93cyc7XFxyXFxuaW1wb3J0IHsgUlRMLCBUVEIgfSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29uc3RhbnRzL2RpcmVjdGlvbnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZybyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIERpcmVjdGlvbiBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuICByZXNvbHZlKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvcDogc3RyaW5nLCBheGlzT25seT86IGJvb2xlYW4sIGRpcmVjdGlvbj86IE9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRpb25zWydkaXJlY3Rpb24nXSApOiBzdHJpbmc7XFxyXFxuICBvcmllbnQoIHZhbHVlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyICk6IG51bWJlcjtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIFRoZSB0cmFuc2xhdGlvbiBtYXAgZm9yIGRpcmVjdGlvbnMuXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IE9SJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIklFTlRBVElPTl9NQVAgPSB7XFxyXFxuICB3aWR0aCAgICAgOiBbICdoZWlnaHQnIF0sIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAgbGVmdCAgICAgIDogWyAndG9wJywgJ3JpZ2h0JyBdLFxcclxcbiAgciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpZ2h0ICAgICA6IFsgJ2JvdHRvbScsICdsZWZ0JyBdLFxcclxcbiAgeCAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6IFsgJ3knIF0sXFxyXFxuICBYICAgICAgICAgOiBbICdZJyBdLFxcclxcbiAgWSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICA6IFsgJ1gnIF0sXFxyXFxuICBBcnJvd0xlZnQgOiBbIEFSUk9XX1VQLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1dfUklHSFQgXSxcXHJcXG4gIEFycm93UmlnaHQ6IFsgQVJST1dfRE9XTiwgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUk9XX0xFRlQgXSxcXHJcXG59O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50IHRoYXQgYWJzb3JicyB0aGUgZGlmZmVyZW5jZSBhbW9uZyBkaXJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAcmV0dXJuIEEgRGlyZWN0aW9uIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBmdW5jdGlvbiBEaXJlY3Rpb24oIFNwbGlkZTogU3BsaWRlLCBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBEaXJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uQ29tcG9uZW50IHtcXHJcXG4gIC8qKlxcclxcbiAgICogUmVzb2x2ZXMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBwcm92aWRlZCBwcm9wZXJ0eSBuYW1lLlxcclxcbiAgICpcXHJcXG4gICAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gcHJvcCAgICAgIC0gQSBwcm9wZXJ0eSBuYW1lIHRvIHRyYW5zbGF0ZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcGFyYW0gYXhpc09ubHkgIC0gT3B0aW9uYWwuIElmIGB0dXJlYCwgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybnMgdGhlIHNhbWUgcHJvcGVydHkgZm9yIExUUiBhbmQgUlRMLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBkaXJlY3Rpb24gLSBPcHRpb25hbC4gU3BlY2lmeSB0aGUgZGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGBkaXJlY3Rpb25gIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHJlc29sdmUoIHByb3A6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpbmcsIGF4aXNPbmx5PzogYm9vbGVhbiwgZGlyZWN0aW9uPzogT3B0aW9uc1snZGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmVjdGlvbiddICk6IHN0cmluZyB7XFxyXFxuICAgIGRpcmVjdGlvbiA9IGRpcmVjdGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gfHwgb3B0aW9ucy5kaXJlY3Rpb247XFxyXFxuICAgIGNvbnN0IGluZGV4ID0gZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbiA9PT0gUlRMICYmICEgYXhpc09ubHkgPyAxIDogZGlyZWN0aW9uID09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gVFRCID8gMCA6IC0xO1xcclxcblxcclxcbiAgICByZXR1cm4gT1JJRU5UQVRJTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOX01BUFsgcHJvcCBdICYmIE9SSUVOVEFUSU9OX01BUFsgcHJvcCBdWyBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXVxcclxcbiAgICAgIHx8IHByb3AucmVwbGFjZSggL3dpZHRofGxlZnR8cmlnaHQvaSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICggbWF0Y2gsIG9mZnNldCApID0+IHtcXHJcXG4gICAgICAgIGNvbnN0IHJlcGxhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudCA9IE9SSUVOVEFUSU9OX01BUFsgbWF0Y2gudG9Mb3dlckNhc2UoKSBdWyBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggXSB8fCBtYXRjaDtcXHJcXG4gICAgICAgIHJldHVybiBvZmZzZXQgPiAwID8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlcGxhY2VtZW50LmNoYXJBdCggMCApLnRvVXBwZXJDYXNlKCkgKyByZXBsYWNlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQuc2xpY2UoIDEgKSA6IHJlcGxhY2VtZW50O1xcclxcbiAgICAgIH0gKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIE9yaWVudHMgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSB0b3dhcmRzIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0byBvcmllbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIG9yaWVudGVkIHZhbHVlLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb3JpZW50KCB2YWx1ZTogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gdmFsdWUgKiAoIG9wdGlvbnMuZGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiA9PT0gUlRMID8gMSA6IC0xICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHtcXHJcXG4gICAgcmVzb2x2ZSxcXHJcXG4gICAgb3JpZW50LFxcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcbiIsImNvbnN0IEFSUk9XID0gXCdBcnJvd1wnO1xcclxcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnQgY29uc3QgQVJST1dfTEVGVCAgPSBgJHsgQVJST1cgfUxlZnRgO1xcclxcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnQgY29uc3QgQVJST1dfUklHSFQgPSBgJHsgQVJST1cgfVJpZ2h0YDtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0IGNvbnN0IEFSUk9XX1VQICAgID0gYCR7IEFSUk9XIH1VcGA7XFxyXFxuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCBjb25zdCBBUlJPV19ET1dOICA9IGAkeyBBUlJPVyB9RG93bmA7IiwiLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFRoZSBwcm9qZWN0IGNvZGUuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFBST0pFQ1RfQ09ERSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInc3BsaWRlJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgZGF0YSBhdHRyaWJ1dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHByZWZpeC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG5leHBvcnQgY29uc3QgREFUQV9BVFRSSUJVVEUgPSBgZGF0YS0keyBQUk9KJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VDVF9DT0RFIH1gO1xcclxcbiIsImltcG9ydCB7IFBST0pFQ1RfQ09ERSB9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuL3Byb2plY3QnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBwcmVmaXggZm9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjbGFzc2VzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMS4wXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbmNvbnN0IENMQVNTX1BSRUZJWCA9IGAkeyBQUk9KRUNUX0NPREUgfV9fYDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHByZWZpeCBmb3Igc3RhdHVzIGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMS4wXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImNvbnN0IFNUQVRVU19DTEFTU19QUkVGSVggPSAnaXMtJztcXHJcXG5cXHJcXG4vKiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQWxsIGNsYXNzZXMgYXMgY29uc3RhbnRzLlxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgY29uc3QgQ0xBU1NfUk9PVCAgICAgICAgICAgID0gUFJPSkVDVF9DT0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRTtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVFJBQ0sgICAgICAgICAgID0gYCR7IEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19QUkVGSVggfXRyYWNrYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfTElTVCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfWxpc3RgO1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgQ0xBU1NfU0xJREUgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfQ0xPTkUgICAgICAgICAgID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AkeyBDTEFTU19TTElERSB9LS1jbG9uZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19DT05UQUlORVIgICAgICAgPSBgJHsgQ0xBU1NfU0xJREUgfV9fY29udGFpbmVyYCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0FSUk9XUyAgICAgICAgICA9IGAkeyBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfUFJFRklYIH1hcnJvd3NgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BUlJPVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9YXJyb3dgO1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgQ0xBU1NfQVJST1dfUFJFViAgICAgID0gYCR7IENMQVNTX0FSUk9XIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLS1wcmV2YDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfQVJST1dfTkVYVCAgICAgID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGAkeyBDTEFTU19BUlJPVyB9LS1uZXh0YDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1BBR0lOQVRJT04gICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXBhZ2luYXRpb25gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfUEFHSU5BVElPTl9QQUdFID0gYCR7IENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19QQUdJTkFUSU9OIH1fX3BhZ2VgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JPR1JFU1MgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9cHJvZ3Jlc3NgO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgY29uc3QgQ0xBU1NfUFJPR1JFU1NfQkFSICAgID0gYCR7IENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUk9HUkVTUyB9X19iYXJgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19UT0dHTEUgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9dG9nZ2xlYDtcXHJcXG5leHBvcnQgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IENMQVNTX1RPR0dMRV9QTEFZICAgICA9IGAkeyBDTEFTU19UT0dHTEUgfV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3BsYXlgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19UT0dHTEVfUEFVU0UgICAgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCR7IENMQVNTX1RPR0dMRSB9X19wYXVzZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19TUElOTkVSICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1zcGlubmVyYDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1NSICAgICAgICAgICAgICA9IGAkeyBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUFJFRklYIH1zcmA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0lOSVRJQUxJWkVEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgPSBgJHsgU1RBVFVTX0NMQVNTX1BSRUZJWCB9aW5pdGlhbGl6ZWRgO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgY29uc3QgQ0xBU1NfQUNUSVZFICAgICAgICAgID0gYCR7IFNUQVRVUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQ0xBU1NfUFJFRklYIH1hY3RpdmVgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFViAgICAgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfXByZXZgO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5leHBvcnQgY29uc3QgQ0xBU1NfTkVYVCAgICAgICAgICAgID0gYCR7IFNUQVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVNfQ0xBU1NfUFJFRklYIH1uZXh0YDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0lCTEUgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH12aXNpYmxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2A7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0xPQURJTkcgICAgICAgICA9IGAkeyBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBVFVTX0NMQVNTX1BSRUZJWCB9bG9hZGluZ2A7XFxyXFxuZXhwb3J0IGNvbnN0IENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19GT0NVU19JTiAgICAgICAgPSBgJHsgU1RBVFVTX0NMQVNTX1BSRUZJWCB9ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvY3VzLWluYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfT1ZFUkZMT1cgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1vdmVyZmxvd2A7XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi8qKlxcclxcbiAqIFRoZSBhcnJheSB3aXRoIGFsbCBzdGF0dXMgY2xhc3NlcyBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXB0IGZvciBgaXMtaW5pdGlhbGl6ZWRgLlxcclxcbiAqXFxyXFxuICogQHNpbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTVEFUVVNfQ0xBU1NFUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBbXFxyXFxuICBDTEFTU19BQ1RJVkUsXFxyXFxuICBDTEFTU19WSVNJQkxFLFxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIENMQVNTX1BSRVYsXFxyXFxuICBDTEFTU19ORVhULFxcclxcbiAgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0xPQURJTkcsXFxyXFxuICBDTEFTU19GT0NVU19JTixcXHJcXG4gIENMQVNTX09WJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VSRkxPVyxcXHJcXG5dO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb2xsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBvZiBjbGFzc2VzIGZvciBlbGVtZW50cyB0aGF0IFNwbGlkZSBkeW5hbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbHkgY3JlYXRlcy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NFUyA9IHtcXHJcXG4gIHNsaWRlICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgOiBDTEFTU19TTElERSxcXHJcXG4gIGNsb25lICAgICA6IENMQVNTX0NMT04nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxcXHJcXG4gIGFycm93cyAgICA6IENMQVNTX0FSUk9XUyxcXHJcXG4gIGFycm93JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgOiBDTEFTU19BUlJPVyxcXHJcXG4gIHByZXYgICAgICA6IENMQVNTX0FSUk9XJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19QUkVWLFxcclxcbiAgbmV4dCAgICAgIDogQ0xBU1NfQVJST1dfTkVYVCxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBwYWdpbmF0aW9uOiBDTEFTU19QQUdJTkFUSU9OLFxcclxcbiAgcGFnZSAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IENMQVNTX1BBR0lOQVRJT05fUEFHRSxcXHJcXG4gIHNwaW5uZXIgICA6IENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTUElOTkVSLFxcclxcbn07XFxyXFxuIiwiaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgQ0xBU1NFUyB9IGZyb20gJy4vY2xhc3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXMnO1xcclxcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuL2kxOG4nO1xcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29sbGVjdGlvbiBvZiBkZWZhdWx0IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLlxcclxcbiAqIE5vdGUgdGhhdCB0aGlzIGNvbGxlY3Rpb24gZG9lcyBub3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRhaW4gYWxsIG9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IERFRkFVTFRTOiBPcHRpb25zID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHtcXHJcXG4gIHR5cGUgICAgICAgICAgICAgIDogJ3NsaWRlJyxcXHJcXG4gIHJvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImxlICAgICAgICAgICAgICA6ICdyZWdpb24nLFxcclxcbiAgc3BlZWQgICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIDogNDAwLFxcclxcbiAgcGVyUGFnZSAgICAgICAgICAgOiAxLFxcclxcbiAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lU3RhdHVzICAgICAgIDogdHJ1ZSxcXHJcXG4gIGFycm93cyAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHRydWUsXFxyXFxuICBwYWdpbmF0aW9uICAgICAgICA6IHRydWUsXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnaW5hdGlvbktleWJvYXJkOiB0cnVlLFxcclxcbiAgaW50ZXJ2YWwgICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogNTAwMCxcXHJcXG4gIHBhdXNlT25Ib3ZlciAgICAgIDogdHJ1ZSxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXVzZU9uRm9jdXMgICAgICA6IHRydWUsXFxyXFxuICByZXNldFByb2dyZXNzICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgOiB0cnVlLFxcclxcbiAgZWFzaW5nICAgICAgICAgICAgOiAnY3ViaWMtYmV6aWVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIigwLjI1LCAxLCAwLjUsIDEpJyxcXHJcXG4gIGRyYWcgICAgICAgICAgICAgIDogdHJ1IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUsXFxyXFxuICBkaXJlY3Rpb24gICAgICAgICA6ICdsdHInLFxcclxcbiAgdHJpbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJTcGFjZSAgICAgICAgIDogdHJ1ZSxcXHJcXG4gIGZvY3VzYWJsZU5vZGVzICAgIDogJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhLCBidXR0b24sIHRleHRhcmVhLCBpbnB1dCwgc2VsZWN0LCBpZnJhbWUnLFxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxpdmUgICAgICAgICAgICAgIDogdHJ1ZSxcXHJcXG4gIGNsYXNzZXMgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICA6IENMQVNTRVMsXFxyXFxuICBpMThuICAgICAgICAgICAgICA6IEkxOE4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgcmVkdWNlZE1vdGlvbjoge1xcclxcbiAgICBzcGVlZCAgICAgIDogMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIHJld2luZFNwZWVkOiAwLFxcclxcbiAgICBhdXRvcGxheSAgIDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFwncGF1c2VcJyxcXHJcXG4gIH0sXFxyXFxufTsiLCIvKipcXHJcXG4gKiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbGxlY3Rpb24gb2YgaTE4biBzdHJpbmdzLlxcclxcbiAqXFxyXFxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBJMThOID0ge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgIHByZXYgICAgICA6ICdQcmV2aW91cyBzbGlkZScsXFxyXFxuICBuZXh0ICAgICAgOiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ05leHQgc2xpZGUnLFxcclxcbiAgZmlyc3QgICAgIDogJ0dvIHRvIGZpcnN0IHNsaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJkZScsXFxyXFxuICBsYXN0ICAgICAgOiAnR28gdG8gbGFzdCBzbGlkZScsXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibiAgc2xpZGVYICAgIDogJ0dvIHRvIHNsaWRlICVzJyxcXHJcXG4gIHBhZ2VYICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiOiAnR28gdG8gcGFnZSAlcycsXFxyXFxuICBwbGF5ICAgICAgOiAnU3RhcnQgYXV0b3AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibGF5JyxcXHJcXG4gIHBhdXNlICAgICA6ICdQYXVzZSBhdXRvcGxheScsXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgY2Fyb3VzZWwgIDogJ2Nhcm91c2VsJyxcXHJcXG4gIHNsaWRlICAgICA6ICdzbGlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUnLFxcclxcbiAgc2VsZWN0ICAgIDogJ1NlbGVjdCBhIHNsaWRlIHRvIHNob3ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyxcXHJcXG4gIHNsaWRlTGFiZWw6ICclcyBvZiAlcycsIC8vIFsgc2xpZGUgbnVtYmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBdIC8gWyBzbGlkZSBzaXplIF1cXHJcXG59O1xcclxcbiIsIi8qKlxcclxcbiAqIFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgc2xpY2UgbWV0aG9kIGZvciBhbiBhcnJheS1saWtlIG9iamVjdC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICpcXHJcXG4gKiBAcGFyYW0gYXJyYXlMaWtlIC0gQW4gYXJyYXktbGlrZSBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAqIEBwYXJhbSBzdGFydCAgICAgLSBPcHRpb25hbC4gQSBzdGFydCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXguXFxyXFxuICogQHBhcmFtIGVuZCAgICAgICAtIE9wdGlvbmFsLiBBIGVuZCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXguXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFycmF5IHdpdGggc2xpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCBlbGVtZW50cy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gc2xpY2U8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Q+KCBhcnJheUxpa2U6IEFycmF5TGlrZTxUPiwgc3RhcnQ/OiBudW1iZXIsIGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/OiBudW1iZXIgKTogVFtdIHtcXHJcXG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWNlLmNhbGwoIGFycmF5TGlrZSwgc3RhcnQsIGVuZCApO1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaW1wb3J0IHsgQW55RnVuY3Rpb24sIFNoaWZ0TiB9IGZyb20gXCcuLi8uLi8uLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvdHlwZXMnO1xcclxcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi4vLi4vYXJyYXlMaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJrZSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ3JlYXRlIGEgZnVuY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHdoZXJlIHByb3ZpZGVkIGFyZ3VtZW50cyBhcmUgYm91bmQuXFxyXFxuICogYHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzYCBwYXJhbWV0ZXIgd2lsbCBiZSBhbHdheXMgbnVsbC5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAcGFyYW0gZnVuYyAtIEEgZnVuY3Rpb24uXFxyXFxuICogQHBhcmFtIGFyZ3MgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gQXJndW1lbnRzIHRvIGJpbmQgdG8gdGhlIGZ1bmN0aW9uLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEByZXR1cm4gQSBmdW5jdGlvbiB3aGVyZSBhcmd1bWVudHMgYXJlIGJvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gYXBwbHk8RiBleHRlbmRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBbnlGdW5jdGlvbiwgQSBleHRlbmRzIGFueVtdID0gYW55W10+KFxcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2M6IEYsXFxyXFxuICAuLi5hcmdzOiBBXFxyXFxuKTogKCAuLi5hcmdzOiBTaGlmdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOPFBhcmFtZXRlcnM8Rj4sIEFbXFwibGVuZ3RoXFwiXT4gKSA9PiBSZXR1cm5UeXBlPCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGPjtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGVyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJvdmlkZWQgYXJndW1lbnRzIGFyZSBib3VuZC5cXHJcXG4gKiBgdGhpc2AgcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZXRlciB3aWxsIGJlIGFsd2F5cyBudWxsLlxcclxcbiAqXFxyXFxuICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSBmdW5jIC0gQSBmdW5jdGlvbi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGFwcGx5KCBmdW5jOiBBbnlGdW5jdGlvbiApOiBhbnkge1xcclxcbiAgLy8gZXNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXMsIHByZWZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictc3ByZWFkXFxyXFxuICByZXR1cm4gZnVuYy5iaW5kKCBudWxsLCAuLi5zbGljZSggYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ3VtZW50cywgMSApICk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFueUZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhcHBseSB9IGYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicm9tICcuLi9mdW5jdGlvbic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSBhbGlhcyBvZiB0aGUgdHlwZSBjaGVjayBmdW5jdGlvbi5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAcGFyYW0gdHlwZSAgICAtIEEgdHlwZS5cXHJcXG4gKiBAcGFyYW0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgdGhlIHNwZWNpZmllZCB0eXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gKi9cXHJcXG5mdW5jdGlvbiB0eXBlT2YoIHR5cGU6IHN0cmluZywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N1YmplY3Q6IHVua25vd24gKTogYm9vbGVhbiB7XFxyXFxuICByZXR1cm4gdHlwZW9mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdWJqZWN0ID09PSB0eXBlO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGFuIG9iamVjdCBvciBub3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0IGlzIGFuIG9iamVjdCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCggc3ViamVjdDogdW5rbm93JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKTogc3ViamVjdCBpcyBvYmplY3Qge1xcclxcbiAgcmV0dXJuICEgaXNOdWxsKCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInViamVjdCApICYmIHR5cGVPZiggJ29iamVjdCcsIHN1YmplY3QgKTtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgaXMgYW4gYXJyYXkgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGFuIGFycmF5LCBvciBvdGhlcncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IGlzQXJyYXk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA8VD4oIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqZWN0IGlzIFRbXSA9IEFycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheS5pc0FycmF5O1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdmVuIHN1YmplY3QgaXMgYSBmdW5jdGlvbiBvciBub3QuXFxyXFxuICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgYSBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgaXNGdW5jdGlvbiA9IDwoIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVjdCBpcyBBbnlGdW5jdGlvbj5hcHBseSggdHlwZU9mLCAnZnVuY3Rpb24nICk7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaXMgYSBzdHJpbmcgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGEgc3RyaW5nLCBvciBvdGhlcndpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IGlzU3RyaW5nID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDwoIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqZWN0IGlzIHN0cmluZz5hcHBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInkoIHR5cGVPZiwgJ3N0cmluZycgKTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGVjIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGB1bmRlZmluZWRgIG9yIG5vdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaXMgYHVuZGVmaW5lZGAsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG5leHBvcnQgY29uc3QgaXNVbmRlZmluZWQgPSA8KCBzdWJqZWN0OiB1bmsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibm93biApID0+IHN1YmplY3QgaXMgdW5kZWZpbmVkPmFwcGx5KCB0eXBlT2YsICd1IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5kZWZpbmVkJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpdmVuIHN1YmplY3QgaXMgYG51bGxgIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBgbnVsbGAsIG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGlzTnVsbCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZWN0IGlzIG51bGwge1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIHJldHVybiBzdWJqZWN0ID09PSBudWxsO1xcclxcbn1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBIVE1MRWxlbWVudCBpbnN0YW5jZSBvciBub3QuXFxyXFxuICogVGhpcyBtZXRob2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRha2VzIGludG8gYWNjb3VudCB3aGljaCBgd2luZG93YCB0aGUgbm9kZSBiZWxvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25ncyB0by5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBzdWJqZWN0IC0gQSBzdWJqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCB0byBjaGVjay5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gYHRydWVgIGlmIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YW5jZSwgb3Igb3RoZXJ3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBpc0hUTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMRWxlbWVudCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZWN0IGlzIEhUTUxFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudCB7XFxyXFxuICB0cnkge1xcclxcbiAgICByZXR1cm4gc3ViamVjdCBpbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2VvZiAoICggc3ViamVjdCBhcyBOb2RlICkub3duZXJEb2N1bWVudC5kZWZhdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdFZpZXcgfHwgd2luZG93ICkuSFRNTEVsZW1lbnQ7XFxyXFxuICB9IGNhdGNoICggZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSB7XFxyXFxuICAgIHJldHVybiBmYWxzZTtcXHJcXG4gIH1cXHJcXG59IiwiaW1wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJydCB7IGlzQXJyYXkgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBQdXNoIHRoZSBwcm92aWRlZCB2YWx1ZSB0byBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gYXJyYXkgaWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBhcnJheS5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIHB1c2guXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHJldHVybiBBbiBhcnJheSBjb250YWluaW5nIHRoZSB2YWx1ZSwgb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSB2YWx1ZSBpdHNlbGYgaWYgaXQgaXMgYWxyZWFkeSBhbiBhcnJheS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXk8VD4oIHZhbHVlOiBUIHwgVFtdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApOiBUW10ge1xcclxcbiAgcmV0dXJuIGlzQXJyYXkoIHZhbHVlICkgPyB2YWx1ZSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBbIHZhbHVlIF07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IHRvQXJyYXkgfSBmcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbSAnLi4vdG9BcnJheS90b0FycmF5JztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogVGhlIGV4dGVuZGVkIGBBcnJheSNmb3JFYWNoYCBtZXRob2QgdGhhdCBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NjZXB0cyBhIHNpbmdsZSB2YWx1ZSBhcyBhbiBhcmd1bWVudC5cXHJcXG4gKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBAcGFyYW0gdmFsdWVzICAgLSBBIHZhbHVlIG9yIHZhbHVlcyB0byBpdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmF0ZSBvdmVyLlxcclxcbiAqIEBwYXJhbSBpdGVyYXRlZSAtIEFuIGl0ZXJhdGVlIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaDxUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz4oIHZhbHVlczogVCB8IFRbXSwgaXRlcmF0ZWU6ICggdmFsdWU6IFQsIGluZGV4OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyLCBhcnJheTogVFtdICkgPT4gdm9pZCApOiB2b2lkIHtcXHJcXG4gIHRvQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5KCB2YWx1ZXMgKS5mb3JFYWNoKCBpdGVyYXRlZSApO1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gXCcuLi90b0FycmF5L3RvQXJyYXlcJzsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRXh0ZW5kZWQgYEFycmF5I3B1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NoKClgIHRoYXQgYWNjZXB0cyBhbiBpdGVtIG9yIGFuIGFycmF5IHdpdGggaXRlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGFycmF5IC0gQW4gYXJyYXkgdG8gcHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2ggaXRlbXMuXFxyXFxuICogQHBhcmFtIGl0ZW1zIC0gQW4gaXRlbSBvciBpdGVtcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gcHVzaC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBwcm92aWRlZCBhcnJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3kgaXRzZWxmLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBwdXNoPFQ+KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXJyYXk6IFRbXSwgaXRlbXM6IFQgfCBUW10gKTogVFtdIHtcXHJcXG4gIGFycmF5LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdXNoKCAuLi50b0FycmF5KCBpdGVtcyApICk7XFxyXFxuICByZXR1cm4gYXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uLy4uL3R5cGUvdHlwZSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENoZWNrcyBpZiB0aGUgZWxlbWVudCBjYW4gYmUgc2VsZWN0ZWQgYnkgdGhlIHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292aWRlZCBzZWxlY3RvciBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbSAgICAgIC0gQW4gZWxlbWVudCB0byBjaGVjay5cXHJcXG4gKiBAcGFyYW0gc2VsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdG9yIC0gQSBzZWxlY3RvciB0byB0ZXN0LlxcclxcbiAqXFxyXFxuICogQHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gYHRydWVgIGlmIHRoZSBzZWxlY3RvciBtYXRjaGVzIHRoZSBlbGVtZW50LCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBtYXRjaGVzKCBlbG06IEVsZW1lbnQgfCBFdmVudFRhcmdldCwgc2VsZWN0b3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmcgKTogYm9vbGVhbiB7XFxyXFxuICByZXR1cm4gaXNIVE1MRWxlbWVudCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGVsbSApICYmICggZWxtWyAnbXNNYXRjaGVzU2VsZWN0b3InIF0gfHwgZWxtLm1hIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RjaGVzICkuY2FsbCggZWxtLCBzZWxlY3RvciApO1xcclxcbn1cXHJcXG4iLCJpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgY2hpbGRyZW4gfSBmcm9tICcuLi9jaGlsZHJlbi9jaGlsZHJlbic7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFJldHVybnMgYSBjaGlsZCBlbGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCB0aGF0IG1hdGNoZXMgdGhlIHNwZWNpZmllZCB0YWcgb3IgY2xhc3MgbmFtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gcGFyZW50ICAgLSBBIHBhcmVudCBlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudC5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBBIHNlbGVjdG9yIHRvIGZpbHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgY2hpbGRyZW4uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgbWF0Y2hlZCBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGQgZWxlbWVudCBpZiBhdmFpbGFibGUsIG9yIG90aGVyd2lzZSBgdW5kZWZpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZGAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkPEUgZXh0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgSFRNTEVsZW1lbnQ+KCBwYXJlbnQ6IEhUTUxFbGVtZW50LCBzZWxlY3Rvcj86JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmcgKTogRSB8IHVuZGVmaW5lZCB7XFxyXFxuICByZXR1cm4gc2VsZWN0b3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gY2hpbGRyZW48RT4oIHBhcmVudCwgc2VsZWN0b3IgKVsgMCBdIDogcGFyZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaXJzdEVsZW1lbnRDaGlsZCBhcyBFO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic2xpY2UgfSBmcm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCB7IG1hdGMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaGVzIH0gZnJvbSAnLi4vbWF0Y2hlcy9tYXRjaGVzJztcXHJcXG5cXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogRmluZHMgY2hpbGRyZW4gdGhhdCBoYXMgdGhlIHNwZWNpZmllZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFnIG9yIGNsYXNzIG5hbWUuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gcGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC0gQSBwYXJlbnQgZWxlbWVudC5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIEEgc2VsZWN0b3IgdG8gZmlsdGVyIGNoaWxkcmVuLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBmaWx0ZXJlZCBjaGlsZHJlbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkcmVuPEUgZXh0ZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgSFRNTEVsZW1lbnQ+KCBwYXJlbnQ6IEhUTUxFbGVtZW50LCBzZWxlY3Rvcj86ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJpbmcgKTogRVtdIHtcXHJcXG4gIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50ID8gcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWNlKCBwYXJlbnQuY2hpbGRyZW4gKSBhcyBFW10gOiBbXTtcXHJcXG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0b3IgPyBjaGlsZHJlbi5maWx0ZXIoIGNoaWxkID0+IG1hdGNoZXMoIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlsZCwgc2VsZWN0b3IgKSApIDogY2hpbGRyZW47XFxyXFxufVxcclxcbiIsIi8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBBbiBhbGlhcyBvZiBgT2JqZWN0LmtleXMoKWBcXHJcXG4gKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuZXhwb3J0IGNvbnN0IG93bktleXMgPSBPYmplY3Qua2V5czsiLCJpbXBvcnQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgb3duS2V5cyB9IGZyb20gJy4uL293bktleXMvb3duS2V5cyc7XFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbi8qKlxcclxcbiAqIEl0ZXJhdGVzIG92ZXIgdGhlIHByb3ZpZGVkIG9iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QgYnkgb3duIGVudW1lcmFibGUga2V5cyB3aXRoIGNhbGxpbmcgdGhlIGl0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlZSBmdW5jdGlvbi5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBvYmplY3QgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBbiBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxcclxcbiAqIEBwYXJhbSBpdGVyYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWUgLSBBbiBpdGVyYXRlZSBmdW5jdGlvbiB0aGF0IHRha2VzIGB2YWx1ZWAgYW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBga2V5YCBhcyBhcmd1bWVudHMuXFxyXFxuICogQHBhcmFtIHJpZ2h0ICAgIC0gSWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2B0cnVlYCwgdGhlIG1ldGhvZCBpdGVyYXRlcyBvdmVyIHRoZSBvYmplY3QgZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIGVuZCBsaWtlIGBmb3JFYWNoUmlnaHQoKWAuXFxyXFxuICpcXHJcXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQHJldHVybiBBIHByb3ZpZGVkIG9iamVjdCBpdHNlbGYuXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCBmdW5jdGlvbiBmb3JPd248VCBleHRlbmRzIG9iamVjdD4oXFxyXFxuICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0OiBULFxcclxcbiAgaXRlcmF0ZWU6ICggdmFsdWU6IFRbIGtleW9mIFQgXSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleTogc3RyaW5nICkgPT4gYm9vbGVhbiB8IHZvaWQsXFxyXFxuICByaWdodD86IGJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sZWFuXFxyXFxuKTogVCB7XFxyXFxuICBpZiAoIG9iamVjdCApIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggcmlnaHQgPyBvd25LZXlzKCBvYmplY3QgKS5yZXZlcnNlKCkgOiBvd25LZXlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgb2JqZWN0ICkgKS5mb3JFYWNoKCBrZXkgPT4ge1xcclxcbiAgICAgIGtleSAhPT0gJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJfX3Byb3RvX18nICYmIGl0ZXJhdGVlKCBvYmplY3RbIGtleSBdLCBrZXkgKTtcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiBvYmplY3Q7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBDYXN0LCBIZWFkLCBQdXNoLCBSZXNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ2ZSwgU2hpZnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsaWNlIH0gZnJvbSAnLi4vLi4vYXJyYXlMaWtlJztcXHJcXG5pbXBvcnQgeyBmb3JPdyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuIH0gZnJvbSAnLi4vZm9yT3duL2Zvck93bic7XFxyXFxuXFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAqIEFzc2lnbnMgVSB0byBULlxcclxcbiAqXFxyXFxuICogQHR5cGVQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gVCAtIEFuIG9iamVjdCB0byBhc3NpZ24gdG8uXFxyXFxuICogQHR5cGVQYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gVSAtIEFuIG9iamVjdCB0byBhc3NpZ24uXFxyXFxuICpcXHJcXG4gKiBAcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBBbiBhc3NpZ25lZCBvYmplY3QgdHlwZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHR5cGUgQXNzaWduPFQsIFU+ID0gT21pdDxULCBrZXlvZiBVPiAmIFU7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFJlY3Vyc2l2ZWx5IGFzc2lnbnMgVVtdIHRvIFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHR5cGVQYXJhbSBUIC0gQW4gb2JqZWN0IHRvIGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpZ24gdG8uXFxyXFxuICogQHR5cGVQYXJhbSBVIC0gQSB0dXBsZSBjb250YWlucyBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0cy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXNzaWduZWQgb2JqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCB0eXBlIEFzc2lnbmVkPFQgZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0W10sIE4gZXh0ZW5kcyBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyLCBDIGV4dGVuZHMgYW55W10gPSBbXT4gPSB7XFxyXFxuICAwOiBULFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIDE6IEFzc2lnbmVkPEFzc2lnbjxULCBIZWFkPFU+PiwgU2hpZnQ8VT4sIE4sIFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidXNoPEM+PixcXHJcXG59WyBDWydsZW5ndGgnXSBleHRlbmRzIE4gPyAwIDogMSBdIGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHRlbmRzIGluZmVyIEEgPyBDYXN0PEEsIGFueT4gOiBuZXZlcjtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUIGV4dGVuZHMgb2JqZWN0Piggb2JqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdDogVCApOiBUO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ248VCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmplY3RbXT4oXFxyXFxuICBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBULFxcclxcbiAgLi4uc291cmNlczogVVxcclxcbik6IFJlc29sdmU8QXNzaWduJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVkPFQsIFUsIFVbJ2xlbmd0aCddPj5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBBc3NpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ducyBhbGwgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyBvZiBhbGwgc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3RzIHRvIHRoZSBwcm92aWRlZCBvYmplY3QuXFxyXFxuICpcXHJcXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQHBhcmFtIG9iamVjdCAtIEFuIG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIG9iamVjdCBhc3NpZ25lZCBwcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcGVydGllcyBvZiB0aGUgc291cmNlcyB0by5cXHJcXG4gKi9cXHJcXG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGFzc2lnbjxUIGV4dGVuZHMgb2JqZWN0Piggb2JqZWN0OiBUICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhbnkge1xcclxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdC1wYXJhbXMsIHByZWZlci1zcHJlYWRcXHJcXG4gIHNsaWNlKCBhcmd1bWVudHMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxICkuZm9yRWFjaCggc291cmNlID0+IHtcXHJcXG4gICAgZm9yT3duKCBzb3VyY2UsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoIHZhbHVlLCBrZXkgKSA9PiB7XFxyXFxuICAgICAgb2JqZWN0WyBrZXkgXSA9IHNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyY2VbIGtleSBdO1xcclxcbiAgICB9ICk7XFxyXFxuICB9ICk7XFxyXFxuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgcmV0dXJuIG9iamVjdDtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQ2FzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEhlYWQsIFB1c2gsIFJlc29sdmUsIFNoaWZ0IH0gZnJvbSAnLi4vLi4vLi4vdHlwIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVzJztcXHJcXG5pbXBvcnQgeyBzbGljZSB9IGZyb20gJy4uLy4uL2FycmF5TGlrZSc7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vdHlwIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUvdHlwZSc7XFxyXFxuaW1wb3J0IHsgZm9yT3duIH0gZnJvbSAnLi4vZm9yT3duL2ZvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJPd24nO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIE1lcmdlcyBVIHRvICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidULlxcclxcbiAqXFxyXFxuICogQHR5cGVQYXJhbSBUIC0gQW4gb2JqZWN0IHRvIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJnZSBVIGludG8uXFxyXFxuICogQHR5cGVQYXJhbSBVIC0gQW4gb2JqZWN0IHRvIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJnZSBwcm9wZXJ0aWVzIGZyb20uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lcmdlZCBvYmplY3QgdHlwZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBNZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2U8VCBleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdD4gPSBPbWl0PFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBrZXlvZiBVPiAmIHtcXHJcXG4gIFsgSyBpbiAoIGtleW9mIFQgJiBrZXlvZiBVICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIF06IFVbIEsgXSBleHRlbmRzIG9iamVjdFxcclxcbiAgICA/IFVbIEsgXSBleHRlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBhbnlbXVxcclxcbiAgICAgID8gVVsgSyBdXFxyXFxuICAgICAgOiBUWyBLIF0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dGVuZHMgb2JqZWN0XFxyXFxuICAgICAgICA/IE1lcmdlPFRbIEsgXSwgVVsgSyBdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz4gZXh0ZW5kcyBpbmZlciBBID8gUmVzb2x2ZTxDYXN0PEEsIG9iamVjdD4+IDogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVyXFxyXFxuICAgICAgICA6IFVbIEsgXVxcclxcbiAgICA6IFVbIEsgXTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidufSAmIE9taXQ8VSwga2V5b2YgVD47XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmVjdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc2l2ZWx5IG1lcmdlcyBVW10gdG8gVC5cXHJcXG4gKlxcclxcbiAqIEB0eXBlUGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIFQgLSBBbiBvYmplY3QgdG8gYXNzaWduIHRvLlxcclxcbiAqIEB0eXBlUGFyYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFUgLSBBIHR1cGxlIGNvbnRhaW5zIG9iamVjdHMuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBBbiBhc3NpZ25lZCBvYmplY3QgdHlwZS5cXHJcXG4gKi9cXHJcXG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IHR5cGUgTWVyZ2VkPFQgZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0W10sIE4gZXh0ZW5kcyBudW1iZXIsIEMgZXh0ZW5kcyBhbnlbXSA9IFtdPiA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAwOiBULFxcclxcbiAgMTogTWVyZ2VkPE1lcmdlPFQsIEhlYWQ8VScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI+PiwgU2hpZnQ8VT4sIE4sIFB1c2g8Qz4+LFxcclxcbn1bIENbJ2xlbmd0aCddIGV4dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRzIE4gPyAwIDogMSBdIGV4dGVuZHMgaW5mZXIgQSA/IENhc3Q8QSwgYW55PiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBuZXZlcjtcXHJcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2U8VCBleHRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kcyBvYmplY3Q+KCBvYmplY3Q6IFQgKTogVDtcXHJcXG5cXHJcXG5leHBvcnQgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIG1lcmdlPFQgZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW10+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgLi4uc291cmNlczogVVxcclxcbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiOiBSZXNvbHZlPE1lcmdlZDxULCBVLCBVWydsZW5ndGgnXT4+XFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAqIFJlY3Vyc2l2ZWx5IG1lcmdlcyBzb3VyY2UgcHJvcGVydGllcyB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28gdGhlIG9iamVjdC5cXHJcXG4gKiBCZSBhd2FyZSB0aGF0IHRoaXMgbWV0aG9kIGRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIG5vdCBtZXJnZSBhcnJheXMuIFRoZXkgYXJlIGp1c3QgZHVwbGljYXRlZCBieScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYHNsaWNlKClgLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG9iamVjdCAtIEFuIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3QgdG8gbWVyZ2UgcHJvcGVydGllcyB0by5cXHJcXG4gKlxcclxcbiAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIEEgbmV3IG9iamVjdCB3aXRoIG1lcmdlZCBwcm9wZXJ0aWVzLlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2U8VCBleHRlbmRzIG9iamVjdD4oIG9iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Q6IFQgKTogYW55IHtcXHJcXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgcHJlZmVyLXJlc3QtcGFyYW1zXFxyXFxuICBzbGljZSggYXJndW1lbnRzLCAxICkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvckVhY2goIHNvdXJjZSA9PiB7XFxyXFxuICAgIGZvck93biggc291cmNlLCAoIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSwga2V5ICkgPT4ge1xcclxcbiAgICAgIGlmICggaXNBcnJheSggdmFsdWUgKSApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgICBvYmplY3RbIGtleSBdID0gdmFsdWUuc2xpY2UoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgfSBlbHNlIGlmICggaXNPYmplY3QoIHZhbHVlICkgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgb2JqZWN0WyBrZXkgXSA9IG1lcmdlKCB7fSwgaXNPYmplY3QoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3RbIGtleSBdICkgPyBvYmplY3RbIGtleSBdIDoge30sIHZhbHVlICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICBvYmplY3RbIGtleSBdID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcbiAgfSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIHJldHVybiBvYmplY3Q7XFxyXFxufVxcclxcbiIsImltcG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBmb3JFYWNoIH0gZnJvbSAnLi4vLi4vYXJyYXknO1xcclxcblxcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBSZW1vdmVzIHRoZSBwcm92aWRlZCBub2RlIGZyb20gaXRzIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gbm9kZXMgLSBBIG5vZGUgb3IgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGVzIHRvIHJlbW92ZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZSggbm9kZXM6IE5vZGUgfCBOb2RlW10gKTogdm9pZCB7XFxyXFxuICBmb3JFYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCggbm9kZXMsIG5vZGUgPT4ge1xcclxcbiAgICBpZiAoIG5vZGUgJiYgbm9kZS5wYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50Tm9kZSApIHtcXHJcXG4gICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBub2RlICk7XFxyXFxuICAgIH1cXHJcXG4gIH0gKTtcXHJcXG59XFxyXFxuIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdHlwZS90eXBlJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQXBwZW5kcyBgcHhgIHRvIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJvdmlkZWQgbnVtYmVyLlxcclxcbiAqIElmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJpbmcsIGp1c3QgcmV0dXJucyBpdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUgLSBBIHZhbHVlIHRvIGFwcGVuZCBgcHhgIHRvLlxcclxcbiAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEByZXR1cm4gQSBzdHJpbmcgd2l0aCB0aGUgQ1NTIHVuaXQuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB1bml0KCB2YWx1ZTogbnVtYmVyIHwgc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZyApOiBzdHJpbmcge1xcclxcbiAgcmV0dXJuIGlzU3RyaW5nKCB2YWx1ZSApID8gdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlIDogdmFsdWUgPyBgJHsgdmFsdWUgfXB4YCA6IFwnXCc7XFxyXFxufVxcclxcbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJpbXBvcnQgeyBQUk9KRUNUX0NPREUgfSBmcm9tIFwnLi4vLi4vLi4vY29uc3RhbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0cy9wcm9qZWN0JztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaHJvd3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBjb25kaXRpb24gaXMgZmFsc3kuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqXFxyXFxuICogQHBhcmFtIGNvbmRpdGlvbiAtIElmIGZhbHN5LCBhbiBlcnJvciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgdGhyb3duLlxcclxcbiAqIEBwYXJhbSBtZXNzYWdlICAgLSBPcHRpb25hbC4gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVzc2FnZSB0byBkaXNwbGF5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gYXNzZXJ0KCBjb25kaXRpb246IGFueSwgbWVzc2FnZT86IHN0cmluZyApOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZCB7XFxyXFxuICBpZiAoICEgY29uZGl0aW9uICkge1xcclxcbiAgICB0aHJvdyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmV3IEVycm9yKCBgWyR7IFBST0pFQ1RfQ09ERSB9XSAkeyBtZXNzYWdlIHx8ICcnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9YCApO1xcclxcbiAgfVxcclxcbn1cXHJcXG4iLCJleHBvcnQgY29uc3QgeyBtaW4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtYXgsIGZsb29yLCBjZWlsLCBhYnMgfSA9IE1hdGg7XFxyXFxuIiwiLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIENvbnZlcnRzIHRoZSBwcm92aWRlZCBzdHJpbmcgaW4gdGhlIGNhbWVsIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNlIHRvIHRoZSBrZWJhYiBjYXNlLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbmcgLSBBIHN0cmluZyB0byBjb252ZXJ0LlxcclxcbiAqL1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gY2FtZWxUb0tlYmFiKCBzdHJpbmc6IHN0cmluZyApOiBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSggLyhbYS16MC05XSkoW0EtWl0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKS9nLCBcJyQxLSQyXCcgKS50b0xvd2VyQ2FzZSgpO1xcclxcbn1cXHJcXG4iLCJpbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib3J0IHsgcGFkIH0gZnJvbSAnLi4vcGFkL3BhZCc7XFxyXFxuXFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFN0b3JlcyB1bmlxdWUgSURzLlxcclxcbiAqXFxyXFxuICogQHNpbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAzLjAuMFxcclxcbiAqL1xcclxcbmNvbnN0IGlkczogUmVjb3JkPHN0cmluZywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcj4gPSB7fTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZXR1cm5zIGEgc2VxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlbnRpYWwgdW5pcXVlIElEIGFzIFxcInsgcHJlZml4IH0teyBudW1iZXIgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXCIuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gcHJlZml4IC0gQSBwcmVmaXggZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgSUQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUlkKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJlZml4OiBzdHJpbmcgKTogc3RyaW5nIHtcXHJcXG4gIHJldHVybiBgJHsgcHJlZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpeCB9JHsgcGFkKCAoIGlkc1sgcHJlZml4IF0gPSAoIGlkc1sgcHJlZml4IF0gfHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDAgKSArIDEgKSApIH1gO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBBbnlGdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRpb24gfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgZW1wdHksIGZvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJFYWNoIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gKiBUaGUgdHlwZSBmb3IgYW4gRXZlbnRUYXJnZXQgb3IgYW4gYXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdpdGggRXZlbnRUYXJnZXQgb2JqZWN0cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgNC4wLjBcXHJcXG4gKi9cXHJcXG50eXBlIEV2ZW50VGFyZ2V0cyA9IEV2ZW50VCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCB8IEV2ZW50VGFyZ2V0W107XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcmZhY2UgZm9yIHRoZSBFdmVudEJpbmRlciBvYmplY3QuXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgRXZlbnRCaW5kZXJPYmplY3Qge1xcclxcbiAgYmluZCggdGFyZ2V0OiBFdmVudFRhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JnZXRzLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjazogQW55RicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uLCBvcHRpb25zPzogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgKTogdm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRcXHJcXG4gIHVuYmluZCggdGFyZ2V0OiBFdmVudFRhcmdldCB8IEV2ZW50VGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndFtdLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWxsYmFjaz86IEFueUZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiApOiB2b2lkO1xcclxcbiAgZGlzcGF0Y2g8VD4oIHRhcmdldDogRXZlbnRUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0LCBldmVudDogc3RyaW5nLCBkZXRhaWw/OiBUICk6IHZvaWQ7XFxyXFxuICBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdHJveSgpOiB2b2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIHByb3ZpZGUgbWV0aG9kcyB0byBzdWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2NyaWJlIG5hdGl2ZSBldmVudHMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4wXFxyXFxuICogQGNvbnN0cnVjdG9yXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudEJpbmRlciBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBFdmVudEJpbmRlcigpOiBFdmVudEJpbmRlck9iamVjdCB7XFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIGhhbmRsZXJzIHRoYXQgbGlzdGVuIHRvIG5hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmUgZXZlbnRzLlxcclxcbiAgICogYFsgdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgY2FsbGJhY2ssIHJlbW92ZXIgXWBcXHJcXG4gICAqL1xcclxcbiAgbGV0IGxpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5lcnM6IFsgRXZlbnRUYXJnZXQsIHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCwgQW55RnVuY3Rpb24sICgpID0+IHZvaWQgXVtdID0gW107XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXFxyXFxuICAgKiBMaXN0ZW5zIHRvIG5hdGl2ZSBldmVudHMuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogLSBgZGVzdHJveSgpYCBjYW4gdW5zdWJzY3JpYmUgYWxsIGV2ZW50cy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiAtIEluIElFLCBtZWRpYVF1ZXJ5TGlzdCBkb2VzIG5vdCBpbmhlcml0IEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudFRhcmdldCxcXHJcXG4gICAqICAgYW5kIG9ubHkgc3VwcG9ydHMgZGVwcmVjYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgYGFkZExpc3RlbmVyYCBhbmQgYHJlbW92ZUxpc3RlbmVyYC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLVVTL2RvY3MvV2ViL0FQSS9NZWRpYVF1ZXJ5TGlzdC9hZGRMaXN0ZW5lclxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0cyAgLSBBIHRhcmdldCBlbGVtZW50LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHdpbmRvdyBvYmplY3Qgb3IgdGhlIGRvY3VtZW50IG9iamVjdC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBvciBldmVudHMgdG8gbGlzdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB0by5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW9uYWwuIFRoZSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyB0byBwYXNzIHRvIHRoZSBgYWRkRXZlbnRMaXN0ZW5lcmAgZnVuY3Rpb24uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBiaW5kKFxcclxcbiAgICB0YXJnZXRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogRXZlbnRUYXJnZXRzLFxcclxcbiAgICBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gICAgY2FsbGJhY2s6IEFueUZ1bmN0aW9uLFxcclxcbiAgICBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zXFxyXFxuICApOiB2b2lkIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGZvckVhY2hFdmVudCggdGFyZ2V0cywgZXZlbnRzLCAoIHRhcmdldCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50LCBuYW1lc3BhY2UgKSA9PiB7XFxyXFxuICAgICAgY29uc3QgaXNFdmVudFRhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJnZXQgPSAnYWRkRXZlbnRMaXN0ZW5lcicgaW4gdGFyZ2V0O1xcclxcbiAgICAgIGNvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCByZW1vdmVyID0gaXNFdmVudFRhcmdldFxcclxcbiAgICAgICAgPyB0YXJnZXQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCggdGFyZ2V0LCBldmVudCwgY2FsbGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJrLCBvcHRpb25zIClcXHJcXG4gICAgICAgIDogdGFyZ2V0WyAncmVtb3ZlTGlzdGVuZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyJyBdLmJpbmQoIHRhcmdldCwgY2FsbGJhY2sgKTtcXHJcXG5cXHJcXG4gICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNFdmVudFRhcmdldCA/IHRhcmdldC5hZGRFdmVudExpc3RlbmVyKCBldmVudCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImNhbGxiYWNrLCBvcHRpb25zICkgOiB0YXJnZXRbICdhZGRMaXN0ZW5lcicgXSggYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbGxiYWNrICk7XFxyXFxuICAgICAgbGlzdGVuZXJzLnB1c2goIFsgdGFyZ2V0LCBldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsIG5hbWVzcGFjZSwgY2FsbGJhY2ssIHJlbW92ZXIgXSApO1xcclxcbiAgICB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZW1vdmVzIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgZXZlbnQgaGFuZGxlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldHMgIC0gQSB0YXJnZXQgZWxlbWVudCwgdGhlIHdpbmRvdyBvYmplY3Qgb3IgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBkb2N1bWVudCBvYmplY3QuXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXZlbnQgbmFtZSBvciBuYW1lcyB0byByZW1vdmUuXFxyXFxuICAgKiBAcGFyYW0gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbGxiYWNrIC0gT3B0aW9uYWwuIFNwZWNpZnkgdGhlIGNhbGxiYWNrIHRvIHJlbW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVuYmluZCggdGFyZ2V0czogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50VGFyZ2V0cywgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrPzogQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2hFdmVudCggdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldHMsIGV2ZW50cywgKCB0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UgKSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIoIGxpc3RlbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciA9PiB7XFxyXFxuICAgICAgICBpZiAoIGxpc3RlbmVyWyAwIF0gPT09IHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRcXHJcXG4gICAgICAgICAgJiYgbGlzdGVuZXJbIDEgXSA9PT0gZXZlbnRcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgICAgICYmIGxpc3RlbmVyWyAyIF0gPT09IG5hbWVzcGFjZVxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICAgICAgJiYgKCAhIGNhbGxiYWNrIHx8IGxpc3RlbmVyWyAzIF0gPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBjYWxsYmFjayApXFxyXFxuICAgICAgICApIHtcXHJcXG4gICAgICAgICAgbGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmVyWyA0IF0oKTtcXHJcXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIH1cXHJcXG5cXHJcXG4gICAgICAgIHJldHVybiB0cnVlO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIERpc3BhdGNoZXMgYSBjdXN0b20gZXZlbnQgb2YgdGhlIHRhcmdldC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHRhcmdldCAtIEFuIGV2ZW50IHRhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JnZXQuXFxyXFxuICAgKiBAcGFyYW0gdHlwZSAgIC0gQW4gZXZlbnQgdHlwZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcGFyYW0gZGV0YWlsIC0gT3B0aW9uYWwuIFRoZSBgZGV0YWlsYCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2JqZWN0IG9mIHRoZSBldmVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBbiBldmVudCBvYmplY3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXRjaDxUPiggdGFyZ2V0OiBFdmVudFRhcmdldCwgdHlwZTogc3RyaW5nLCBkZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWlsPzogVCApOiBDdXN0b21FdmVudCB7XFxyXFxuICAgIGxldCBlOiBDdXN0b21FdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7XFxyXFxuICAgIGNvbnN0IGJ1YmJsZXMgPSB0cnVlO1xcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaWYgKCB0eXBlb2YgQ3VzdG9tRXZlbnQgPT09ICdmdW5jdGlvbicgKSB7XFxyXFxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGUgPSBuZXcgQ3VzdG9tRXZlbnQoIHR5cGUsIHsgYnViYmxlcywgZGV0YWlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9ICk7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgZSA9IGRvY3VtZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjcmVhdGVFdmVudCggJ0N1c3RvbUV2ZW50JyApO1xcclxcbiAgICAgIGUuaW5pdEN1cyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b21FdmVudCggdHlwZSwgYnViYmxlcywgZmFsc2UsIGRldGFpbCApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudCggZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBJdGVyYXRlcyBvdmVyIGVhY2ggdGFyZ2V0IGFuZCBldmVudC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIHRhcmdldHMgIC0gQSB0YXJnZXQgZWxlbWVudCwgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB3aW5kb3cgb2JqZWN0IG9yIHRoZSBkb2N1bWVudCBvYmplY3QuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIGV2ZW50cyAgIC0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcy5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcGFyYW0gaXRlcmF0ZWUgLSBBbiBpdGVyYXRlZSBmdW5jdGlvbi5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIGZvckVhY2hFdmVudChcXHJcXG4gICAgdGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHM6IEV2ZW50VGFyZ2V0cyxcXHJcXG4gICAgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW10sXFxyXFxuICAgIGl0ZXJhdGVlOiAoIHRhcmdldDogRXZlbnRUYXJnZXQsIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZyB8IHVuZGVmaW5lZCApID0+IHZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkXFxyXFxuICApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaCggdGFyZ2V0cywgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCA9PiB7XFxyXFxuICAgICAgdGFyZ2V0ICYmIGZvckVhY2goIGV2ZW50cywgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ2ZW50cyA9PiB7XFxyXFxuICAgICAgICBldmVudHMuc3BsaXQoICcgJyApLmZvckVhYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKCBldmVudE5TID0+IHtcXHJcXG4gICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlbnROUy5zcGxpdCggJy4nICk7XFxyXFxuICAgICAgICAgIGl0ZXJhdGVlKCB0YXJnZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBmcmFnbWVudFsgMCBdLCBmcmFnbWVudFsgMSBdICk7XFxyXFxuICAgICAgICB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyBhbGwgbGlzdGVuZXJzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3RlbmVycy5mb3JFYWNoKCBkYXRhID0+IHsgZGF0YVsgNCBdKCkgfSApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgZW1wdHkoIGxpc3RlbmVycyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB7XFxyXFxuICAgIGJpbmQsXFxyXFxuICAgIHVuYmluZCxcXHJcXG4gICAgZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdGNoLFxcclxcbiAgICBkZXN0cm95LFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIi8qKlxcclxcbiAqIEVtcHRpZXMgdGhlIGFycmF5LlxcclxcbiAqXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBhcnJheSAtIEEgYXJyYXkgdG8gZW1wdHkuXFxyXFxuICovXFxyXFxuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCBmdW5jdGlvbiBlbXB0eSggYXJyYXk6IGFueVtdICk6IHZvaWQge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFycmF5Lmxlbmd0aCA9IDA7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIl9ERVNUUk9ZIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IEFueUZ1bmN0aW9uLCBFdmVudE1hcCB9IGZyb20gJy4uLy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0eXBlcyc7XFxyXFxuaW1wb3J0IHsgYXBwbHksIGFzc2lnbiwgaXNBcnJheSwgc2xpYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlLCB0b0FycmF5IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IEV2ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJudEJpbmRlciwgRXZlbnRCaW5kZXJPYmplY3QgfSBmcm9tICcuLi9FdmVudEJpbmQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXIvRXZlbnRCaW5kZXInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRJbnRlcmZhY2Ugb2JqZWN0LlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlIEV2ZW50SW50ZXJmYWNlT2JqZWN0IGV4dGVuZHMgRXZlbnRCaW5kZXJPYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHtcXHJcXG4gIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50OiBLLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FsbGJhY2s6IEV2ZW50TWFwWyBLIF0gKTogdm9pZDtcXHJcXG4gIG9uKCBldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkO1xcclxcbiAgb2ZmPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50czonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEsgfCBLW10gfCBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkO1xcclxcbiAgZW1pdDwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnQ6IEssIC4uLmFyZ3M6IFBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbWV0ZXJzPEV2ZW50TWFwWyBLIF0+ICk6IHZvaWRcXHJcXG4gIGVtaXQoIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSApOiB2b2lkO1xcclxcblxcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKiBAaW50ZXJuYWwgKi9cXHJcXG4gIGJ1czogRG9jdW1lbnRGcmFnbWVudDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb25zdHJ1Y3RvciBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdGhhdCBwcm92aWRlcyBpbnRlcmZhY2UgZm9yIGludGVybmFsIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aXZlIGV2ZW50cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAY29uc3RydWN0b3JcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgLSBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgY29sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpb24gb2YgaW50ZXJmYWNlIGZ1bmN0aW9ucy5cXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGZ1bmN0aW9uIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGU/OiBTcGxpZGUgKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50SW50ZXJmYWNlT2JqZWN0IHtcXHJcXG4gIC8qKlxcclxcbiAgICogVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb2N1bWVudCBmcmFnbWVudCBmb3IgaW50ZXJuYWwgZXZlbnRzLlxcclxcbiAgICogUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3ZpZGUgdGhlIFNwbGlkZSBpbnN0YW5jZSB0byBzaGFyZSB0aGUgYnVzLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xcclxcbiAgY29uc3QgYnVzID0gU3BsaWRlID8gU3BsaWRlLmV2ZW50LmJ1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBBbiBldmVudCBiaW5kZXIgb2JqZWN0LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgY29uc3QgYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gYW4gaW50ZXJuYWwgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9yIGV2ZW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBVcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGEgZG90KC4pIHRvIGFkZCBhIG5hbWVzcGFjZS5cXHJcXG4gICAqIEBwYXJhbSBjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gb24oIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsYmFjazogQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIGJpbmRlci5iaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuZCggYnVzLCB0b0FycmF5KCBldmVudHMgKS5qb2luKCAnICcgKSwgZSA9PiB7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGNhbGxiYWNrLmFwcGx5KCBjYWxsYmFjaywgaXNBcnJheSggZS5kZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWlsICkgPyBlLmRldGFpbCA6IFtdICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRyaWdnZXJzIGNhbGxiYWNrIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuXFxyXFxuICAgKiBUaGlzIGFjY2VwdHMgYWRkaXRpb25hbCBhcmd1bWVudHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuZCBwYXNzZXMgdGhlbSB0byBjYWxsYmFja3MuXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBldmVudCAtIEFuIGV2ZW50IG5hbWUuXFxyXFxuICAgKi9cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBlbWl0KCBldmVudDogc3RyaW5nICk6IHZvaWQge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZWZlci1zcHJlYWRcXHJcXG4gICAgYmluZGVyLmRpc3BhdGNoKCBidXMsIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgc2xpY2UoIGFyZ3VtZW50cywgMSApICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKCBTcGxpZGUgKSB7XFxyXFxuICAgIFNwbGlkZS5ldmVudC5vbiggRVZFTlRfREVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RST1ksIGJpbmRlci5kZXN0cm95ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGFzc2lnbiggYmluZGVyLCB7XFxyXFxuICAgIGJ1cyxcXHJcXG4gICAgb24sXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBvZmY6IGFwcGx5KCBiaW5kZXIudW5iaW5kLCBidXMgKSxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVtaXQsXFxyXFxuICB9ICk7XFxyXFxufSIsImV4cG9ydCBjb25zdCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRfTU9VTlRFRCAgICAgICAgICAgID0gJ21vdW50ZWQnO1xcclxcbmV4cG9ydCBjb25zIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgRVZFTlRfUkVBRFkgICAgICAgICAgICAgID0gJ3JlYWR5JztcXHJcXG5leHBvcnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImNvbnN0IEVWRU5UX01PVkUgICAgICAgICAgICAgICA9ICdtb3ZlJztcXHJcXG5leHBvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ0IGNvbnN0IEVWRU5UX01PVkVEICAgICAgICAgICAgICA9ICdtb3ZlZCc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImV4cG9ydCBjb25zdCBFVkVOVF9DTElDSyAgICAgICAgICAgICAgPSAnY2xpY2snOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfQUNUSVZFICAgICAgICAgICAgID0gJ2FjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpdmUnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9JTkFDVElWRSAgICAgICAgICAgPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ2luYWN0aXZlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfVklTSUJMRSAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICA9ICd2aXNpYmxlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfSElEREVOICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgICAgICA9ICdoaWRkZW4nO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9SRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJGUkVTSCAgICAgICAgICAgID0gJ3JlZnJlc2gnO1xcclxcbmV4cG9ydCBjb25zdCBFViIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJFTlRfVVBEQVRFRCAgICAgICAgICAgID0gJ3VwZGF0ZWQnO1xcclxcbmV4cG9ydCBjbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuc3QgRVZFTlRfUkVTSVpFICAgICAgICAgICAgID0gJ3Jlc2l6ZSc7XFxyXFxuZXhwbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJydCBjb25zdCBFVkVOVF9SRVNJWkVEICAgICAgICAgICAgPSAncmVzaXplZCc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcbmV4cG9ydCBjb25zdCBFVkVOVF9EUkFHICAgICAgICAgICAgICAgPSAnZHJhZyciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9EUkFHR0lORyAgICAgICAgICAgPSAnZHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWdnaW5nJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBR0dFRCAgICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICA9ICdkcmFnZ2VkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfU0NST0xMICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICA9ICdzY3JvbGwnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9TQ1JPTEwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRUQgICAgICAgICAgID0gJ3Njcm9sbGVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiX09WRVJGTE9XICAgICAgICAgICA9ICdvdmVyZmxvdyc7XFxyXFxuZXhwb3J0IGNvbnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCBFVkVOVF9ERVNUUk9ZICAgICAgICAgICAgPSAnZGVzdHJveSc7XFxyXFxuZXhwb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCBjb25zdCBFVkVOVF9BUlJPV1NfTU9VTlRFRCAgICAgPSAnYXJyb3dzOm1vdW50IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfQVJST1dTX1VQREFURUQgICAgID0gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIidhcnJvd3M6dXBkYXRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1BBR0lOQVRJIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIk9OX01PVU5URUQgPSAncGFnaW5hdGlvbjptb3VudGVkJztcXHJcXG5leHBvcnQgY29uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInN0IEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRCA9ICdwYWdpbmF0aW9uOnVwZGF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuYXZpZ2F0aW9uOm1vdW50ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVRPUCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJMQVlfUExBWSAgICAgID0gJ2F1dG9wbGF5OnBsYXknO1xcclxcbmV4cG9ydCBjb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgRVZFTlRfQVVUT1BMQVlfUExBWUlORyAgID0gJ2F1dG9wbGF5OnBsYXlpbmcnO1xcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5leHBvcnQgY29uc3QgRVZFTlRfQVVUT1BMQVlfUEFVU0UgICAgID0gJ2F1dG8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicGxheTpwYXVzZSc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0xBWllMT0FEX0xPQUQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRUQgICAgPSAnbGF6eWxvYWQ6bG9hZGVkJztcXHJcXG5cXHJcXG4vKiogQGludGVyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hbCAqL1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9TTElERV9LRVlET1dOICAgICA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAnc2snO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9TSElGVEVEICAgICAgICAgICA9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAnc2gnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBcJ2VpXCc7XFxyXFxuIiwiZXhwb3J0IGNvbnN0IENMQVNTX1JFTkRFUkVEID0gXCcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMtcmVuZGVyZWRcJztcXHJcXG4iLCJpbXBvcnQgeyBSZW5kZXJlckNvbmZpZyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIifSBmcm9tICcuLi90eXBlcy90eXBlcyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIERlZmF1bHQgb3B0aW9ucyBmb3IgZ2VuZXJhdGluZyBzdGF0aWMgSFRNTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGNvbnN0IFJFTkRFUkVSX0RFRkFVTFRfQ09ORklHOiBSZW5kZXJlckNvbmZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImcgPSB7XFxyXFxuICBsaXN0VGFnIDogJ3VsJyxcXHJcXG4gIHNsaWRlVGFnOiAnbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpXCcsXFxyXFxufTtcXHJcXG4iLCJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcJy4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgZm9yT3duIH0gZnJvbSAnLi4vLi4vdXRpbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzJztcXHJcXG5cXHJcXG5cXHJcXG5pbnRlcmZhY2UgU3R5bGVzIHtcXHJcXG4gIFsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJyZWFrcG9pbnQ6IHN0cmluZyBdOiB7XFxyXFxuICAgIFsgc2VsZWN0b3I6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgXTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPlxcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjbGFzcyBmb3IgZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVyYXRpbmcgc3R5bGVzIGFzIGEgc3RyaW5nLlxcclxcbiAqXFxyXFxuICogQHNpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjbGFzcyBTdHlsZSB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXFxyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiByZWdpc3RlcmVkIHN0eWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgY2F0ZWdvcml6ZWQgYnkgZWFjaCBicmVha3BvaW50LlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgcHJpdmF0ZSByZWFkb25seSBzdHlsZXM6IFN0eWxlcyA9IHt9O1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIElEIG9mIHRoZSBzbGlkZXIuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBwcml2YXRlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBIb2xkcyBvcHRpb25zLlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBPcHRpb25zO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIFN0eWxlIGNvbnN0cnVjdG9yLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXFxyXFxuICAgKiBAcGFyYW0gaWQgICAgICAtIEEgc2xpZGVyIElELlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucy5cXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGNvbnN0cnVjdG9yKCBpZDogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgdGhpcy5pZCAgICAgID0gaWQ7XFxyXFxuICAgIHRoaXMub3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgPSBvcHRpb25zO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogUmVnaXN0ZXJzIGEgQ1NTIHJ1bGUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IuXFxyXFxuICAgKiBAcGFyYW0gcHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BcXHJcXG4gICAqIEBwYXJhbSB2YWx1ZVxcclxcbiAgICogQHBhcmFtIGJyZWFrcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaW50XFxyXFxuICAgKi9cXHJcXG4gIHJ1bGUoIHNlbGVjdG9yOiBzdHJpbmcsIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIGJyZWFrcG9pbnQ/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogc3RyaW5nICk6IHZvaWQge1xcclxcbiAgICBicmVha3BvaW50ID0gYnJlYWtwb2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgfHwgJ2RlZmF1bHQnO1xcclxcbiAgICBjb25zdCBzZWxlY3RvcnMgPSAoIHRoaXMuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlc1sgYnJlYWtwb2ludCBdID0gdGhpcy5zdHlsZXNbIGJyZWFrcG9pbnQgXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwge30gKTtcXHJcXG4gICAgY29uc3Qgc3R5bGVzICAgID0gKCBzZWxlY3RvcnNbICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3RvciBdID0gc2VsZWN0b3JzWyBzZWxlY3RvciBdIHx8IHt9ICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzdHlsZXNbIHByb3AgXSA9IHZhbHVlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogQnVpbGRzIHN0eWxlcyBhcyBhIHNpbmdsZSBzdHJpbmcuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQnVpbHQgc3R5bGVzLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgYnVpbGQoKTogc3RyaW5nIHtcXHJcXG4gICAgbGV0IGNzcyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInJztcXHJcXG5cXHJcXG4gICAgaWYgKCB0aGlzLnN0eWxlcy5kZWZhdWx0ICkge1xcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICBjc3MgKz0gdGhpcy5idWlsZFNlbGVjdG9ycyggdGhpcy5zdHlsZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmRlZmF1bHQgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBPYmplY3Qua2V5cygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuc3R5bGVzIClcXHJcXG4gICAgICAuc29ydCggKCBuLCBtICkgPT4gdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib3B0aW9ucy5tZWRpYVF1ZXJ5ID09PSAnbWluJyA/ICtuIC0gK20gOiArbSAtICtuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApXFxyXFxuICAgICAgLmZvckVhY2goIGJyZWFrcG9pbnQgPT4ge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgIGlmICggYnJlYWtwb2ludCAhPT0gJ2RlZmF1bHQnICkge1xcclxcbiAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY3NzICs9IGBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAkeyBicmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWtwb2ludCB9cHgpIHtgO1xcclxcbiAgICAgICAgICBjc3MgKz0gdGhpcy5idWlsZFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlY3RvcnMoIHRoaXMuc3R5bGVzWyBicmVha3BvaW50IF0gKTtcXHJcXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNzcyArPSBgfWA7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgfSApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gICAgcmV0dXJuIGNzcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEJ1aWxkcyBzdHlsZXMgZm9yIGVhY2ggYnJlYWtwb2ludC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHNlbGVjdG9ycyAtIEFuIG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgd2l0aCBzdHlsZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBCdWlsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc3R5bGVzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGJ1aWxkU2VsZWN0b3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyggc2VsZWN0b3JzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5nIHwgbnVtYmVyPj4gKTogc3RyaW5nIHtcXHJcXG4gICAgbGV0IGNzcyA9ICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG4gICAgZm9yT3duKCBzZWxlY3RvcnMsICggc3R5bGVzLCBzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0b3IgKSA9PiB7XFxyXFxuICAgICAgc2VsZWN0b3IgPSBgIyR7IHRoaXMuaWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gJHsgc2VsZWN0b3IgfWAudHJpbSgpO1xcclxcbiAgICAgIGNzcyArPSBgJHsgc2VsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdG9yIH0ge2A7XFxyXFxuXFxyXFxuICAgICAgZm9yT3duKCBzdHlsZXMsICggdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlLCBwcm9wICkgPT4ge1xcclxcbiAgICAgICAgaWYgKCB2YWx1ZSB8fCB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPT09IDAgKSB7XFxyXFxuICAgICAgICAgIGNzcyArPSBgJHsgcHJvcCB9OiAkeyB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUgfTtgO1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgIH0gKTtcXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICAgICAgY3NzICs9ICd9JztcXHJcXG4gICAgfSApO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGNzcztcXHJcXG4gIH1cXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBVEgsIFNJWkUsIFhNTF9OQU1FX1NQQUNFIH0gZnJvbSAnLi4vLi4vY29tcG9uZW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHMvQXJyb3dzL3BhdGgnO1xcclxcbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvRGlyZWN0aW9uL0RpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJlY3Rpb24nO1xcclxcbmltcG9ydCB7IENMQVNTX0FDVElWRSwgQ0xBU1NfQ0xPTkUsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19MSVNULCBDTEFTU19ST09ULCBDTEFTU19TTElERSwgQ0xBU1NfVFJBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJLIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJERUZBVUxUUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kZWZhdWx0cyc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9ydCB7IFRUQiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kaXJlY3Rpb25zJzsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuaW1wb3J0IHsgRVZFTlRfTU9VTlRFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBMT09QLCBTTElERSB9IGZyb20gJy4uLy4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgT3AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhc3NlcnQsXFxyXFxuICBhc3NpZ24sXFxyXFxuICBjYW1lbFRvS2ViYWIsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgY2hpbGQsXFxyXFxuICBmb3JPd24sXFxyXFxuICBpc09iamVjdCxcXHJcXG4gIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N0cmluZyxcXHJcXG4gIG1heCxcXHJcXG4gIG1lcmdlLFxcclxcbiAgcHVzaCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBxdWVyeUFsbCxcXHJcXG4gIHJlbW92ZSxcXHJcXG4gIHVuaXF1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJJZCxcXHJcXG4gIHVuaXQsXFxyXFxufSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9ydCB7IENMQVNTX1JFTkRFUkVEIH0gZnJvbSAnLi4vY29uc3RhbnRzL2NsYXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic2VzJztcXHJcXG5pbXBvcnQgeyBSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRyB9IGZyb20iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi9jb25zdGFudHMvZGVmYXVsdHMnO1xcclxcbmltcG9ydCB7IFN0eWxlIH0gZnIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib20gJy4uL1N0eWxlL1N0eWxlJztcXHJcXG5pbXBvcnQgeyBSZW5kZXJlckNvbmZpZywiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIFNsaWRlQ29udGVudCB9IGZyb20gJy4uL3R5cGVzL3R5cGVzJztcXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNsYXNzIHRvIGdlbmVyYXRlIHN0YXRpYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgSFRNTCBvZiB0aGUgc2xpZGVyIGZvciB0aGUgZmlyc3Qgdmlldy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY2xhc3MgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZVJlbmRlcmVyIHtcXHJcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyBhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHlsZSBlbGVtZW50IGFuZCBjbG9uZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBzcGxpZGUgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIHN0YXRpYyBjbGVhbiggc3BsaWRlOiBTcGxpZGUgKTogdm9pZCB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCB7IG9uIH0gPSBFdmVudEludGVyZmFjZSggc3BsaWRlICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCB7IHJvb3QgfSA9IHNwbGlkZTtcXHJcXG4gICAgY29uc3QgY2xvbmVzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3F1ZXJ5QWxsKCByb290LCBgLiR7IENMQVNTX0NMT05FIH1gICk7XFxyXFxuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBvbiggRVZFTlRfTU9VTlRFRCwgKCkgPT4ge1xcclxcbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm1vdmUoIGNoaWxkKCByb290LCAnc3R5bGUnICkgKTtcXHJcXG4gICAgfSApO1xcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gICAgcmVtb3ZlKCBjbG9uZXMgKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIHNsaWRlIGNvbnRlbnRzLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgcHJpdmF0ZSByZWFkb25seSBjb250ZW50czogc3RyaW5nW10gfCBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVDb250ZW50W107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0b3JlcyBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0YSBvZiBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcmVhZG9ubCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IHNsaWRlczogU2xpZGVDb250ZW50W10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFRoZSBEaXJlY3Rpb24gY29tcG9uZW50LlxcclxcbiAgICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgcHJpdmF0ZSByZWFkb25seSBEaXJlY3Rpb246IERpcmVjdGlvbkNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIHRoZSBTdHlsZSBpbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2UuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcmVhZG9ubHkgU3R5bGU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTdHlsZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMgPSB7fTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMgZm9yIHRoaXMgaW5zdGFuY2UuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlYWRvbmx5IGNvbmZpZzogUmVuZGVyZXJDb25maWc7XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBUaGUgc2xpZGVyIElELlxcclxcbiAgICovXFxyXFxuICBwcml2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSByZWFkb25seSBpZDogc3RyaW5nO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQW4gYXJyYXkgd2l0aCBvcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBwcml2YXRlIHJlYWRvbmx5IGJyZWFrcG9pbnRzOiBbIHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2csIE9wdGlvbnMgXVtdID0gW107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgU3BsaWRlUmVuZGVyZXIgY29uc3RydWN0b3IuXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBjb250ZW50cyAtIEFuIGFycmF5IHdpdGggc2xpZGUgY29udGVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLiBFYWNoIGl0ZW0gbXVzdCBiZSBhbiBIVE1MIG9yIGEgcGxhaW4gdGV4dC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBAcGFyYW0gb3B0aW9ucyAgLSBPcHRpb25hbC4gU2xpZGVyIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIGNvbmZpZyAgIC0gU3RhdGljIGRlZmF1bHQgb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXFxyXFxuICAgKiBAcGFyYW0gZGVmYXVsdHMgLSBEZWZhdWx0IG9wdGlvbnMgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgc2xpZGVyLiBQYXNzIGBTcGxpZGUuZGVmYXVsdHNgIGlmIHlvdSBhcmUgdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzaW5nIGl0LlxcclxcbiAgICovXFxyXFxuICBjb25zdHJ1Y3RvciggY29udGVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmdbXSB8IFNsaWRlQ29udGVudFtdLCBvcHRpb25zPzogT3B0aW9ucywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbmZpZz86IFJlbmRlcmVyQ29uZmlnLCBkZWZhdWx0cz86IE9wdGlvbnMgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBtZXJnZSggREVGQVVMVFMsIGRlZmF1bHRzIHx8IHt9ICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBtZXJnZSggbWVyZ2UoIHRoaXMub3B0aW9ucywgREVGQVVMVFMgKSwgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMgfHwge30gKTtcXHJcXG5cXHJcXG4gICAgdGhpcy5jb250ZW50cyAgPSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVudHM7XFxyXFxuICAgIHRoaXMuY29uZmlnICAgID0gYXNzaWduKCB7fSwgUkVORCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFUkVSX0RFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30gKTtcXHJcXG4gICAgdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuaWQgICAgICAgID0gdGhpcy5jb25maWcuaWQgfHwgdW5pcXVlSWQoICdzcGxpZGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyApO1xcclxcbiAgICB0aGlzLlN0eWxlICAgICA9IG5ldyBTdHlsZSggdGhpcy5pZCwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMub3B0aW9ucyApO1xcclxcbiAgICB0aGlzLkRpcmVjdGlvbiA9IERpcmVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24oIG51bGwsIG51bGwsIHRoaXMub3B0aW9ucyApO1xcclxcblxcclxcbiAgICBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInNzZXJ0KCB0aGlzLmNvbnRlbnRzLmxlbmd0aCwgJ1Byb3ZpZGUgYXQgbGVhc3QgMSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgY29udGVudC4nICk7XFxyXFxuXFxyXFxuICAgIHRoaXMuaW5pdCgpO1xcclxcbiAgfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGluc3RhbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZS5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdGhpcy5wYXJzZUJyZWFrcG9pbnRzKCk7XFxyXFxuICAgIHRoaXMuaW5pdFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMoKTtcXHJcXG4gICAgdGhpcy5yZWdpc3RlclJvb3RTdHlsZXMoKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHRoaXMucmVnaXN0ZXJUcmFja1N0eWxlcygpO1xcclxcbiAgICB0aGlzLnJlZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RlclNsaWRlU3R5bGVzKCk7XFxyXFxuICAgIHRoaXMucmVnaXN0ZXJMaXN0U3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncygpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZXMgc2xpZGVzLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGluaXRTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCk6IHZvaWQge1xcclxcbiAgICBwdXNoKCB0aGlzLnNsaWRlcywgdGhpcy5jb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMubWFwKCAoIGNvbnRlbnQsIGluZGV4ICkgPT4ge1xcclxcbiAgICAgIGNvbnRlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gaXNTdHJpbmcoIGNvbnRlbnQgKSA/IHsgaHRtbDogY29udGVudCB9IDogY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlbnQ7XFxyXFxuICAgICAgY29udGVudC5zdHlsZXMgPSBjb250ZW50LnN0eWxlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHwge307XFxyXFxuICAgICAgY29udGVudC5hdHRycyAgPSBjb250ZW50LmF0dHJzIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCB7fTtcXHJcXG5cXHJcXG4gICAgICB0aGlzLmNvdmVyKCBjb250ZW50ICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICAgIGNvbnN0IGNsYXNzZXMgPSBgJHsgdGhpcy5vcHRpb25zLmNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic2VzLnNsaWRlIH0gJHsgaW5kZXggPT09IDAgPyBDTEFTU19BQ1RJVkUgOiAnJyB9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2A7XFxyXFxuXFxyXFxuICAgICAgYXNzaWduKCBjb250ZW50LmF0dHJzLCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgY2xhc3M6IGAkeyBjbGFzc2VzIH0gJHsgY29udGVudC5hdHRycy5jbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhc3MgfHwgJycgfWAudHJpbSgpLFxcclxcbiAgICAgICAgc3R5bGU6IHRoaXMuYnVpbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkU3R5bGVzKCBjb250ZW50LnN0eWxlcyApLFxcclxcbiAgICAgIH0gKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XFxyXFxuICAgIH0gKSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gICAgaWYgKCB0aGlzLmlzTG9vcCgpICkge1xcclxcbiAgICAgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLmdlbmVyYXRlQ2xvbmVzKCB0aGlzLnNsaWRlcyApO1xcclxcbiAgICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZWdpc3RlcnMgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlcyBmb3IgdGhlIHJvb3QgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgcHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhdGUgcmVnaXN0ZXJSb290U3R5bGVzKCk6IHZvaWQge1xcclxcbiAgICB0aGlzLmJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vha3BvaW50cy5mb3JFYWNoKCAoIFsgd2lkdGgsIG9wdGlvbnMgXSApID0+IHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgICAgdGhpcy5TdHlsZS5ydWxlKCAnICcsICdtYXgtd2lkdGgnLCB1bml0KCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy53aWR0aCApLCB3aWR0aCApO1xcclxcbiAgICB9ICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZWdpc3RlcnMgc3R5bGVzIGZvciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHRyYWNrIGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcmVnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdGVyVHJhY2tTdHlsZXMoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsgU3R5bGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gPSB0aGlzO1xcclxcbiAgICBjb25zdCBzZWxlY3RvciA9IGAuJHsgQ0xBU1NfVFJBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NLIH1gO1xcclxcblxcclxcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIFsgd2lkdGgsIG9wdGlvbnMgXSApID0+IHtcXHJcXG4gICAgICBTdHlsZS5ydWxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgc2VsZWN0b3IsIHRoaXMucmVzb2x2ZSggJ3BhZGRpbmdMZWZ0JyApLCB0aGlzLmMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3NQYWRkaW5nKCBvcHRpb25zLCBmYWxzZSApLCB3aWR0aCApO1xcclxcbiAgICAgIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHlsZS5ydWxlKCBzZWxlY3RvciwgdGhpcy5yZXNvbHZlKCAncGFkZGluZ1JpZ2h0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicgKSwgdGhpcy5jc3NQYWRkaW5nKCBvcHRpb25zLCB0cnVlICksIHdpZHRoICk7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbiAgICAgIFN0eWxlLnJ1bGUoIHNlbGVjdG9yLCAnaGVpZ2h0JywgdGhpcy5jcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzVHJhY2tIZWlnaHQoIG9wdGlvbnMgKSwgd2lkdGggKTtcXHJcXG4gICAgfSApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVnaXN0ZXJzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHlsZXMgZm9yIHRoZSBsaXN0IGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncml2YXRlIHJlZ2lzdGVyTGlzdFN0eWxlcygpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHsgU3R5bGUgfSA9IHRoaXM7XFxyXFxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4keyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfTElTVCB9YDtcXHJcXG5cXHJcXG4gICAgdGhpcy5icmVha3BvaW50cy5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yRWFjaCggKCBbIHdpZHRoLCBvcHRpb25zIF0gKSA9PiB7XFxyXFxuICAgICAgU3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImxlLnJ1bGUoIHNlbGVjdG9yLCAndHJhbnNmb3JtJywgdGhpcy5idWlsZFRyYW5zbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUoIG9wdGlvbnMgKSwgd2lkdGggKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoICEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuY3NzU2xpZGVIZWlnaHQoIG9wdGlvbnMgKSApIHtcXHJcXG4gICAgICAgIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHlsZS5ydWxlKCBzZWxlY3RvciwgJ2FzcGVjdC1yYXRpbycsIHRoaXMuY3NzQXNwIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdFJhdGlvKCBvcHRpb25zICksIHdpZHRoICk7XFxyXFxuICAgICAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0ZXJzIHN0eWxlcyBmb3Igc2xpZGVzIGFuZCBjbG9uZXMuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBwcml2YXRlIHJlZ2lzdGVyU2xpZGVTdHlsZXMoKTogdm9pZCB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjb25zdCB7IFN0eWxlIH0gPSB0aGlzO1xcclxcbiAgICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2VsZWN0b3IgPSBgLiR7IENMQVNTX1NMSURFIH1gO1xcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5icmVha3BvaW50cy5mb3JFYWNoKCAoIFsgd2lkdGgsIG9wdGlvbnMgXSApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiA9PiB7XFxyXFxuICAgICAgU3R5bGUucnVsZSggc2VsZWN0b3IsICd3aWR0aCcsIHRoIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmNzc1NsaWRlV2lkdGgoIG9wdGlvbnMgKSwgd2lkdGggKTtcXHJcXG4gICAgICBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInR5bGUucnVsZSggc2VsZWN0b3IsICdoZWlnaHQnLCB0aGlzLmNzc1NsaWRlSGVpZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJodCggb3B0aW9ucyApIHx8ICcxMDAlJywgd2lkdGggKTtcXHJcXG4gICAgICBTdHlsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIucnVsZSggc2VsZWN0b3IsIHRoaXMucmVzb2x2ZSggJ21hcmdpblJpZ2h0JyApLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidW5pdCggb3B0aW9ucy5nYXAgKSB8fCAnMHB4Jywgd2lkdGggKTtcXHJcXG4gICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiU3R5bGUucnVsZSggYCR7IHNlbGVjdG9yIH0gPiBpbWdgLCAnZGlzcGxheScsIG9wIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRpb25zLmNvdmVyID8gJ25vbmUnIDogJ2lubGluZScsIHdpZHRoICk7XFxyXFxuICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEJ1aWxkcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbXVsdGlwbGUgYHRyYW5zbGF0ZVhgIGZvciB0aGUgbGlzdCBlbGVtZW50LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGVhY2ggYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWFrcG9pbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBIHN0cmluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2l0aCBtdWx0aXBsZSB0cmFuc2xhdGUgZnVuY3Rpb25zLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcHJpdmF0ZSBidWlsZFRyYW5zbGF0ZSggb3B0aW9uczogT3B0aW9ucyApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgeyByZXNvbHZlLCBvcmllbnQgfSA9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLkRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgdmFsdWVzID0gW107XFxyXFxuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICB2YWx1ZXMucHVzaCggdGhpcy5jc3NPZmZzZXRDbG9uZXMoIG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkgKTtcXHJcXG4gICAgdmFsdWVzLnB1c2goIHRoaXMuY3NzT2Zmc2V0R2Fwcyggb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgKSApO1xcclxcblxcclxcbiAgICBpZiAoIHRoaXMuaXNDZW50ZXIoIG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zICkgKSB7XFxyXFxuICAgICAgdmFsdWVzLnB1c2goIHRoaXMuYnVpbGRDc3NWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFsdWUoIG9yaWVudCggLTUwICksICclJyApICk7XFxyXFxuICAgICAgdmFsdWVzLnB1IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NoKCAuLi50aGlzLmNzc09mZnNldENlbnRlciggb3B0aW9ucyApICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAgIHJldHVybiB2YWx1ZXNcXHJcXG4gICAgICAuZmlsdGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggQm9vbGVhbiApXFxyXFxuICAgICAgLm1hcCggdmFsdWUgPT4gYHRyYW5zbGF0ZSR7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiByZXNvbHZlKCAnWCcgKSB9KCR7IHZhbHVlIH0pYCApXFxyXFxuICAgICAgLmpvaW4oIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAnICcgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybnMgb2Zmc2V0IGZvciB0aGUgbGlzdCBlbGVtZW50LlxcclxcbiAgICogVGhpcyBkbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBub3QgaW5jbHVkZSBnYXBzIGJlY2F1c2UgaXQgY2FuIG5vdCBiZSBjb252ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVkIGludG8gcGVyY2VudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMgLSBPcHRpb25zIGZvciBlYWNoIGJyZWFrcG9pbnQuXFxyXFxuICAgKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEByZXR1cm4gVGhlIG9mZnNldC5cXHJcXG4gICAqL1xcclxcbiAgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZhdGUgY3NzT2Zmc2V0Q2xvbmVzKCBvcHRpb25zOiBPcHRpb25zICk6IHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cge1xcclxcbiAgICBjb25zdCB7IHJlc29sdmUsIG9yaWVudCB9ID0gdGhpcy5EaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uO1xcclxcbiAgICBjb25zdCBjbG9uZUNvdW50ID0gdGhpcy5nZXRDbG9uZUNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCgpO1xcclxcblxcclxcbiAgICBpZiAoIHRoaXMuaXNGaXhlZFdpZHRoKCBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucyApICkge1xcclxcbiAgICAgIGNvbnN0IHsgdmFsdWUsIHVuaXQgfSA9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzLnBhcnNlQ3NzVmFsdWUoIG9wdGlvbnNbIHJlc29sdmUoICdmaXhlZFdpZHRoJyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSBdICk7XFxyXFxuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDc3NWYWx1ZSggb3JpZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCggdmFsdWUgKSAqIGNsb25lQ291bnQsIHVuaXQgKTtcXHJcXG4gICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgY29uc3QgcGVyY2VudCA9IDEwMCAqIGNsb25lQ291bnQgLyBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5wZXJQYWdlO1xcclxcbiAgICByZXR1cm4gYCR7IG9yaWVudCggcGVyY2VudCApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9JWA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIG9mZnNldCBmb3IgY2VudGVyaW5nIHRoZSBhY3RpdmUgc2xpZGUuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIE5vdGU6XFxyXFxuICAgKiAoIDEwMCUgKyBnYXAgKSAvIHBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlIC0gZ2FwXFxyXFxuICAgKiAxMDAlIC8gcGVyUGFnZSArIGdhcCAvIHBlclBhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gZ2FwO1xcclxcbiAgICogNTAlIC8gcGVyUGFnZSArICggZ2FwIC8gcGVyUGFnZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBnYXAgKSAvIDI7XFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaW50LlxcclxcbiAgICpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIFRoZSBvZmZzZXQuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNzc09mZnNldENlbnRlciggb3B0aW9uczogT3B0aW9ucyApOiBzdHJpbmdbXSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjb25zdCB7IHJlc29sdmUsIG9yaWVudCB9ID0gdGhpcy5EaXJlY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uO1xcclxcblxcclxcbiAgICBpZiAoIHRoaXMuaXNGaXhlZFdpZHRoKCBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducyApICkge1xcclxcbiAgICAgIGNvbnN0IHsgdmFsdWUsIHVuaXQgfSA9IHRoaXMucCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhcnNlQ3NzVmFsdWUoIG9wdGlvbnNbIHJlc29sdmUoICdmaXhlZFdpZHRoJyApIF0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICAgICAgcmV0dXJuIFsgdGhpcy5idWlsZENzc1ZhbHVlKCBvcmllbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCB2YWx1ZSAvIDIgKSwgdW5pdCApIF07XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IHZhbHVlcyA9IFtdO1xcclxcbiAgICBjb25zdCB7IHBlclBhZ2UsIGdhcCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuICAgIHZhbHVlcy5wdXNoKCBgJHsgb3JpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCggNTAgLyBwZXJQYWdlICkgfSVgICk7XFxyXFxuXFxyXFxuICAgIGlmICggZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcCApIHtcXHJcXG4gICAgICBjb25zdCB7IHZhbHVlLCB1bml0IH0gPSB0aGlzLnBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZUNzc1ZhbHVlKCBnYXAgKTtcXHJcXG4gICAgICBjb25zdCBnYXBPZmZzZXQgPSAoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSAvIHBlclBhZ2UgLSB2YWx1ZSApIC8gMjtcXHJcXG4gICAgICB2YWx1ZXMucCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c2goIHRoaXMuYnVpbGRDc3NWYWx1ZSggb3JpZW50KCBnYXBPZmZzZXQgKSwgdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQgKSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmZzZXQgZm9yIGdhcHMuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zIC0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaW50LlxcclxcbiAgICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAcmV0dXJuIFRoZSBvZmZzZXQgYXMgYGNhbGMoKWAuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBwcml2YXRlIGNzc09mZnNldEdhcHMoIG9wdGlvbnM6IE9wdGlvbnMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IGNsb25lQ291bnQgPSB0aGlzLmdldENsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZUNvdW50KCk7XFxyXFxuXFxyXFxuICAgIGlmICggY2xvbmVDb3VudCAmJiBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5nYXAgKSB7XFxyXFxuICAgICAgY29uc3QgeyBvcmllbnQgfSA9IHRoaXMuRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcmVjdGlvbjtcXHJcXG4gICAgICBjb25zdCB7IHZhbHVlLCB1bml0IH0gPSB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJzZUNzc1ZhbHVlKCBvcHRpb25zLmdhcCApO1xcclxcblxcclxcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIHRoaXMuaXNGaXhlZFdpZHRoKCBvcHRpb25zICkgKSB7XFxyXFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRoaXMuYnVpbGRDc3NWYWx1ZSggb3JpZW50KCB2YWx1ZSAqIGNsb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvdW50ICksIHVuaXQgKTtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHsgcGVyUGFnZSB9ID0gb3B0aW9ucztcXHJcXG4gICAgICBjb25zdCBnYXBzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nsb25lQ291bnQgLyBwZXJQYWdlO1xcclxcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Nzc1ZhbHVlKCBvcmllbnQoIGdhcHMgKiB2YWx1ZSApLCB1bml0ICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB9XFxyXFxuXFxyXFxuICAgIHJldHVybiAnJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAvKipcXHJcXG4gICAqIFJlc29sdmVzIHRoZSBwcm9wIGZvciB0aGUgY3VycmVudCBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uIGFuZCBjb252ZXJ0cyBpdCBpbnRvIHRoZSBLZWJhYiBjYXNlLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJvcCAtIEEgcHJvcGVydHkgbmFtZSB0byByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzb2x2ZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgcmVzb2x2ZWQgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3BlcnR5IG5hbWUgaW4gdGhlIEtlYmFiIGNhc2UuXFxyXFxuICAgKi9cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBwcml2YXRlIHJlc29sdmUoIHByb3A6IHN0cmluZyApOiBzdHJpbmcge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIGNhbWVsVG9LZWJhYiggdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3AgKSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJucyBwYWRkaW5nIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgKiBAcGFyYW0gcmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0ICAgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZ2V0IHBhZGRpbmcgcmlnaHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yIGxlZnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBQYWRkaW5nIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBjc3NQYWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGluZyggb3B0aW9uczogT3B0aW9ucywgcmlnaHQ6IGJvb2xlYW4gKTogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgIGNvbnN0IHsgcGFkZGluZyB9ID0gb3B0aW9ucztcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgIGNvbnN0IHByb3AgPSB0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKCByaWdodCA/ICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmlnaHQnIDogJ2xlZnQnLCB0cnVlICk7XFxyXFxuICAgIHJldHVybiBwYWRkaW5nICYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiB1bml0KCBwYWRkaW5nWyBwcm9wIF0gfHwgKCBpc09iamVjdCggcGFkZGluZyApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiA/IDAgOiBwYWRkaW5nICkgKSB8fCAnMHB4JztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAvKipcXHJcXG4gICAqIFJldHVybnMgaGVpZ2h0IG9mIHRoZSB0cmFjayBlbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gSGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgY3NzVHJhY2tIZWlnaHQoIG9wdGlvbnM6IE9wdGlvbnMgKTogc3RyaW5nIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIGxldCBoZWlnaHQgPSAnJztcXHJcXG5cXHJcXG4gICAgaWYgKCB0aGlzLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc1ZlcnRpY2FsKCkgKSB7XFxyXFxuICAgICAgaGVpZ2h0ID0gdGhpcy5jc3NIZWlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBvcHRpb25zICk7XFxyXFxuICAgICAgYXNzZXJ0KCBoZWlnaHQsIFwnXFwiaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodFxcIiBpcyBtaXNzaW5nLlwnICk7XFxyXFxuICAgICAgaGVpZ2h0ID0gYGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xjKCR7IGhlaWdodCB9IC0gJHsgdGhpcy5jc3NQYWRkaW5nKCBvcHRpb25zLCBmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsc2UgKSB9IC0gJHsgdGhpcy5jc3NQYWRkaW5nKCBvcHRpb25zLCB0cnVlICkgfSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gaGVpZ2h0O1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBoZWlnaHQgcHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZpZGVkIHRob3VnaCBvcHRpb25zIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEByZXR1cm4gSGVpZ2h0IGluIHRoZSBDU1MgZm9ybWF0LlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBjc3NIZWlnaHQoIG9wdGlvbnM6IE9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zICk6IHN0cmluZyB7XFxyXFxuICAgIHJldHVybiB1bml0KCBvcHRpb25zLmhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnaHQgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybnMgd2lkdGggb2YgZWFjaCBzbGlkZSBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcmV0dXJuIFdpZHRoIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgcHJpdmF0ZSBjc3NTbGlkZVdpZHRoKCBvcHRpb25zOiBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucyApOiBzdHJpbmcge1xcclxcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZHRoXFxyXFxuICAgICAgPyAnJ1xcclxcbiAgICAgIDogdW5pdCggb3B0aW9ucy5mIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIml4ZWRXaWR0aCApIHx8ICggdGhpcy5pc1ZlcnRpY2FsKCkgPyAnJyA6IHRoaXMuYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc1NsaWRlU2l6ZSggb3B0aW9ucyApICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBSZXR1cm5zIGhlaWdodCBvZiBlYWNoIHNsaWRlIGluIHRoZSBDUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTIGZvcm1hdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gSGVpZ2h0IGluIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgQ1NTIGZvcm1hdC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBjc3NTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidIZWlnaHQoIG9wdGlvbnM6IE9wdGlvbnMgKTogc3RyaW5nIHtcXHJcXG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiB1bml0KCBvcHRpb25zLmZpeGVkSGVpZ2h0IClcXHJcXG4gICAgICB8fCAoIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmlzVmVydGljYWwoKVxcclxcbiAgICAgICAgPyAoIG9wdGlvbnMuYXV0b0hlaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgPyAnJyA6IHRoaXMuY3NzU2xpZGVTaXplKCBvcHRpb25zICkgKVxcclxcbiAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIDogdGhpcy5jc3NIZWlnaHQoIG9wdGlvbnMgKVxcclxcbiAgICAgICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHdpZHRoIG9yIGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQgb2YgZWFjaCBzbGlkZSBpbiB0aGUgQ1NTIGZvcm1hdCwgY29uc2lkZXJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nIHRoZSBjdXJyZW50IGRpcmVjdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIFdpZHRoIG9yIGhlaWdodCBpbiB0aGUgQ1NTIGZvcm1hdC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIHByaXZhdGUgY3NzU2xpZGVTaXplKCBvcHRpb25zOiBPcHRpb25zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOiBzdHJpbmcge1xcclxcbiAgICBjb25zdCBnYXAgPSB1bml0KCBvcHRpb25zLmdhcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgcmV0dXJuIGBjYWxjKCgxMDAlJHsgZ2FwICYmIGAgKyAkeyBnYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwIH1gIH0pLyR7IG9wdGlvbnMucGVyUGFnZSB8fCAxIH0keyBnYXAgJiYgYCAtICQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBnYXAgfWAgfSlgO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogUmV0dXJucyB0aGUgYXNwZWN0UmF0aW8gdmFsdWUgdG8gc2ltdWxhdGUgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgaGVpZ2h0UmF0aW9gIG9wdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMgLSBPcHRpb25zLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzcGVjdFJhdGlvIGluIHRoZSBDU1MgZm9ybWF0LlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJpdmF0ZSBjc3NBc3BlY3RSYXRpbyggb3B0aW9uczogT3B0aW9ucyApOiBzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nIHtcXHJcXG4gICAgY29uc3QgeyBoZWlnaHRSYXRpbyB9ID0gb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIHJldHVybiBoZWlnaHRSYXRpbyA/IGAkeyAxIC8gaGVpZ2h0UmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvIH1gIDogJyc7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWlsZHMgdGhlIGNzcyB2YWx1ZSBieSB0aGUgcHJvdmlkZWQgdmFsdWUgYW5kIHVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgdmFsdWUuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQHBhcmFtIHVuaXQgIC0gQSBDU1MgdW5pdC5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHJldHVybiBBIGJ1aWx0IHZhbHVlIGZvciBhIENTUyB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgYnVpbGRDc3NWYWx1ZSggdmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBudW1iZXIsIHVuaXQ6IHN0cmluZyApOiBzdHJpbmcge1xcclxcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGAkeyB2YWx1ZSB9JHsgdW5pdCB9YDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIFBhcnNlcyB0aGUgQ1NTIHZhbHVlIGludG8gbnVtYmVyIGFuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdW5pdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0byBwYXJzZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEFuIG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgd2l0aCB2YWx1ZSBhbmQgdW5pdC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyc2VDc3NWYWx1ZSggdmFsdWU6IHN0cmluZyB8IG51bWJlciApOiB7IHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogbnVtYmVyLCB1bml0OiBzdHJpbmcgfSB7XFxyXFxuICAgIGlmICggaXNTdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCB2YWx1ZSApICkge1xcclxcbiAgICAgIGNvbnN0IG51bWJlciA9IHBhcnNlRmxvYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCB2YWx1ZSApIHx8IDA7XFxyXFxuICAgICAgY29uc3QgdW5pdCAgID0gdmFsdWUucmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicGxhY2UoIC9cXFxcZCooXFxcXC5cXFxcZCopPy8sICcnICkgfHwgJ3B4JztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgcmV0dXJuIHsgdmFsdWU6IG51bWJlciwgdW5pdCB9O1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgfVxcclxcblxcclxcbiAgICByZXR1cm4geyB2YWx1ZSwgdW5pdDogJ3B4JyB9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUGFyc2VzIGJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidha3BvaW50cyBhbmQgZ2VuZXJhdGUgb3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBwYXJzZUJyZWFrcG9pbnRzKCk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBicmVha3BvaW50cyB9ID0gdGhpcy5vcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9ucztcXHJcXG5cXHJcXG4gICAgdGhpcy5icmVha3BvaW50cy5wdXNoKCBbICdkZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJmYXVsdCcsIHRoaXMub3B0aW9ucyBdICk7XFxyXFxuXFxyXFxuICAgIGlmICggYnIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFrcG9pbnRzICkge1xcclxcbiAgICAgIGZvck93biggYnJlYWtwb2ludHMsICggb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMsIHdpZHRoICkgPT4ge1xcclxcbiAgICAgICAgdGhpcy5icmVha3BvaW50cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHVzaCggWyB3aWR0aCwgbWVyZ2UoIG1lcmdlKCB7fSwgdGhpcy5vcHRpb25zICksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zICkgXSApO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBzbGlkZSB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkdGggaXMgZml4ZWQgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGB0cnVlYCBpZiB0aGUgc2xpZGUgd2lkdGggaXMgZml4ZWQsIG9yIG90aGVyd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgYGZhbHNlYC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBpc0ZpeGVkV2lkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoKCBvcHRpb25zOiBPcHRpb25zICk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiEhIG9wdGlvbnNbIHRoaXMuRGlyZWN0aW9uLnJlc29sdmUoICdmaXhlZFdpZHRoJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSBdO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVja3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIHRoZSBzbGlkZXIgdHlwZSBpcyBsb29wIG9yIG5vdC5cXHJcXG4gICAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHNsaWRlciB0eXBlIGlzIGxvbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUgaXNMb29wKCk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gdGhpcy5vcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy50eXBlID09PSBMT09QO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQ2hlY2tzIGlmIHRoZSBhY3RpdmUgc2xpZGUgc2hvdWxkIGJlIGNlbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZCBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBzbGlkZSBzaG91bGQgYmUgY2VudGVyZWQsIG9yIG90aGVyd2lzZSBgZmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlYC5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBpc0NlbnRlciggb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IE9wdGlvbnMgKTogYm9vbGVhbiB7XFxyXFxuICAgIGlmKCBvcHRpb25zLmZvY3VzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI9PT0gJ2NlbnRlcicgKSB7XFxyXFxuICAgICAgaWYgKCB0aGlzLmlzTG9vcCgpICkgeyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgIHJldHVybiB0cnVlO1xcclxcbiAgICAgIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgaWYgKCB0aGlzLm9wdGlvbnMudHlwZSA9PT0gU0xJREUgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICAgICAgcmV0dXJuICEgdGhpcy5vcHRpb25zLnRyaW1TcGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmFsc2U7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgaWYgdGhlIGRpcmVjdGlvbiBpcyBUVEIgb3Igbm90LlxcclxcbiAgICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgZGlyZWN0aW9uIGlzIFRUQiwgb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZlcnRpY2FsKCk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5kaXJlY3Rpb24gPT09IFRUQjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEJ1aWxkcyBjbGFzc2VzIG9mIHRoZSByb290IGVsZW1lbnQuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQ2xhc3NlcyBmb3IgdGhlIHJvb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVsZW1lbnQgYXMgYSBzaW5nbGUgc3RyaW5nLlxcclxcbiAgICovXFxyXFxuICBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpdmF0ZSBidWlsZENsYXNzZXMoKTogc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgeyBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucyB9ID0gdGhpcztcXHJcXG5cXHJcXG4gICAgcmV0dXJuIFtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgQ0xBU1NfUk9PVCxcXHJcXG4gICAgICBgJHsgQ0xBU1NfUk9PVCB9LS0keyBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy50eXBlIH1gLFxcclxcbiAgICAgIGAkeyBDTEFTU19ST09UIH0tLSR7IG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmRpcmVjdGlvbiB9YCxcXHJcXG4gICAgICBvcHRpb25zLmRyYWcgJiYgYCR7IENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19ST09UIH0tLWRyYWdnYWJsZWAsXFxyXFxuICAgICAgb3B0aW9ucy5pc05hdmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uICYmIGAkeyBDTEFTU19ST09UIH0tLW5hdmAsXFxyXFxuICAgICAgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVElWRSxcXHJcXG4gICAgICAhIHRoaXMuY29uZmlnLmhpZGRlbiAmJiBDTEFTU19SJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkVOREVSRUQsXFxyXFxuICAgIF0uZmlsdGVyKCBCb29sZWFuICkuam9pbiggJyAnICk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb252ZXJ0cyBwcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmlkZWQgYXR0cmlidXRlcyBpbnRvIGEgc2luZ2xlIHN0cmluZy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHBhcmFtIGF0dHJzIC0gQW4gb2JqZWN0IHdpdGggYXR0cmliJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBIGJ1aWx0IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgYnVpbGRBdHRycyggYXR0cnM6IFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiApOiBzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5nIHtcXHJcXG4gICAgbGV0IGF0dHIgPSAnJztcXHJcXG5cXHJcXG4gICAgZm9yT3duIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggYXR0cnMsICggdmFsdWUsIGtleSApID0+IHtcXHJcXG4gICAgICBhdHRyICs9IHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSA/IGAgJHsgY2FtZWxUb0tlYmFiKCBrZXkgKSB9PVxcIiR7IHZhbHVlIH1cXCJgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiA6ICcnO1xcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIHJldHVybiBhdHRyLnRyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ltKCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyBwcm92aWRlZCBzdHlsZXMgaW50byBhIHNpbmdsZSBzdHJpbmcuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEBwYXJhbSBzdHlsZXMgLSBBbiBvYmplY3Qgd2l0aCBzdHlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBidWlsdCBzdHJpbmcuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBwcml2YXRlIGJ1aWxkU3R5bGVzKCBzdHlsZXM6IFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+ICk6IHN0cmluZyB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICBsZXQgc3R5bGUgPSAnJztcXHJcXG5cXHJcXG4gICAgZm9yT3duKCBzdHlsZXMsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoIHZhbHVlLCBrZXkgKSA9PiB7XFxyXFxuICAgICAgc3R5bGUgKz0gYCAkeyBjYW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xUb0tlYmFiKCBrZXkgKSB9OiR7IHZhbHVlIH07YDtcXHJcXG4gICAgfSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gICAgcmV0dXJuIHN0eWxlLnRyaW0oKTtcXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEdlbmVyYXRlcyBIVE1MIG9mIHNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBpbnNlcnRpbmcgcHJvdmlkZWQgY29udGVudHMuXFxyXFxuICAgKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEByZXR1cm4gVGhlIEhUTUwgZm9yIGFsbCBzbGlkZXMgYW5kIGNsb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgcmVuZGVyU2xpZGVzKCk6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcge1xcclxcbiAgICBjb25zdCB7IHNsaWRlVGFnOiB0YWcgfSA9IHRoaXMuY29uZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZztcXHJcXG5cXHJcXG4gICAgcmV0dXJuIHRoaXMuc2xpZGVzLm1hcCggY29udGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgPT4ge1xcclxcbiAgICAgIHJldHVybiBgPCR7IHRhZyB9ICR7IHRoaXMuYnVpbGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQXR0cnMoIGNvbnRlbnQuYXR0cnMgKSB9PiR7IGNvbnRlbnQuaHRtbCB8fCAnJyB9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjwvJHsgdGFnIH0+YDtcXHJcXG4gICAgfSApLmpvaW4oICcnICk7XFxyXFxuICB9XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBBZGQgdGhlIGBiYWNrZ3JvdW5kYCBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUgZm9yIHRoZSBjb3ZlciBtb2RlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gY29udGVudCAtIEEgc2xpZGUgY29udGVudC5cXHJcXG4gICAqL1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByaXZhdGUgY292ZXIoIGNvbnRlbnQ6IFNsaWRlQ29udGVudCApOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIGNvbnN0IHsgc3R5bGVzLCBodG1sID0gJycgfSA9IGNvbnRlbnQ7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoIHRoaXMub3B0aW9ucy5jb3ZlciAmJiAhIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLm9wdGlvbnMubGF6eUxvYWQgKSB7XFxyXFxuICAgICAgY29uc3Qgc3JjID0gaHRtbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicubWF0Y2goIC88aW1nLio/c3JjXFxcXHMqPVxcXFxzKihbXCdcXCJdKSguKz8pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcXFwxLio/Pi8gKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIHNyYyAmJiBzcmNbIDIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10gKSB7XFxyXFxuICAgICAgICBzdHlsZXMuYmFja2dyb3VuZCA9IGBjZW50ZXIvY292JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVyIG5vLXJlcGVhdCB1cmwoJyR7IHNyY1sgMiBdIH0nKWA7XFxyXFxuICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR2VuZXJhdGVzIGNsb25lcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbnRzIC0gQW4gYXJyYXkgd2l0aCBTbGlkZUNvbnRlbnQgb2JqZWN0cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIHByaXZhdGUgZ2VuZXJhdGVDbG9uZXMoIGNvbnRlbnRzOiBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDb250ZW50W10gKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsgY2xhc3NlcyB9ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMub3B0aW9ucztcXHJcXG4gICAgY29uc3QgY291bnQgID0gdGhpcy5nZXRDbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDb3VudCgpO1xcclxcbiAgICBjb25zdCBzbGlkZXMgPSBjb250ZW50cy5zbGljZSgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gICAgd2hpbGUgKCBzbGlkZXMubGVuZ3RoIDwgY291bnQgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgICAgIHB1c2goIHNsaWRlcywgc2xpZGVzICk7XFxyXFxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgIHB1c2goIHNsaWRlcy5zbGljZSggLWNvdW50ICkucmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vyc2UoKSwgc2xpZGVzLnNsaWNlKCAwLCBjb3VudCApICkuZm9yRWFjaCggKCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVudCwgaW5kZXggKSA9PiB7XFxyXFxuICAgICAgY29uc3QgYXR0cnMgPSBhc3NpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCB7fSwgY29udGVudC5hdHRycywgeyBjbGFzczogYCR7IGNvbnRlbnQuYXR0cnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNsYXNzIH0gJHsgY2xhc3Nlcy5jbG9uZSB9YCB9ICk7XFxyXFxuICAgICAgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsb25lID0gYXNzaWduKCB7fSwgY29udGVudCwgeyBhdHRycyB9ICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGluZGV4IDwgY291bnQgPyBjb250ZW50cy51bnNoaWZ0KCBjbG9uZSApIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRlbnRzLnB1c2goIGNsb25lICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVzIHRvIGdlbmVyYXRlLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyIG9mIGNsb25lcy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSBnZXRDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVDb3VudCgpOiBudW1iZXIge1xcclxcbiAgICBpZiAoIHRoaXMuaXNMb29wKCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gdGhpcztcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgaWYgKCBvcHRpb25zLmNsb25lcyApIHtcXHJcXG4gICAgICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gb3B0aW9ucy5jbG9uZXM7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCBwZXJQYWdlID0gbWF4KCAuLi50aGlzLmJyZWFrcG9pbnRzLm1hcCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggWyAsIG9wdGlvbnMgXSApID0+IG9wdGlvbnMucGVyUGFnZSApICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiBwZXJQYWdlICogKCAoIG9wdGlvbnMuZmxpY2tNYXhQYWdlcyB8fCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMSApICsgMSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogR2VuZXJhdGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcnJvd3MgYW5kIHRoZSB3cmFwcGVyIGVsZW1lbnQuXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gVGhlIEhUTUwgZm9yIGFycm93cy5cXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIHByaXZhdGUgcmVuZGVyQXJyb3dzKCk6IHN0cmluZyB7XFxyXFxuICAgIGxldCBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRtbCA9ICcnO1xcclxcblxcclxcbiAgICBodG1sICs9IGA8ZGl2IGNsYXNzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1cXCIkeyB0aGlzLm9wdGlvbnMuY2xhc3Nlcy5hcnJvd3MgfVxcIj5gO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaHRtbCArPSB0aGlzLnJlbmRlckFycm93KCB0cnVlICk7XFxyXFxuICAgIGh0bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsICs9IHRoaXMucmVuZGVyQXJyb3coIGZhbHNlICk7XFxyXFxuICAgIGh0bWwgKz0gYCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8L2Rpdj5gO1xcclxcblxcclxcbiAgICByZXR1cm4gaHRtbDtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEdlbmVyYXRlcyBhbiBhcnJvdyBIVE1MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqIFNvbWUgYXR0cmlidXRlcyBhcmUgdGVtcG9yYXJ5LCBhbmQgU3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSBjaGFuZ2VzIHRoZW0gYWZ0ZXIgbW91bnQuXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBwcmV2IC0gT3B0aW9ucyBmb3IgZWFjaCBicmVha3BvaW50LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBIVE1MIGZvciB0aGUgcHJldiBvciBuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4dCBhcnJvdy5cXHJcXG4gICAqL1xcclxcbiAgcHJpdmF0ZSByZW5kZXJBcnJvdygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByZXY6IGJvb2xlYW4gKTogc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgeyBjbGFzc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncywgaTE4biB9ID0gdGhpcy5vcHRpb25zO1xcclxcbiAgICBjb25zdCBhdHRycyA9IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgY2xhc3MgICAgOiBgJHsgY2xhc3Nlcy5hcnJvdyB9ICR7IHByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID8gY2xhc3Nlcy5wcmV2IDogY2xhc3Nlcy5uZXh0IH1gLFxcclxcbiAgICAgIHR5cGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICA6ICdidXR0b24nLFxcclxcbiAgICAgIGFyaWFMYWJlbDogcHJldiA/IGkxOG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnByZXYgOiBpMThuLm5leHQsXFxyXFxuICAgIH07XFxyXFxuXFxyXFxuICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gYDxidXR0b24gJHsgdGhpcy5idWlsZEF0dHJzKCBhdHRycyApIH0+YFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICArXFx0YDxzdmcgeG1sbnM9XFwiJHsgWE1MX05BTUVfU1BBQ0UgfVxcIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmlld0JveD1cXCIwIDAgJHsgU0laRSB9ICR7IFNJWkUgfVxcIiB3aWR0aD1cXCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJHsgU0laRSB9XFwiIGhlaWdodD1cXCIkeyBTSVpFIH1cXCI+YFxcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrIGA8cGF0aCBkPVxcIiR7IHRoaXMub3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcIiAvPmBcXHJcXG4gICAgICArIGA8L3N2Zz5gXFxyXFxuICAgICAgKyBgPC9idXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9uPmA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zIHRoZSBIVE1MIG9mIHRoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gVGhlIGdlbmVyYXRlZCBIVE1MLlxcclxcbiAgICovXFxyXFxuICBodG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCgpOiBzdHJpbmcge1xcclxcbiAgICBjb25zdCB7IHJvb3RDbGFzcywgbGlzdFRhZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFycm93cywgYmVmb3JlVHJhY2ssIGFmdGVyVHJhY2ssIHNsaWRlciwgYmVmb3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlciwgYWZ0ZXJTbGlkZXIgfSA9IHRoaXMuY29uZmlnO1xcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgbGV0IGh0bWwgPSAnJztcXHJcXG5cXHJcXG4gICAgaHRtbCArPSBgPGRpdiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQ9XFwiJHsgdGhpcy5pZCB9XFwiIGNsYXNzPVxcIiR7IHRoaXMuYnVpbGRDbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3NlcygpIH0gJHsgcm9vdENsYXNzIHx8IFwnXCcgfVxcIj5gO1xcclxcbiAgICBodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtbCArPSBgPHN0eWxlPiR7IHRoaXMuU3R5bGUuYnVpbGQoKSB9PC9zdHlsZT5gO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gICAgaWYgKCBzbGlkZXIgKSB7XFxyXFxuICAgICAgaHRtbCArPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYmVmb3JlU2xpZGVyIHx8ICcnO1xcclxcbiAgICAgIGh0bWwgKz0gYDxkaXYgY2xhc3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcInNwbGlkZV9fc2xpZGVyXFwiPmA7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgIGh0bWwgKz0gYmVmb3JlVHJhY2sgfHwgJyc7XFxyXFxuXFxyXFxuICAgIGlmICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIGFycm93cyApIHtcXHJcXG4gICAgICBodG1sICs9IHRoaXMucmVuZGVyQXJyb3dzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGh0bWwgKz0gYDxkaXYgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzPVxcInNwbGlkZV9fdHJhY2tcXCI+YDtcXHJcXG4gICAgaHRtbCArPSBgPCR7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0VGFnIH0gY2xhc3M9XFwic3BsaWRlX19saXN0XFwiPmA7XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBodG1sICs9IHRoaXMucmVuZGVyU2xpZGVzKCk7XFxyXFxuXFxyXFxuICAgIGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG1sICs9IGA8LyR7IGxpc3RUYWcgfT5gO1xcclxcbiAgICBodG1sICs9IGA8L2Rpdj4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYDsgLy8gLnRyYWNrXFxyXFxuXFxyXFxuICAgIGh0bWwgKz0gYWZ0ZXJUcmFjayB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInwgJyc7XFxyXFxuXFxyXFxuICAgIGlmICggc2xpZGVyICkge1xcclxcbiAgICAgIGh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21sICs9IGA8L2Rpdj5gO1xcclxcbiAgICAgIGh0bWwgKz0gYWZ0ZXJTbGlkZXIgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicnO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGh0bWwgKz0gYDwvZGl2PmA7IC8vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAuc3BsaWRlXFxyXFxuXFxyXFxuICAgIHJldHVybiBodG1sO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogUGFkcyB0aGUgbnVtYmVyIHdpdGggMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gbnVtYmVyIC0gQSBudW1iZXIgdG8gcGFkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gc3RyaW5nIC0gUGFkZGVkIG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHBhZCggbnVtYmVyOiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyICk6IHN0cmluZyB7XFxyXFxuICByZXR1cm4gbnVtYmVyIDwgMTAgPyBgMCR7IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIgfWAgOiBgJHsgbnVtYmVyIH1gO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInsgc2xpY2UgfSBmcm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcblxcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBSZXR1cm5zIGVsZW1lbnRzIHRoYXQgbWF0Y2ggdGhlIHByb3ZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZCBzZWxlY3Rvci5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgICAtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBIHBhcmVudCBlbGVtZW50IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gc2VsZWN0b3IgLSBBIHNlbGVjdG9yIHRvIHF1ZXJ5LlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBtYXRjaGVkIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlBbGw8RSBleHRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kcyBFbGVtZW50ID0gRWxlbWVudD4oIHBhcmVudDogRWxlbWVudCB8IERvY3VtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCwgc2VsZWN0b3I/OiBzdHJpbmcgKTogRVtdIHtcXHJcXG4gIHJldHVybiBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IgPyBzbGljZTxFPiggcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciApICkgOiBbXTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogVGhlIHR5cGUgZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciB0aGUgcmVndWxhciBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFNMSURFID0gJ3NsaWRlJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIHRoZSBjYXJvdXNlbCBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVyLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmV4cG9ydCBjb25zdCBMT09QID0gJ2xvb3AnO1xcclxcblxcclxcbi8qKlxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBUaGUgdHlwZSBmb3IgdGhlIGZhZGUgc2xpZGVyIHRoYXQgY2FuIG5vdCBoYXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtdWx0aXBsZSBzbGlkZXMgaW4gYSBwYWdlLlxcclxcbiAqXFxyXFxuICogQHNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBGQURFID0gJ2ZhZGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXCc7XFxyXFxuIl0sIm5hbWVzIjpbIlJUTCIsIlRUQiIsIk9SSUVOVEFUSU9OX00nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVAiLCJ3aWR0aCIsImxlZnQiLCJyaWdodCIsIngiLCJYIiwiWSIsIkFycm93TGVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QiLCJBUlJPVyIsIkFycm93UmlnaHQiLCJEaXJlY3Rpb24iLCJTcGxpZGUiLCJDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50cyIsIm9wdGlvbnMiLCJyZXNvbHZlIiwicHJvcCIsImF4aXNPbmx5IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRpcmVjdGlvbiIsImluZGV4IiwicmVwbGFjZSIsIm1hdGNoIiwib2Zmc2V0IiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlcGxhY2VtZW50IiwidG9Mb3dlckNhc2UiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJzbGljZSIsIm9yaWVudCIsInZhbHVlIiwiUFJPSkVDVF9DT0RFIiwiQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1BSRUZJWCIsIkNMQVNTX1JPT1QiLCJDTEFTU19UUkFDSyIsIkNMQVNTX0xJU1QiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiQ0xBU1NfU0xJREUiLCJDTEFTU19DTE9ORSIsIkNMQVNTX0FSUk9XIiwiQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BBR0lOQVRJT04iLCJDTEFTU19BQ1RJVkUiLCJTVEFUVVNfQ0xBU1NfUFJFRkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWCIsIkRFRkFVTFRTIiwidHlwZSIsInJvbGUiLCJzcGVlZCIsInBlclBhZ2UiLCJjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVTdGF0dXMiLCJhcnJvd3MiLCJwYWdpbmF0aW9uIiwicGFnaW5hdGlvbktleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidib2FyZCIsImludGVydmFsIiwicGF1c2VPbkhvdmVyIiwicGF1c2VPbkZvY3VzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInJlc2V0UHJvZ3Jlc3MiLCJlYXNpbmciLCJkcmFnIiwidHJpbVNwYWNlIiwiZm9jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VzYWJsZU5vZGVzIiwibGl2ZSIsImNsYXNzZXMiLCJzbGlkZSIsImNsb25lIiwiYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycm93IiwicHJldiIsIm5leHQiLCJwYWdlIiwic3Bpbm5lciIsImkxOG4iLCJmaXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QiLCJsYXN0Iiwic2xpZGVYIiwicGFnZVgiLCJwbGF5IiwicGF1c2UiLCJjYXJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VzZWwiLCJzZWxlY3QiLCJzbGlkZUxhYmVsIiwicmVkdWNlZE1vdGlvbiIsInJldycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRTcGVlZCIsImF1dG9wbGF5IiwiYXJyYXlMaWtlIiwic3RhcnQiLCJlbmQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXBwbHkiLCJmdW5jIiwiYmluZCIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJhcmd1bWVudHMiLCJ0eXBlT2YiLCJzdWJqZWN0IiwiaXNPYmplY3QiLCJpc0FycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheSIsImlzU3RyaW5nIiwidG9BcnJheSIsImZvckVhY2giLCJ2YWx1ZXMiLCJpdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmF0ZWUiLCJwdXNoIiwiYXJyYXkiLCJpdGVtcyIsIm1hdGNoZXMiLCJlbG0iLCJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0b3IiLCJvd25lckRvY3VtZW50IiwiZGVmYXVsdFZpZXciLCJ3aW5kb3ciLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciSFRNTEVsZW1lbnQiLCJlIiwiY2hpbGQiLCJwYXJlbnQiLCJjaGlsZHJlbiIsImYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWx0ZXIiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm93bktleXMiLCJPYmplY3QiLCJrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V5cyIsImZvck93biIsIm9iamVjdCIsInJldmVyc2UiLCJrZXkiLCJhc3NpZ24iLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicic291cmNlIiwibWVyZ2UiLCJyZW1vdmUiLCJub2RlcyIsIm5vZGUiLCJwYXJlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTm9kZSIsInJlbW92ZUNoaWxkIiwidW5pdCIsImFzc2VydCIsImNvbmRpdGlvbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJtZXNzYWdlIiwiRXJyb3IiLCJNYXRoIiwibWluIiwibWF4IiwiZmxvb3IiLCJjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbCIsImFicyIsImNhbWVsVG9LZWJhYiIsInN0cmluZyIsImlkcyIsIkV2ZW50QmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlciIsImxpc3RlbmVycyIsImZvckVhY2hFdmVudCIsInRhcmdldHMiLCJldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwidGFyZ2V0Iiwic3BsaXQiLCJldmVudE5TIiwiZnJhZ21lbnQiLCJjYWxsYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2siLCJldmVudCIsIm5hbWVzcGFjZSIsImlzRXZlbnRUYXJnZXQiLCJyZW1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhZGRFdmVudExpc3RlbmVyIiwidW5iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZCIsImxpc3RlbmVyIiwiZGlzcGF0Y2giLCJkZXRhaWwiLCJDdXN0b21FdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJidWJibGVzIiwiZG9jdW1lbnQiLCJjcmVhdGVFdmVudCIsImluaXRDdXN0b20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiZGVzdHJveSIsImRhdGEiLCJsZW5ndGgiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiRXZlbnRJbnRlcmZhY2UiLCJidXMiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsImJpbmRlciIsIm9uIiwiam9pbiIsIm9mZiIsImVtaXQiLCJSRU5ERVJFUl9ERUYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVVMVF9DT05GSUciLCJsaXN0VGFnIiwic2xpZGVUYWciLCJTdHlsZSIsImlkIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMiLCJzdHlsZXMiLCJydWxlIiwiYnJlYWtwb2ludCIsInNlbGVjdG9ycyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididWlsZCIsIl90aGlzIiwiY3NzIiwiZGVmYXVsdCIsImJ1aWxkU2VsZWN0b3JzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInNvcnQiLCJuIiwibSIsIm1lZGlhUXVlcnkiLCJfdGhpczIiLCJ0cmltIiwiU3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZVJlbmRlcmVyIiwiY29udGVudHMiLCJjb25maWciLCJkZWZhdWx0cyIsInNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMiLCJicmVha3BvaW50cyIsInByZWZpeCIsIm51bWJlciIsImluaXQiLCJjbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW4iLCJzcGxpZGUiLCJyb290IiwiY2xvbmVzIiwicXVlcnlTZWxlY3RvckFsbCIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJwYXJzZUJyZWFrcG9pbnRzIiwiaW5pdFNsaWRlcyIsInJlZ2lzdGVyUm9vdFN0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXMiLCJyZWdpc3RlclRyYWNrU3R5bGVzIiwicmVnaXN0ZXJTbGlkZVN0eWxlcyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJyZWdpc3Rlckxpc3RTdHlsZXMiLCJfdGhpczMiLCJtYXAiLCJjb250ZW50IiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0bWwiLCJhdHRycyIsImNvdmVyIiwiY2xhc3MiLCJzdHlsZSIsImJ1aWxkU3R5bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyIsImlzTG9vcCIsImdlbmVyYXRlQ2xvbmVzIiwiX3RoaXM0IiwiX3JlZiIsIl8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpczUiLCJfcmVmMiIsImNzc1BhZGRpbmciLCJjc3NUcmFja0hlaWdodCIsIl90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpczYiLCJfcmVmMyIsImJ1aWxkVHJhbnNsYXRlIiwiY3NzU2xpZGVIZWlnaHQiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciY3NzQXNwZWN0UmF0aW8iLCJfdGhpczciLCJfcmVmNCIsImNzc1NsaWRlV2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiZ2FwIiwiX3RoaXMkRGlyZWN0aW9uIiwiY3NzT2Zmc2V0Q2xvbmVzIiwiY3NzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09mZnNldEdhcHMiLCJpc0NlbnRlciIsImJ1aWxkQ3NzVmFsdWUiLCJjc3NPZmZzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Q2VudGVyIiwiQm9vbGVhbiIsIl90aGlzJERpcmVjdGlvbjIiLCJjbG9uZUNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCIsImdldENsb25lQ291bnQiLCJpc0ZpeGVkV2lkdGgiLCJfdGhpcyRwYXJzZUNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NWYWx1ZSIsInBhcnNlQ3NzVmFsdWUiLCJfdGhpcyREaXJlY3Rpb24zIiwiX3RoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzJHBhcnNlQ3NzVmFsdWUyIiwiX3RoaXMkcGFyc2VDc3NWYWx1ZTMiLCJfdGhpcyQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyc2VDc3NWYWx1ZTQiLCJwYWRkaW5nIiwiaGVpZ2h0IiwiaXNWZXJ0aWNhbCIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJjc3NIZWlnaHQiLCJhdXRvV2lkdGgiLCJmaXhlZFdpZHRoIiwiY3NzU2xpZGVTaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6ZSIsImZpeGVkSGVpZ2h0IiwiYXV0b0hlaWdodCIsImhlaWdodFJhdGlvIiwicGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnNlRmxvYXQiLCJfdGhpczgiLCJmb2N1cyIsImJ1aWxkQ2xhc3NlcyIsImlzTmF2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnYXRpb24iLCJoaWRkZW4iLCJidWlsZEF0dHJzIiwiYXR0ciIsInJlbmRlclNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMiLCJfdGhpczkiLCJ0YWciLCJfY29udGVudCRodG1sIiwibGF6eUxvYWQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3JjIiwiYmFja2dyb3VuZCIsImNvdW50IiwidW5zaGlmdCIsIl9yZWY1IiwiZmxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrTWF4UGFnZXMiLCJyZW5kZXJBcnJvd3MiLCJyZW5kZXJBcnJvdyIsIl90aGlzJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zIiwiYXJpYUxhYmVsIiwiYXJyb3dQYXRoIiwiX3RoaXMkY29uZmlnIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInJvb3RDbGFzcyIsImJlZm9yZVRyYWNrIiwiYWZ0ZXJUcmFjayIsInNsaWRlciIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJiZWZvcmVTbGlkZXIiLCJhZnRlclNsaWRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5Q0FHTyxJQ0tNQSxFQUFNLE1BS05DLEVBQU0sTUNRTkMsRUFBa0IsQ0FDN0JDLE0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFZLENBQUUsVUFDZEMsS0FBWSxDQUFFLE1BQU8sU0FDckJDLE1BQVksQ0FBRSxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVSxRQUN4QkMsRUFBWSxDQUFFLEtBQ2RDLEVBQVksQ0FBRSxLQUNkQyxFQUFZLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFFLEtBQ2RDLFVBQVksQ0N6QmlCQyxVQURBQSxjRDJCN0JDLFdBQVksQ0N6QmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkQsWUFIQUEsWURvQkEsRUFzQmYsU0FBQUUsRUFBV0MsRUFBZ0JDLEVBQXdCQyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E4QjFELE1BQUEsQ0FDTEMsUUF2Qk8sU0FBU0MsRUFBY0MsRUFBb0JDLEdBRTVDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQUFBQyxHQURORCxFQUFZQSxHQUFhSixFQUFRSSxhQUNMbkIsR0FBU2tCLEVBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxJQUFjbEIsRUFBTSxFQUFJLENBQUEsRUFBNUIsRUFFekMsT0FBQUMsRUFBaUJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFVZixFQUFpQmUsR0FBUUcsSUFDdERILEVBQUtJLFFBQVMsb0JBQXFCLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQyxFQUFPQyxHQUN2Q0MsRUFBY3RCLEVBQWlCb0IsRUFBTUcsWUFBTixHQUF1QkwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQVdFLEVBQ2hFLE9BQVMsRUFBVEMsRUFBYUMsRUFBWUUsT0FBUSxDQUFwQixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBd0JDLFlBQXhCLEVBQXdDSCxFQUFZSSxNQUFPLENBQW5CLEVBQXlCSixDQUNyRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FIQyxDQUlQLEVBZUVLLE9BTkYsU0FBaUJDLEdBQ2YsT0FBT0EsR0FBVWYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVFJLFlBQWNuQixFQUFNLEVBQUksQ0FBQSxFQUNuRCxDQUVPLENBSVQsQ0V4RU8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQU0rQixFQUFlLFNDRXRCQyxFQUFtQkQsRUFBekIsS0FZYUUsRUFBd0JGLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4QkcsRUFBNEJGLEVBQWxDLFFBQ01HLEVBQTRCSCxFQUFsQyxPQUNNSSxFQUE0QkonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWxDLFFBQ01LLEVBQTRCRCxFQUFsQyxVQUdNRSxFQUE0Qk4sRUFBbEMsUUFHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01PLEVBQTRCUCxFQUFsQyxhQVVNUSxFQUE0QkMsWUM1QjVCQyxFQUFvQixDQUMvQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLEtBQW9CLFFBQ3BCQyxLQUFvQixTQUNwQkMsTUFBb0IsSUFDcEJDLFFBQW9CLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNwQkMsWUFBb0IsQ0FBQSxFQUNwQkMsT0FBb0IsQ0FBQSxFQUNwQkMsV0FBb0IsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQUEsRUFDcEJDLG1CQUFvQixDQUFBLEVBQ3BCQyxTQUFvQixJQUNwQkMsYUFBbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLENBQUEsRUFDcEJDLGFBQW9CLENBQUEsRUFDcEJDLGNBQW9CLENBQUEsRUFDcEInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxPQUFvQixnQ0FDcEJDLEtBQW9CLENBQUEsRUFDcEJyQyxVQUFvQixNQUNwQnNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxVQUFvQixDQUFBLEVBQ3BCQyxlQUFvQiw2Q0FDcEJDLEtBQW9CLENBQUEsRUFDcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCQyxRRHFDcUIsQ0FDckJDLE1BQVl6QixFQUNaMEIsTUFBWXpCLEVBQ1pXLE9BN0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndUNoQixFQUFsQyxTQThDTCtCLE1BQVl6QixFQUNaMEIsS0E3Q3VDMUIsRUFBbEMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NBOENMMkIsS0E3Q3VDM0IsRUFBbEMsU0E4Q0xXLFdBQVlWLEVBQ1oyQixLQTdDdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDM0IsRUFBbEMsU0E4Q0w0QixRQXhDdUNuQyxFQUFsQyxTQStCZ0IsRUNwQ3JCb0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtDMUJrQixDQUNsQkosS0FBWSxpQkFDWkMsS0FBWSxhQUNaSSxNQUFZLG9CQUNaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsS0FBWSxtQkFDWkMsT0FBWSxpQkFDWkMsTUFBWSxnQkFDWkMsS0FBWSxpQkFDWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLE1BQVksaUJBQ1pDLFNBQVksV0FDWmQsTUFBWSxRQUNaZSxPQUFZLHlCQUNaQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV0FBWSxVQVpNLEVEMkJsQkMsY0FBZSxDQUNiakMsTUFBYSxFQUNia0MsWUFBYSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDYkMsU0FBYSxPQUhBLENBckJnQixFRUZqQixTQUFBcEQsRUFBVXFELEVBQXlCQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBZ0JDLEdBQ2pFLE9BQU9DLE1BQU1DLFVBQVV6RCxNQUFNMEQsS0FBTUwsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVdDLEVBQU9DLENBQTlDLENBQ1QsQ0NhTyxTQUFTSSxFQUFPQyxHQUVyQixPQUFPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFBS0MsS0FBTEYsTUFBQUMsRUFBVyxDQUFBLE1BQVM1RCxPQUFBQSxFQUFPOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidELFVBQVcsQ0FBWCxFQUFsQyxDQUNGLENDZkEsU0FBU0MsRUFBUWhELEVBQWNpRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDN0IsT0FBTyxPQUFPQSxJQUFZakQsQ0FDNUIsQ0FTTyxTQUFTa0QsRUFBVUQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ3hCLE9BK0NtQixPQS9DRkEsR0FBYUQsRUFBUSxTQUFVQyxDQUFsQixDQUNoQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FTTyxJQUFNRSxFQUFxRFYsTUFBTVUsUUFrQjNEQyxHQVQ2RFIsRUFBT0ksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVEsVUFBUixFQVNkSixFQUFPSSxFQUFRLFFBQVIsR0MxQ25FLFNBQVNLLEVBQVlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UsR0FDMUIsT0FBT2dFLEVBQVNoRSxDQUFBLEVBQVVBLEVBQVEsQ0FBRUEsRUFDdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLENDSGdCLFNBQUFtRSxFQUFZQyxFQUFpQkMsR0FDbENILEVBQUFFLENBQUEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNELFFBQVNFLENBQWxCLENBQ1gsQ0NBZ0IsU0FBQUMsRUFBU0MsRUFBWUMsR0FFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzVCLE9BRFBELEVBQU1ELEtBQU5DLE1BQUFBLEVBQWVMLEVBQVNNLENBQUEsQ0FBeCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEVBQ09ELENBQ1QsQ0NIZ0IsU0FBQUUsRUFBU0MsRUFBNEJDLEdBQzVDLE9Kc0UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRixTQUF3QmIsR0FDekIsSUFDRixPQUFPQSxhQUF1QkEsRUFBa0JjLGNBQWNDLGFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FlQyxRQUFTQyxXQUd4RixPQUZVQyxHQUNELE1BQUEsQ0FBQSxDQUNULENBQ0YsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJNUV3Qk4sQ0FBZixJQUEwQkEsRUFBQSxtQkFBOEJBLEVBQUlELFNBQVVqQixLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWtCLEVBQUtDLENBQXZELENBQ25DLENDRmdCLFNBQUFNLEVBQThCQyxFQUFxQlAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ2pFLE9BQU9BLEdDQTZEQSxFREE3QkEsRUNDakNRLEdBRHlDRCxFREFoQkEsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQ0xwRixFQUFPb0YsRUFBT0MsUUFBZCxFQUFrQyxJQUNyRFIsRUFBV1EsRUFBU0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQVEsU0FBQUgsR0FBQSxPQUFTUixFQUFTUSxFQUFPTixFQUF6QixDQUFqQlEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQXlEQSxHREZ4QixJQUFNRCxFQUFPRyxrQkNBbEQsSUFBc0RWLENEQ3RFLENMZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEeUVsQixFQUFPSSxFQUFRLFdBQVIsRU8xRHpFLElBQU15QixFQUFVQyxPQUFPQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0NTZCxTQUFBQyxFQUNkQyxFQUNBckIsRUFDQTlGLEdBRUttSCxJQUNEbkgsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ErRyxFQUFTSSxDQUFBLEVBQVNDLFFBQWxCLEVBQThCTCxFQUFTSSxDQUFBLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXdkIsUUFBUyxTQUFPeUIsR0FDbEUsY0FBUkEsR0FBdUJ2QixFQUFVcUIsRUFBUUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQU9BLENBQXpCLENBQ3ZCLENBRkEsQ0FNTixDQ2tCTyxTQUFTQyxFQUEwQkgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBUWpDLE9BTlA1RixFQUFPOEQsVUFBVyxDQUFsQixFQUFzQk8sUUFBUyxTQUFVMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEdBQy9CTCxFQUFBSyxFQUFRLFNBQUU5RixFQUFPNEYsR0FDdkJGLEVBQVFFLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRRSxFQUFRRixFQUN4QixDQUZNLENBR1IsQ0FKRixFQU1PRixDQUNULENDQ08sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVNLLEVBQXlCTCxHQWNoQyxPQVpQNUYsRUFBTzhELFVBQVcsQ0FBbEIsRUFBcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCTyxRQUFTLFNBQVUyQixHQUMvQkwsRUFBQUssRUFBUSxTQUFFOUYsRUFBTzRGLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNsQjVCLEVBQVNoRSxDQUFULEVBQ0swRixFQUFBRSxHQUFRNUYsRUFBTUYsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsRUFDRWlFLEVBQVUvRCxDQUFBLEVBQ3BCMEYsRUFBUUUsR0FBUUcsRUFBTyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSWhDLEVBQVUyQixFQUFRRSxFQUFSLEVBQWtCRixFQUFRRSxHQUFRLEdBQUk1RiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBM0QsRUFFaEIwRixFQUFRRSxHQUFRNUYsQ0FFbEIsQ0FSTSxDQVNSLENBVkYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBWU8wRixDQUNULENDM0RPLFNBQVNNLEVBQVFDLEdBQ3RCOUIsRUFBUzhCLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPLFNBQVFDLEdBQ2pCQSxHQUFRQSxFQUFLQyxZQUNYRCxFQUFBQyxXQUFXQyxZQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUYsQ0FBeEIsQ0FFUCxDQUpGLENBS0YsQ0NITyxTQUFTRyxFQUFNckcsR0FDcEIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09BQU9pRSxFQUFVakUsR0FBVUEsRUFBUUEsRUFBWUEsRUFBWixLQUF5QixFQUM5RCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0NKZ0IsU0FBQXNHLEVBQVFDLEVBQWdCQyxHQUN0QyxHQUFLLENBQUVELEVBQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQU0sSUFBSUUsTUFBWXhHLElBQUFBLFFBQW1CdUcsR0FBVyxHQUFwRCxDQUVKJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQ2I4Q0UsS0FBL0JDLElBQVIsSUFBYUMsRUFBMEJGLEtBQTFCRSxJQUEwQkYsSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQXJCRyxNQUFxQkgsS0FBZEksS0FBY0osS0FBUkssSUNLL0IsU0FBU0MsRUFBY0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQzVCLE9BQU9BLEVBQU8xSCxRQUFTLHFCQUFzQixPQUF0QyxFQUFnREksWUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZELENBQ0YsQ0NDQSxJQUFNdUgsRUFBOEIsR0N1QjdCLFNBQVNDLElBS2QsSUFBSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBQW9GLEdBdUYvRSxTQUFBQyxFQUNQQyxFQUNBQyxFQUNBbEQsR0FFQUYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNtRCxFQUFTLFNBQVVFLEdBQ2hCQSxHQUFBckQsRUFBU29ELEVBQVEsU0FBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ3pCQSxFQUFPRSxNQUFPLEdBQWRGLEVBQW9CcEQsUUFBUyxTQUFXdUQsR0FDaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQyxFQUFXRCxFQUFRRCxNQUFPLEdBQWYsRUFDakJwRCxFQUFVbUQsRUFBUUcsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVUsR0FBS0EsRUFBVSxFQUEzQyxDQUNBLENBSEZKLENBSUEsQ0FMUSxDQU1WLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BGLENBUUYsQ0FVTyxNQUFBLENBQ0w1RCxLQWhHRixTQUNFMkQsRUFDQUMsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLLEVBQ0EzSSxHQUVBb0ksRUFBY0MsRUFBU0MsRUFBUSxTQUFFQyxFQUFRSyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0MsR0FDOUMsSUFBTUMsRUFBZ0IscUJBQXNCUCxFQUN0Q1EsRUFBVUQsRUFDWlAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU9TLG9CQUFvQnRFLEtBQU02RCxFQUFRSyxFQUFPRCxFQUFVM0ksQ0FBMUQsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0F1SSxFQUFBLGVBQTJCN0QsS0FBTTZELEVBQVFJLENBQXpDLEVBRVlHLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUCxFQUFPVSxpQkFBa0JMLEVBQU9ELEVBQVUzSSxDQUExQyxFQUFzRHVJLEVBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1lBQXlCSSxDQUF6QixFQUN0RVIsRUFBVTlDLEtBQU0sQ0FBRWtELEVBQVFLLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPQyxFQUFXRixFQUFVSSxFQUF0RCxDQUNBLENBUkYsQ0FTRixFQWtGRUcsT0F6RU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQVFiLEVBQXVCQyxFQUEyQkssR0FDakVQLEVBQWNDLEVBQVNDLEVBQVEsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VDLEVBQVFLLEVBQU9DLEdBQ2xDVixFQUFBQSxFQUFVaEMsT0FBUSxTQUFZZ0QsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ3hDLE1BQUtBLENBQUFBLEVBQUFBLEVBQVUsS0FBUVosR0FDbEJZLEVBQVUsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVFQLEdBQ2xCTyxFQUFVLEtBQVFOLEdBQ2RGLEdBQVlRLEVBQVUsS0FBUVIsS0FFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JDUSxFQUFVLEdBQVYsRUFDTyxDQUFBLEVBSVQsQ0FYVSxDQVlaLENBYkYsQ0FjRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUEyREVDLFNBaERPLFNBQWFiLEVBQXFCM0csRUFBY3lILEdBQ25ELElBQUF0RCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFXRyxNQVJxQixZQUF2QixPQUFPdUQsWUFDVnZELEVBQUksSUFBSXVELFlBQWExJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0gsRUFBTSxDQUFFMkgsUUFIZixDQUFBLEVBR3dCRixPQUFBQSxDQUFYLENBQXZCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUVBdEQsRUFBQXlELFNBQVNDLFlBQWEsYUFBdEIsR0FDRkMsZ0JBQWlCOUgsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkwsQ0FBQSxFQU1vQixDQUFBLEVBQU95SCxDQUF6QyxFQUdGZCxFQUFPb0IsY0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U1RCxDQUF0QixFQUNPQSxDQUNULEVBb0NFNkQsUUFURixXQUNFekIsRUFBVWpELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFTLFNBQVEyRSxHQUFFQSxFQUFNLEdBQU4sQ0FBYyxDQUEzQyxFQUNPMUIsRUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneklIMkIsT0FBUyxDRDBJZixDQUVPLENBTVQsQ0V2SE8sU0FBU0MsRUFBZ0JqSyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FLOUIsSUFBTWtLLEVBQU1sSyxFQUFTQSxFQUFPOEksTUFBTW9CLElBQU1SLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTUyx1QkFBakQsRUFLTUMsRUFBU2hDLEVBQWYsRUE2QkEsT0FKS3BJLEdBQ0hBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFPOEksTUFBTXVCLEdDbER1QixVRGtESkQsRUFBT04sT0FBdkM5SixFQUdLOEcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVFzRCxFQUFRLENBQ3JCRixJQUFBQSxFQUNBRyxHQXZCTyxTQUFJN0IsRUFBMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCSyxHQUMvQnVCLEVBQUF4RixLQUFNc0YsRUFBSy9FLEVBQVNxRCxDQUFBLEVBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOEIsS0FBTSxHQUF4QixFQUErQixTQUFLckUsR0FDM0M0QyxFQUFBbkUsTUFBT21FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFVNUQsRUFBU2dCLEVBQUVzRCxNQUFGLEVBQWF0RCxFQUFFc0QsT0FBUyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbEQsQ0FDVCxDQUZLLENBR1QsRUFvQkVnQixJQUFLN0YsRUFBTzBGLEVBQU9oQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBUWMsQ0FBdEIsRUFDTE0sS0FiRixTQUFlMUIsR0FFYnNCLEVBQU9kLFNBQVVZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFLcEIsRUFBTy9ILEVBQU84RCxVQUFXLENBQVgsQ0FBcEMsQ0FDRixDQU11QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFNekIsQ0U5RU8sSUNRTTRGLEVBQTBDLENBQ3JEQyxRQUFVLEtBQ1ZDLFNBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElBRjJDLEVDTzFDQyxhQXNCWCxTQUFhQyxFQUFBQSxFQUFZM0ssR0FsQnpCNEssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQWlCQyxPQUFpQixHQW1CaENELEtBQUtELEdBQVVBLEVBQ2ZDLEtBQUs1SyxRQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVUEsQ0FDakIsNEJBVUE4SyxLQUFBLFNBQU1wRixFQUFrQnhGLEVBQWNhLEVBQXcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQmdLLEdBRXREQyxFQUFjSixLQUFLQyxPQUR6QkUsRUFBYUEsR0FBYyxXQUNxQkgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQUtDLE9BQVFFLElBQWdCLElBQ3pEQyxFQUFXdEYsR0FBYXNGLEVBQVd0RixJQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBYyxJQUM3RHhGLEdBQVNhLENBQ25CLElBT0FrSyxNQUFBLFdBQWdCLElBQUFDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBTixLQUNWTyxFQUFNLEdBZ0JILE9BZEZQLEtBQUtDLE9BQU9PLFVBQ2ZELEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FPUCxLQUFLUyxlQUFnQlQsS0FBS0MsT0FBT08sT0FBakMsR0FHRjlFLE9BQUFDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFNcUUsS0FBS0MsTUFBWCxFQUNKUyxLQUFNLFNBQUVDLEVBQUdDLEdBQUwsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXdDLFFBQTVCTixFQUFLbEwsUUFBUXlMLFdBQXVCLENBQUNGLEVBQUksQ0FBQ0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUksQ0FBQ0EsRUFBSSxDQUFDRCxDQUFoRSxDQURGLEVBRUpyRyxRQUFTLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjNkYsR0FDRixZQUFmQSxJQUdJSSxHQUZQQSxHQUFBLGlDQUF5Q0osRUFBekMsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ09HLEVBQUtHLGVBQWdCSCxFQUFLTCxPQUFRRSxFQUFsQyxFQUNBLElBRVQsQ0FSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0csRUFVQUksQ0FDVCxJQVNRRSxlQUFBLFNBQWdCTCxHQUFxRSxJQUFBVSxFQUFBZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FDdkZPLEVBQU0sR0FlSCxPQWJDM0UsRUFBQXdFLEVBQVcsU0FBRUgsRUFBUW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRixHQUMzQkEsT0FBZ0JnRyxFQUFLZixHQUFRakYsSUFBQUEsR0FBWWlHLEtBQXpDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNBUixHQUFXekYsRUFBWCxLQUVRYyxFQUFBcUUsRUFBUSxTQUFFOUosRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiLEdBQ2xCYSxDQUFBQSxHQUFtQixJQUFWQSxJQUNab0ssR0FBV2pMLEVBQVdhLEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQSxFQUF0QixJQUVGLENBSk0sRUFNRG9LLEdBQUEsR0FDUCxDQVhNLEVBYURBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUNULHlCQ0hBLFNBQUFTLEVBQWFDLEVBQXFDN0wsRUFBbUI4TCxFQUF5QkMsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBeEM5Rm5CLEtBQWlCb0IsT0FBeUIsR0FlMUNwQixLQUFpQjVLLFFBQW1CLEdBZXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQzRLLEtBQWlCcUIsWUFBcUMsR0FXN0NuRixFQUFBbkYsRUFBVW9LLEdBQVksRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RCLEVBQ1BqRixFQUFPQSxFQUFPOEQsS0FBSzVLLFFBQVMyQixHQUFZM0IsR0FBVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBbkQsRUFFQTRLLEtBQUtpQixTQUFZQSxFQUNqQmpCLEtBQUtrQixPQUFZbEYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVEsR0FBSTJELEVBQXlCdUIsR0FBVSxFQUF2QyxFQUN6QmxCLEtBQUtELEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FZQyxLQUFLa0IsT0FBT25CLElSN0Z4QixJQURpQnVCLEVROEZ1QixZQ3RHNUJDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVFNVbEUsRUFBS2lFLElBQWFqRSxFQUFLaUUsSUFBWSxHQUFNLEdTUnRELEdBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxJQUFBQSxLQUFnQkEsR0RzR3hDdkIsS0FBS0YsTUFBWSxJQUFJQSxFQUFPRSxLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBS0QsR0FBSUMsS0FBSzVLLE9BQXpCLEVBQ2pCNEssS0FBSy9LLFVBQVlBLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLEVBQU0sRUFBTStLLEtBQUs1SyxPQUE1QixFQUVUcUgsRUFBQXVELEtBQUtpQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBUy9CLE9BQVEsNkJBQXRCLEVBRVJjLEtBQUt3QixLQUFMLENBQ0YsR0F6RU9DJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFQLFNBQWNDLEdBQ1osSUVqQytFNUcsRUZpQ3ZFeUUsRUFBT0osRUFBZ0J1QycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBaEIsRUFBUG5DLEdBQ0FvQyxFQUFTRCxFQUFUQyxLQUNGQyxHRW5DNkN2RywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUZtQzFCc0csR0VuQ3NEN0csRUZtQ2hFLElBQXFCcEUsR0VsQ3BCVCxFQUFVb0YsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU93RyxpQkFBa0IvRyxDQUF6QixDQUFBLEVBQXdDLElGb0NsRXlFLEVKaERvQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsVUlnRGpCLFdBQ1RwRCxFQUFBZixFQUFPdUcsRUFBTSxPQUFiLENBQUEsQ0FDUiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FGRixFQUlBeEYsRUFBUXlGLENBQVIsQ0FDRiw2QkFvRVFKLEtBQUEsV0FDTnhCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUFLOEIsaUJBQUwsRUFDQTlCLEtBQUsrQixXQUFMLEVBQ0EvQixLQUFLZ0MsbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCQUFMLEVBQ0FoQyxLQUFLaUMsb0JBQUwsRUFDQWpDLEtBQUtrQyxvQkFBTCxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWxDLEtBQUttQyxtQkFBTCxDQUNGLElBS1FKLFdBQUEsV0FBbUIsSUFBQUssRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FwQyxLQUN6QnZGLEVBQU11RixLQUFLb0IsT0FBUXBCLEtBQUtpQixTQUFTb0IsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUssU0FBRUMsRUFBUzdNLElBQy9DNk0sRUFBVWxJLEVBQVVrSSxHQUFZLENBQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxLQUFNRCxDQUFSLEVBQW9CQSxHQUM1Q3JDLE9BQVNxQyxFQUFRckMsUUFBVSxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDM0JxQyxFQUFBRSxNQUFTRixFQUFRRSxPQUFTLEdBRWxDSixFQUFLSyxNQUFPSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBWixFQUVNckssRUFBY21LLEVBQUtoTixRQUFRNkMsUUFBUUMsTUFBbkMsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXdELElBQVZ6QyxFN0J0R2pCcUIsWTZCc0c4QyxJQU8xRSxPQUxQa0YsRUFBUXNHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRRSxNQUFPLENBQ3JCRSxPQUFXekssRUFBSixLQUFpQnFLLEVBQVFFLE1BQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNRSxPQUFTLEtBQU0zQixLQURoQyxFQUVyQjRCLE1BQU9QLEVBQUtRLFlBQWFOLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRckMsTUFBMUIsQ0FGYyxDQUF2QixFQUtPcUMsQ0FDUCxDQWZpQixDQUFuQixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQkt0QyxLQUFLNkMsT0FBTCxHQUNFN0MsS0FBQThDLGVBQWdCOUMsS0FBS29CLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFyQixDQUVULElBS1FZLG1CQUFBLFdBQTJCLElBQUFlLEVBQUEvQyxLQUNqQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQUtxQixZQUFZL0csUUFBUyxTQUEwQjBJLEdBQUEsSUFBdEJ4TyxFQUFzQndPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFBLEdBQWY1TixFQUFlNE4sRUFBQSxHQUM3Q0QsRUFBQWpELE1BQU1JLEtBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNLElBQUssWUFBYTFELEVBQU1wSCxFQUFRWixPQUFTQSxDQUFyRCxDQUNMLENBRkYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBR0YsSUFLUXlOLG9CQUFBLFdBQTRCLElBQUFnQixFQUFBakQsS0FDMUJGLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FVRSxLQUFWRixNQUNGaEYsTUFBZ0J2RSxFQUV0QnlKLEtBQUtxQixZQUFZL0csUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMsU0FBMEI0SSxHQUFBLElBQXRCMU8sRUFBc0IwTyxFQUFBLEdBQWY5TixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZThOLEVBQUEsR0FDbERwRCxFQUFNSSxLQUFNcEYsRUFBVW1JLEVBQUs1TixRQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxhQUFkLEVBQStCNE4sRUFBS0UsV0FBWS9OLEVBQVMsQ0FBQSxDQUExQixFQUFtQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidaLENBQXhGc0wsRUFDQUEsRUFBTUksS0FBTXBGLEVBQVVtSSxFQUFLNU4sUUFBUywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY0FBZCxFQUFnQzROLEVBQUtFLFdBQVkvTixFQUFTLENBQUEsQ0FBMUIsRUFBa0NaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUF4RnNMLEVBQ0FBLEVBQU1JLEtBQU1wRixFQUFVLFNBQVVtSSxFQUFLRyxlQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0JoTyxDQUFyQixFQUFnQ1osQ0FBaEVzTCxDQUNBLENBSkYsQ0FLRixJQUtRcUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG1CQUFBLFdBQTJCLElBQUFrQixFQUFBckQsS0FDekJGLEVBQVVFLEtBQVZGLE1BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NGaEYsTUFBZ0J0RSxFQUV0QndKLEtBQUtxQixZQUFZL0csUUFBUyxTQUEwQmdKLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFBLElBQXRCOU8sRUFBc0I4TyxFQUFBLEdBQWZsTyxFQUFla08sRUFBQSxHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbER4RCxFQUFNSSxLQUFNcEYsRUFBVSxZQUFhdUksRUFBS0UsZUFBZ0JuTyxDQUFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBZ0NaLENBQW5Fc0wsRUFFT3VELEVBQUtHLGVBQWdCcE8sQ0FBckIsR0FDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwSyxFQUFNSSxLQUFNcEYsRUFBVSxlQUFnQnVJLEVBQUtJLGVBQWdCck8sQ0FBckInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWdDWixDQUF0RXNMLENBRUYsQ0FORixDQU9GLElBS1FvQyxvQkFBQSxXQUE0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsSUFBQXdCLEVBQUExRCxLQUMxQkYsRUFBVUUsS0FBVkYsTUFDRmhGLE1BQWdCcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFLEVBRXRCdUosS0FBS3FCLFlBQVkvRyxRQUFTLFNBQTBCcUosR0FBQSxJQUF0Qm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUCxFQUFzQm1QLEVBQUEsR0FBZnZPLEVBQWV1TyxFQUFBLEdBQ2xEN0QsRUFBTUksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQU1wRixFQUFVLFFBQVM0SSxFQUFLRSxjQUFleE8sQ0FBcEIsRUFBK0JaLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic5RHNMLEVBQ0FBLEVBQU1JLEtBQU1wRixFQUFVLFNBQVU0SSxFQUFLRixlQUFnQnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTyxDQUFyQixHQUFrQyxPQUFRWixDQUExRXNMLEVBQ0FBLEVBQU1JLEtBQU1wRixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVTRJLEVBQUtyTyxRQUFTLGFBQWQsRUFBK0JtSCxFQUFNcEgsRUFBUXlPLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkLEdBQXVCLE1BQU9yUCxDQUFuRnNMLEVBQ0FBLEVBQU1JLEtBQVVwRixXQUFtQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVUFBVzFGLEVBQVFxTixNQUFRLE9BQVMsU0FBVWpPLENBQWpGc0wsQ0FDQSxDQUxGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQU1GLElBU1F5RCxlQUFBLFNBQWdCbk8sR0FDdEIsSUFBQTBPLEVBQTRCOUQsSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUsvSyxVQUF6QkksSUFBQUEsUUFBU2EsSUFBQUEsT0FDWHFFLEVBQVMsR0FVZiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0FSQUEsRUFBT0UsS0FBTXVGLEtBQUsrRCxnQkFBaUIzTyxDQUF0QixDQUFiLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBbUYsRUFBT0UsS0FBTXVGLEtBQUtnRSxjQUFlNU8sQ0FBcEIsQ0FBYixFQUVLNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLLEtBQUtpRSxTQUFVN08sQ0FBZixJQUNIbUYsRUFBT0UsS0FBTXVGLEtBQUtrRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY0FBZWhPLEVBQVEsQ0FBSSxJQUFHLEdBQW5DLENBQWIsRUFDQXFFLEVBQU9FLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FQYixNQUFBVyxFQUFnQnlGLEtBQUttRSxnQkFBaUIvTyxDQUF0QixDQUFoQixHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHS21GLEVBQ0pnQixPQUFRNkksT0FESixFQUVKL0IsSUFBSyxTQUFBbE0sR0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTUFBQSxZQUFzQmQsRUFBUyxHQUFULE1BQW9CYyxFQUExQyxHQUFBLENBRkQsRUFHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0pxSixLQUFNLEdBSEYsQ0FJVCxJQVVRdUUsZ0JBQUEsU0FBaUIzTyxHQUN2QixJQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJVWUsRUFKVmtPLEVBQTRCckUsS0FBSy9LLFVBQXpCSSxJQUFBQSxRQUFTYSxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsT0FDWG9PLEVBQWF0RSxLQUFLdUUsY0FBbEIsRUFFRCxPQUFBdkUsS0FBS3dFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxhQUFjcFAsQ0FBbkIsR0FDS2UsR0FBZ0JzTyxFQUFBekUsS0FBSzBFLGNBQWV0UCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBU0MsRUFBUyxZQUFBLEVBQXRDLEdBQWhCYyxNQUFPcUcsSUFBQUEsS0FDUncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCxLQUFLa0UsY0FBZWhPLEVBQVFDLENBQVIsRUFBa0JtTyxFQUFZOUgsQ0FBbEQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBSUV0RyxFQURLLElBQU1vTyxFQUFhbFAsRUFBUStCLFNBQ3BDLEdBQ1QsSUFjUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnTixnQkFBQSxTQUFpQi9PLEdBQ3ZCLElBUVErQixFQUtFaEIsRUFiVndPLEVBQTQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQjNFLEtBQUsvSyxVQUF6QkksSUFBQUEsUUFBU2EsSUFBQUEsT0FFWixPQUFBOEosJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQUt3RSxhQUFjcFAsQ0FBbkIsR0FDS2UsR0FBZ0J5TyxFQUFBNUUsS0FBSzBFLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjQUFldFAsRUFBU0MsRUFBUyxZQUFBLEVBQXRDLEdBQWhCYyxNQUFPcUcsSUFBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQ1IsQ0FBRXdELEtBQUtrRSxjQUFlaE8sRUFBUUMsRUFBUSxDQUFoQixFQUFxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JxRyxDQUF6QyxLQUlIckYsRUFBaUIvQixFQUFqQitCLFFBQVMwTSxFQUFRek8sRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVJ5TyxLQURYdEosRUFBUyxJQUdSRSxLQUFVdkUsRUFBUSxHQUFLaUIsQ0FBTCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBekIsR0FBQSxFQUVLME0sSUFDSzFOLEdBQVIwTyxFQUF3QjdFLEtBQUswRSxjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZWIsQ0FBcEIsR0FBaEIxTixNQUFPcUcsSUFBQUEsS0FFZmpDLEVBQU9FLEtBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNdUYsS0FBS2tFLGNBQWVoTyxHQURiQyxFQUFRZ0IsRUFBVWhCLEdBQVUsR0FDTXEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxDQUF6QyxDQUFiLEdBR0tqQyxFQUNULElBU1F5SixjQUFBLFNBQWU1TyxHQUNmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUdJYyxFQUNBQyxFQUFPcUcsRUFKWDhILEVBQWF0RSxLQUFLdUUsY0FBbEIsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRUQsT0FBQUQsR0FBY2xQLEVBQVF5TyxLQUNqQjNOLEVBQVc4SixLQUFLL0ssVUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWhCaUIsT0FDQUMsR0FBRjJPLEVBQWtCOUUsS0FBSzBFLGNBQWV0UCxFQUFReU8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQTVCLEdBQWhCMU4sTUFBT3FHLElBQUFBLEtBRVZ3RCxLQUFLd0UsYUFBY3BQLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFuQixFQUNJNEssS0FBS2tFLGNBQWVoTyxFQUFRQyxFQUFRbU8sQ0FBaEIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQThCOUgsQ0FBbEQsR0FHRHJGLEVBQVkvQixFQUFaK0IsUUFFRDZJLEtBQUtrRSxjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZWhPLEVBRGRvTyxFQUFhbk4sRUFDZ0JoQixDQUFmLEVBQXdCcUcsQ0FBNUMsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBR0YsRUFDVCxJQVNRbkgsUUFBQSxTQUFTQyxHQUNmLE9BQU82SCxFQUFjNkMsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUsvSyxVQUFVSSxRQUFTQyxDQUF4QixDQUFBLENBQ3ZCLElBVVE2TixXQUFBLFNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FZL04sRUFBa0JWLEdBQzVCcVEsRUFBWTNQLEVBQVoyUCxRQUNGelAsRUFBTzBLLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFLL0ssVUFBVUksUUFBU1gsRUFBUSxRQUFVLE9BQVEsQ0FBQSxDQUFsRCxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTixPQUFBcVEsR0FBV3ZJLEVBQU11SSxFQUFTelAsS0FBWTRFLEVBQVU2SyxHQUFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFJQSxLQUFlLEtBQ3hGLElBU1EzQixlQUFBLFNBQWdCaE8sR0FDdEIsSUFBSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0UCxFQUFTLEdBUU4sT0FORmhGLEtBQUtpRixXQUFMLElBRUh4SSxFQURTdUksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFoRixLQUFLa0YsVUFBVzlQLENBQWhCLEVBQ08sc0JBQWhCLEVBQ1M0UCxVQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFBVCxNQUF1QmhGLEtBQUttRCxXQUFZL04sRUFBUyxDQUFBLENBQTFCLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2QixNQUFnRTRLLEtBQUttRCxXQUFZL04sRUFBUyxDQUFBLENBQTFCLEVBQWhFLEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUdKNFAsQ0FDVCxJQVNRRSxVQUFBLFNBQVc5UCxHQUNWLE9BQUFvSCxFQUFNcEgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVE0UCxNQUFkLENBQ1QsSUFTUXBCLGNBQUEsU0FBZXhPLEdBQ3JCLE9BQU9BLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRK1AsVUFDWCxHQUNBM0ksRUFBTXBILEVBQVFnUSxVQUFkLElBQWdDcEYsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUtpRixXQUFMLEVBQW9CLEdBQUtqRixLQUFLcUYsYUFBY2pRLENBQW5CLEVBQy9EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQVNRb08sZUFBQSxTQUFnQnBPLEdBQ3RCLE9BQU9vSCxFQUFNcEgsRUFBUWtRLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlQUNkdEYsS0FBS2lGLFdBQ0o3UCxFQUFBQSxFQUFRbVEsV0FBYSxHQUFLdkYsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUtxRixhQUFjalEsQ0FBbkIsRUFDNUI0SyxLQUFLa0YsVUFBVzlQLENBQWhCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VSLElBU1FpUSxhQUFBLFNBQWNqUSxHQUNkLElBQUF5TyxFQUFNckgsRUFBTXBILCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFReU8sR0FBUixFQUNYLE1BQUEsY0FBY0EsU0FBY0EsR0FBNUIsTUFBeUN6TywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUStCLFNBQVcsSUFBTTBNLFNBQWNBLEdBQWhGLEdBQ1QsSUFTUUosZUFBQSxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZ0JyTyxHQUNkb1EsRUFBZ0JwUSxFQUFoQm9RLFlBQ0QsT0FBQUEsRUFBQSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBa0IsRUFBSUEsRUFBaUIsRUFDaEQsSUFVUXRCLGNBQUEsU0FBZS9OLEVBQWVxRywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDcEMsTUFBV3JHLEdBQUFBLEVBQVVxRyxDQUN2QixJQVNRa0ksY0FBQSxTQUFlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZPLEdBQ2hCLE9BQUFpRSxFQUFVakUsQ0FBVixFQUdJLENBQUVBLE1BRk1zUCxXQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBWXRQLENBQUEsR0FBVyxFQUVkcUcsS0FEVHJHLEVBQU1ULFFBQVMsY0FBZSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOUIsR0FBc0MsSUFDOUMsRUFHRixDQUFFUyxNQUFBQSxFQUFPcUcsS0FBTSxJQUFmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUNULElBS1FzRixpQkFBQSxXQUF5QixJQUFBNEQsRUFBQTFGLEtBQ3ZCcUIsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWdCckIsS0FBSzVLLFFBQXJCaU0sWUFFUnJCLEtBQUtxQixZQUFZNUcsS0FBTSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBRSxVQUFXdUYsS0FBSzVLLFFBQXpDLEVBRUtpTSxHQUNLekYsRUFBQXlGLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FhLFNBQUVqTSxFQUFTWixHQUM5QmtSLEVBQUtyRSxZQUFZNUcsS0FBTSxDQUFFaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHLEVBQU8wSCxFQUFPQSxFQUFPLEdBQUl3SixFQUFLdFEsT0FBaEIsRUFBMkJBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEzQixFQUF2QyxDQUNBLENBRk0sQ0FJWixJQU9Rb1AsYUFBQSxTQUFjcFAsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BCLE1BQU8sQ0FBQyxDQUFFQSxFQUFTNEssS0FBSy9LLFVBQVVJLFFBQVMsWUFBeCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEVBQ3JCLElBT1F3TixPQUFBLFdBQ0MsTUd0ZFMsU0hzZFQ3QyxLQUFLNUssUUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVE0QixJQUN0QixJQU9RaU4sU0FBQSxTQUFVN08sR0FDWixHQUFrQixXQUFsQkEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVF1USxNQUFxQixDQUMxQixHQUFBM0YsS0FBSzZDLE9BQUwsRUFDSSxNQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLEVBR0osR0czZVUsVUgyZVY3QyxLQUFLNUssUUFBUTRCLEtBQ1QsTUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBRWdKLEtBQUs1SyxRQUFRMEMsU0FFMUIsQ0FFTyxNQUFBLENBQUEsQ0FDVCxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FPUW1OLFdBQUEsV0FDQyxPQUFBakYsS0FBSzVLLFFBQVFJLFlBQWNsQixDQUNwQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFPUXNSLGFBQUEsV0FDQSxJQUFFeFEsRUFBWTRLLEtBQVo1SyxRQUVELE1BQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQ0xrQixFQUNJQSxPQUFpQmxCLEVBQVE0QixLQUN6QlYsT0FBaUJsQixFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ksVUFDN0JKLEVBQVF5QyxNQUFZdkIsRUFBcEIsY0FDQWxCLEVBQVF5USxjQUFvQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2UCxFQUx2QixRQU1MTyxFQUNBLENBQUVtSixLQUFLa0IsT0FBTzRFLFFIaGhCVSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUdpaEJ4QnZLLE9BQVE2SSxPQVJILEVBUWE1RSxLQUFNLEdBUm5CLENBU1QsSUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1F1RyxXQUFBLFNBQVl2RCxHQUNsQixJQUFJd0QsRUFBTyxHQU1YLE9BSlFwSyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQTRHLEVBQU8sU0FBRXJNLEVBQU80RixHQUN0QmlLLEdBQVE3UCxFQUFRLElBQUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ0gsRUFBY3BCLENBQUEsRUFBbkIsS0FBK0I1RixFQUEvQixJQUEyQyxFQUMzRCxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FGTSxFQUlENlAsRUFBS2pGLEtBQVosQ0FDRixJQVNRNkIsWUFBQSxTQUFhM0MsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ25CLElBQUkwQyxFQUFRLEdBTVosT0FKUS9HLEVBQUFxRSxFQUFRLFNBQUU5SiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTzRGLEdBQ2Q0RyxPQUFLeEYsRUFBY3BCLENBQUEsRUFBbkIsSUFBOEI1RixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBOUIsR0FDVCxDQUZNLEVBSUR3TSxFQUFNNUIsS0FBYixDQUNGLElBT1FrRixhQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxXQUF1QixJQUFBQyxFQUFBbEcsS0FDWG1HLEVBQVFuRyxLQUFLa0IsT0FBdkInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckIsU0FFRCxPQUFBRyxLQUFLb0IsT0FBT2lCLElBQUssU0FBV0MsR0FDMUIsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsSUFBSzZELEVBQVMsSUFBQUQsRUFBS0gsV0FBWXpELEVBQVFFLEtBQXpCLE9BQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzQ0YsRUFBUUMsTUFBUSxTQUFTNEQsRUFBN0UsR0FDUCxDQUZLLEVBRUgzRyxLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTSxFQUZILENBR1QsSUFPUWlELE1BQUEsU0FBT0gsR0FDYixJQUFRckMsRUFBc0JxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsRUFBdEJyQyxPQUFzQnFDLEVBQUFBLEVBQWRDLEtBQUFBLGFBQU8sR0FBdkI2RCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFFS3BHLEtBQUs1SyxRQUFRcU4sT0FBV3pDLENBQUFBLEtBQUs1SyxRQUFRaVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQ2xDQyxFQUFNL0QsRUFBSzVNLE1BQU8sb0NBQVosSUFFQTJRLEVBQUssS0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JyRyxFQUFBc0csV0FBQSwrQkFBNkNELEVBQUssR0FBbEQsS0FHYixJQU9ReEQsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsU0FBZ0I3QixHQUtkLElBSkYsSUFBRWhKLEVBQVkrSCxLQUFLNUssUUFBakInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNkMsUUFDRnVPLEVBQVN4RyxLQUFLdUUsY0FBZCxFQUNBbkQsRUFBU0gsRUFBU2hMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFsQixFQUVFbUwsRUFBT2xDLE9BQVNzSCxHQUN0Qi9MLEVBQU0yRyxFQUFRQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBZCxFQUdGM0csRUFBTTJHLEVBQU9uTCxNQUFPLENBQUN1USxDQUFmLEVBQXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQjFLLFFBQTdCLEVBQXdDc0YsRUFBT25MLE1BQU8sRUFBR3VRLENBQWpCLENBQXhDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFtRWxNLFFBQVMsU0FBRWdJLEVBQVM3TSxHQUNyRixJQUFNK00sRUFBUXhHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRLEdBQUlzRyxFQUFRRSxNQUFPLENBQUVFLE1BQVdKLEVBQVFFLE1BQU1FLE0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFsQixJQUE2QnpLLEVBQVFFLEtBQTlDLENBQTNCLEVBQ1JBLEVBQVE2RCxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFJc0csRUFBUyxDQUFFRSxNQUFBQSxDQUFGLENBQWIsRUFDdEIvTSxFQUFRKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRLEVBQVF2RixFQUFTd0YsUUFBU3RPLENBQWxCLEVBQTRCOEksRUFBU3hHLEtBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEMsQ0FBZixDQUM1QyxDQUpGLENBS0YsSUFPUW9NLGNBQUEsV0FDRCxJQUNLblAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBREwsT0FBQTRLLEtBQUs2QyxPQUFMLEdBQ0t6TixFQUFZNEssS0FBWjVLLFNBRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLd00sUUFJRzdFLEVBQUFuRCxhQUFRb0csS0FBS3FCLFlBQVlnQixJQUFLLFNBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncUUsR0FBQSxPQUFBQSxFQUFBLEdBQTZCdlAsT0FBN0IsQ0FBdEIsQ0FBUixJQUNLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9CLEVBQVF1UixlQUFpQixHQUFNLEdBRy9DLENBQ1QsSUFPUUMsYUFBQSxXQUNOLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQUFJckUsRUFBTyxHQU9KLE9BTENBLGtCQUFnQnZDLEtBQUs1SyxRQUFRNkMsUUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVFaLE9BQXJDLE1BQ0EySSxLQUFLNkcsWUFBYSxDQUFBLENBQWxCLEVBQ0E3RyxLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSzZHLFlBQWEsQ0FBQSxDQUFsQixFQUNBLFFBR1YsSUFVUUEsWUFBQSxTQUFheCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPLEdBQ25CLElBQUF5TyxFQUEwQjlHLEtBQUs1SyxRQUF2QjZDLElBQUFBLFFBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUSxJQUFBQSxLQUNYK0osRUFBUSxDQUNaRSxNQUFlekssRUFBUUcsV0FBV0MsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09KLEVBQVFJLEtBQU9KLEVBQVFLLE1BQ2hFdEIsS0FBVyxTQUNYK1AsVUFBVzFPLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPSSxFQUFLSixLQUFPSSxFQUFLSCxJQUh2QixFQU1kLE1BQW1CLFdBQUEwSCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBSytGLFdBQVl2RCxDQUFqQixFQUFuQixpR0FFaUJ4QyxLQUFLNUssUUFBUTRSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxXbEN2cEJkLHlGa0NxcEJoQixxQkFLRixJQU9BekUsS0FBQSxXQUNRLElBQUEwRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBNkZqSCxLQUFLa0IsT0FBaEdnRyxJQUFBQSxVQUFXdEgsSUFBQUEsUUFBU3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSSxJQUFBQSxPQUFROFAsSUFBQUEsWUFBYUMsSUFBQUEsV0FBWUMsSUFBQUEsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1FDLElBQUFBLGFBQWNDLElBQUFBLFlBRS9FaEYsRUFBTyxHQWlDSixPQTlCQ0EsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRFJBLEdBQUEsWUFBcUJ2QyxLQUFLRCxHQUFnQixZQUFBQyxLQUFLNEYsYUFBTCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBeUJzQixLQUFBQSxHQUFhLElBQWhGLGlCQUNtQmxILEtBQUtGLE1BQU1PLFFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0QixZQUVIZ0gsSUFFSzlFLEVBRFJBLEdBQVErRSxHQUFnQixJQUNoQixnQ0FHVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvRSxHQUFRNEUsR0FBZSxHQUVsQjlQLElBQ0hrTCxHQUFRdkMsS0FBSzRHLGFBQWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBV0ZyRSxHQUhBQSxHQUpBQSxFQURRQSxFQUFBLCtCQUNSLElBQWEzQyxFQUFiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywyQkFFUUksS0FBS2lHLGFBQWIsR0FFQSxLQUFjckcsRUFBZCxNQUNRLFVBRUF3SCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBYyxJQUVqQkMsSUFFSDlFLEVBRFFBLEVBQUEsVUFDQWdGLEdBQWUsS0FHakInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEYsR0FBQSxRQUdWIn0nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLXJlbmRlcmVyLm1pbi5qcy5tYXAnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzE6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ2Z1bmN0aW9uIHIobix0KXtmb3IodmFyIGk9MDtpPHQubGVuZ3RoO2krKyl7dmFyIHI9dFsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaV07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsIicKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSJpbiByJiYoci53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Iua2V5LHIpfX1mdW5jdGlvbiBKdChuLHQsaSl7dCYmcihuLnByb3RvdHlwZSx0KSxpJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncihuLGkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJwcm90b3R5cGUiLHt3cml0YWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgYic6ITF9KX1cbi8qIVxuICogU3BsaWRlLmpzXG4gKiBWZXJzaW9uICA6IDQuMS40XG4gKiBMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ljZW5zZSAgOiBNSVRcbiAqIENvcHlyaWdodDogMjAyMiBOYW90b3NoaSBGdWppdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gKi9cbnZhciBuLHQ7bj10aGlzLHQ9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB2PSIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSIsRz00LHJuPTUscj17QycKICAgICAgICAgICAgICAgICAgICAgICAgYidSRUFURUQ6MSxNT1VOVEVEOjIsSURMRTozLE1PVklORzpHLFNDUk9MTElORzpybixEUkFHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dJTkc6NixERVNUUk9ZRUQ6N307ZnVuY3Rpb24gRChuKXtuLmxlbmd0aD0wfWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBvKG4sdCxpKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobix0LGkpfScKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBSKG4pe3JldHVybiBuLmJpbmQuYXBwbHkobixbbnVsbF0uY29uY2F0KG8oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ3VtZW50cywxKSkpfWZ1bmN0aW9uIG9uKCl7fXZhciBwPXNldFRpbWVvdXQ7ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGgobil7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShuKX1mdW5jdGlvbiB1KCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLHQpe3JldHVybiB0eXBlb2YgdD09PW59ZnVuY3Rpb24gdW4obil7cmV0dXJuIWMobikmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZ1KCJvYmplY3QiLG4pfXZhciBlPUFycmF5LmlzQXJyYXkseD1SKHUsImZ1bmN0aW9uIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEM9Uih1LCJzdHJpbmciKSxlbj1SKHUsInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGMobil7cicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBudWxsPT09bn1mdW5jdGlvbiBtKG4pe3RyeXtyZXR1cm4gbiBpbnN0YW5jZW9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvdykuSFRNTEVsZW1lbnR9Y2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoKG4pe3JldHVybiExfX1mdW5jdGlvbiB5KG4pe3JldHVybiBlKG4pP246W25dfWZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBnKG4sdCl7eShuKS5mb3JFYWNoKHQpfWZ1bmN0aW9uIGIobix0KXtyZXR1cm4tJwogICAgICAgICAgICAgICAgICAgICAgICBiJzE8bi5pbmRleE9mKHQpfWZ1bmN0aW9uIGsobix0KXtyZXR1cm4gbi5wdXNoLmFwcGx5KG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHkodCkpLG59ZnVuY3Rpb24gQSh0LG4saSl7dCYmZyhuLGZ1bmN0aW9uKG4pe24mJnQuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzTGlzdFtpPyJhZGQiOiJyZW1vdmUiXShuKX0pfWZ1bmN0aW9uIE0obix0KXtBKG4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ModCk/dC5zcGxpdCgiICIpOnQsITApfWZ1bmN0aW9uIEwobix0KXtnKHQsbi5hcHBlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2hpbGQuYmluZChuKSl9ZnVuY3Rpb24gTyhuLGkpe2cobixmdW5jdGlvbihuKXt2YXIgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9KGl8fG4pLnBhcmVudE5vZGU7dCYmdC5pbnNlcnRCZWZvcmUobixpKX0pfWZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjbihuLHQpe3JldHVybiBtKG4pJiYobi5tc01hdGNoZXNTZWxlY3Rvcnx8bi5tYXRjaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncykuY2FsbChuLHQpfWZ1bmN0aW9uIFMobix0KXtuPW4/byhuLmNoaWxkcmVuKTpbXTtyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHQ/bi5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIGNuKG4sdCl9KTpufWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBmbihuLHQpe3JldHVybiB0P1Mobix0KVswXTpuLmZpcnN0RWxlbWVudENoaWxkfXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgRT1PYmplY3Qua2V5cztmdW5jdGlvbiB3KHQsaSxuKXt0JiYobj9FKHQpLnJldmVycycKICAgICAgICAgICAgICAgICAgICAgICAgYidlKCk6RSh0KSkuZm9yRWFjaChmdW5jdGlvbihuKXsiX19wcm90b19fIiE9PW4mJmkodFtuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ10sbil9KX1mdW5jdGlvbiBhbihyKXtyZXR1cm4gbyhhcmd1bWVudHMsMSkuZm9yRWFjaCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24oaSl7dyhpLGZ1bmN0aW9uKG4sdCl7clt0XT1pW3RdfSl9KSxyfWZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBkKGkpe3JldHVybiBvKGFyZ3VtZW50cywxKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3coJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sZnVuY3Rpb24obix0KXtlKG4pP2lbdF09bi5zbGljZSgpOnVuKG4pP2lbdF09ZCh7fSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW4oaVt0XSk/aVt0XTp7fSxuKTppW3RdPW59KX0pLGl9ZnVuY3Rpb24gc24odCxuKXtnKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidufHxFKHQpLGZ1bmN0aW9uKG4pe2RlbGV0ZSB0W25dfSl9ZnVuY3Rpb24gUChuLGkpe2coJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sZnVuY3Rpb24odCl7ZyhpLGZ1bmN0aW9uKG4pe3QmJnQucmVtb3ZlQXR0cmlidXRlKG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKX0pfSl9ZnVuY3Rpb24gSShpLHQscil7dW4odCk/dyh0LGZ1bmN0aW9uKG4sdCl7SShpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0LG4pfSk6ZyhpLGZ1bmN0aW9uKG4pe2Mocil8fCIiPT09cj9QKG4sdCk6bi5zZXRBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKHQsU3RyaW5nKHIpKX0pfWZ1bmN0aW9uIGoobix0LGkpe249ZG9jdW1lbnQuY3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWF0ZUVsZW1lbnQobik7cmV0dXJuIHQmJihDKHQpP006SSkobix0KSxpJiZMKGksbiksbicKICAgICAgICAgICAgICAgICAgICAgICAgYid9ZnVuY3Rpb24gXyhuLHQsaSl7aWYoZW4oaSkpcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pW3RdO2MoaSl8fChuLnN0eWxlW3RdPSIiK2kpfWZ1bmN0aW9uIGxuKG4sdCl7XyhuLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzcGxheSIsdCl9ZnVuY3Rpb24gZG4obil7bi5zZXRBY3RpdmUmJm4uc2V0QWN0aXZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpfHxuLmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9ZnVuY3Rpb24geihuLHQpe3JldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gbi5nZXRBdHRyaWJ1dGUodCl9ZnVuY3Rpb24gdm4obix0KXtyZXR1cm4gbiYmbi5jbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NMaXN0LmNvbnRhaW5zKHQpfWZ1bmN0aW9uIE4obil7cmV0dXJuIG4uZ2V0Qm91bmRpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIFQobil7ZyhuLGZ1bmN0aW9uKG4pe24mJm4ucGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0pfWZ1bmN0aW9uIGhuKG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtyZXR1cm4gZm4oKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhuLCJ0ZXh0LycKICAgICAgICAgICAgICAgICAgICAgICAgYidodG1sIikuYm9keSl9ZnVuY3Rpb24gRihuLHQpe24ucHJldmVudERlZmF1bHQoKSx0JiYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uc3RvcFByb3BhZ2F0aW9uKCksbi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHBuKG4sdCl7cmV0dXJuIG4mJm4ucXVlcnlTZWxlY3Rvcih0KX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZ24obix0KXtyZXR1cm4gdD9vKG4ucXVlcnlTZWxlY3RvckFsbCh0KSk6W119ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIFgobix0KXtBKG4sdCwhMSl9ZnVuY3Rpb24gbW4obil7cmV0dXJuIG4udGltZVN0YW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncH1mdW5jdGlvbiBXKG4pe3JldHVybiBDKG4pP246bj9uKyJweCI6IiJ9dmFyIHluPSJzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlIixmPSJkYXRhLSIreW47ZnVuY3Rpb24gYm4obix0KXtpZighbil0aHJvdyBuZXcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Vycm9yKCJbIit5bisiXSAiKyh0fHwiIikpfXZhciBZPU1hdGgubWluLHduPU1hdGgubWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCx4bj1NYXRoLmZsb29yLGtuPU1hdGguY2VpbCxVPU1hdGguYWJzO2Z1bmN0aW9uIFNuKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLHQsaSl7cmV0dXJuIFUobi10KTxpfWZ1bmN0aW9uIEVuKG4sdCxpLHIpe3ZhciBvPVkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsaSksdD13bih0LGkpO3JldHVybiByP288biYmbjx0Om88PW4mJm48PXR9ZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHEobix0LGkpe3ZhciByPVkodCxpKSx0PXduKHQsaSk7cmV0dXJuIFkod24ocixuKSx0KScKICAgICAgICAgICAgICAgICAgICAgICAgYid9ZnVuY3Rpb24gTG4obil7cmV0dXJuKDA8biktKG48MCl9ZnVuY3Rpb24gT24odCxuKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGcobixmdW5jdGlvbihuKXt0PXQucmVwbGFjZSgiJXMiLCIiK24pfSksdH1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gQW4obil7cmV0dXJuIG48MTA/IjAiK246IiIrbn12YXIgX249e307ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHpuKCl7dmFyIGM9W107ZnVuY3Rpb24gaShuLGkscil7ZyhuLGZ1bmN0aW9uKHQpe3QmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZnKGksZnVuY3Rpb24obil7bi5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24obil7bj0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbi5zcGxpdCgiLiIpO3IodCxuWzBdLG5bMV0pfSl9KX0pfXJldHVybntiaW5kOmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihuLHQsdSxlKXtpKG4sdCxmdW5jdGlvbihuLHQsaSl7dmFyIHI9ImFkZEV2ZW50TGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmVyImluIG4sbz1yP24ucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKG4sdCx1LGUpOm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnJlbW92ZUxpc3RlbmVyLmJpbmQobix1KTtyP24uYWRkRXZlbnRMaXN0ZW5lcih0LHUsZScKICAgICAgICAgICAgICAgICAgICAgICAgYicpOm4uYWRkTGlzdGVuZXIodSksYy5wdXNoKFtuLHQsaSx1LG9dKX0pfSx1bmJpbmQ6ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKG4sdCxvKXtpKG4sdCxmdW5jdGlvbih0LGkscil7Yz1jLmZpbHRlcihmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24obil7cmV0dXJuISEoblswXSE9PXR8fG5bMV0hPT1pfHxuWzJdIT09cnx8byYmblszXScKICAgICAgICAgICAgICAgICAgICAgICAgYichPT1vKXx8KG5bNF0oKSwhMSl9KX0pfSxkaXNwYXRjaDpmdW5jdGlvbihuLHQsaSl7dmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBDdXN0b21FdmVudD9yPW5ldyBDdXN0b20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnQodCx7YnViYmxlczohMCxkZXRhaWw6aX0pOihyPWRvY3VtZW50LmNyZWF0ZUV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgiQ3VzdG9tRXZlbnQiKSkuaW5pdEN1c3RvbUV2ZW50KHQsITAsITEsaSksbi5kaXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hFdmVudChyKSxyfSxkZXN0cm95OmZ1bmN0aW9uKCl7Yy5mb3JFYWNoKGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbihuKXtuWzRdKCl9KSxEKGMpfX19dmFyIEI9Im1vdW50ZWQiLEg9Im1vdmUiLERuPSJtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZWQiLE1uPSJjbGljayIsUG49ImFjdGl2ZSIsSW49ImluYWN0aXZlIixSbj0idmlzaWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiLENuPSJoaWRkZW4iLEo9InJlZnJlc2giLEs9InVwZGF0ZWQiLGpuPSJyZXNpemUiLE4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbj0icmVzaXplZCIsVG49InNjcm9sbCIsVj0ic2Nyb2xsZWQiLGE9ImRlc3Ryb3kiLEduPScKICAgICAgICAgICAgICAgICAgICAgICAgYicibmF2aWdhdGlvbjptb3VudGVkIixGbj0iYXV0b3BsYXk6cGxheSIsWG49ImF1dG9wbGF5JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpwYXVzZSIsV249Imxhenlsb2FkOmxvYWRlZCIsWW49InNrIixVbj0ic2giO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBRKG4pe3ZhciBpPW4/bi5ldmVudC5idXM6ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ21lbnQoKSxyPXpuKCk7cmV0dXJuIG4mJm4uZXZlbnQub24oYSxyLmRlc3Ryb3kpLGFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhyLHtidXM6aSxvbjpmdW5jdGlvbihuLHQpe3IuYmluZChpLHkobikuam9pbigiICIpLGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbihuKXt0LmFwcGx5KHQsZShuLmRldGFpbCk/bi5kZXRhaWw6W10pfSl9LG9mZicKICAgICAgICAgICAgICAgICAgICAgICAgYic6UihyLnVuYmluZCxpKSxlbWl0OmZ1bmN0aW9uKG4pe3IuZGlzcGF0Y2goaSxuLG8oYXJnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VtZW50cywxKSl9fSl9ZnVuY3Rpb24gcW4odCxuLGkscil7dmFyIG8sdSxlPURhdGUubm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndyxjPTAsZj0hMCxhPTA7ZnVuY3Rpb24gcygpe2lmKCFmKXtpZihjPXQ/WSgoZSgpLW8pLycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LDEpOjEsaSYmaShjKSwxPD1jJiYobigpLG89ZSgpLHImJisrYT49cikpcmV0dXJuIGwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7dT1oKHMpfX1mdW5jdGlvbiBsKCl7Zj0hMH1mdW5jdGlvbiBkKCl7dSYmY2FuY2VsQW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW1hdGlvbkZyYW1lKHUpLGY9ISh1PWM9MCl9cmV0dXJue3N0YXJ0OmZ1bmN0aW9uKG4peycKICAgICAgICAgICAgICAgICAgICAgICAgYidufHxkKCksbz1lKCktKG4/Yyp0OjApLGY9ITEsdT1oKHMpfSxyZXdpbmQ6ZnVuY3Rpb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7bz1lKCksYz0wLGkmJmkoYyl9LHBhdXNlOmwsY2FuY2VsOmQsc2V0OmZ1bmN0aW9uKG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXt0PW59LGlzUGF1c2VkOmZ1bmN0aW9uKCl7cmV0dXJuIGZ9fX1mdW5jdGlvbiBzKG4peycKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgdD1uO3JldHVybntzZXQ6ZnVuY3Rpb24obil7dD1ufSxpczpmdW5jdGlvbihuKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGIoeShuKSx0KX19fXZhciBuPSJBcnJvdyIsQm49bisiTGVmdCIsSG49bisiUmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0Iix0PW4rIlVwIixuPW4rIkRvd24iLEpuPSJ0dGIiLGw9e3dpZHRoOlsiaGVpZ2h0IicKICAgICAgICAgICAgICAgICAgICAgICAgYiddLGxlZnQ6WyJ0b3AiLCJyaWdodCJdLHJpZ2h0OlsiYm90dG9tIiwibGVmdCJdLHg6WyJ5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyJdLFg6WyJZIl0sWTpbIlgiXSxBcnJvd0xlZnQ6W3QsSG5dLEFycm93UmlnaHQ6W24sQm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXX07dmFyIFo9InJvbGUiLCQ9InRhYmluZGV4IixpPSJhcmlhLSIsS249aSsiY29udHJvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzIixWbj1pKyJjdXJyZW50IixRbj1pKyJzZWxlY3RlZCIsbm49aSsibGFiZWwiLFpuPWkrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJsYWJlbGxlZGJ5Iiwkbj1pKyJoaWRkZW4iLG50PWkrIm9yaWVudGF0aW9uIix0dD1pKyInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9sZWRlc2NyaXB0aW9uIixpdD1pKyJsaXZlIixydD1pKyJidXN5IixvdD1pKyJhdG9taScKICAgICAgICAgICAgICAgICAgICAgICAgYidjIix1dD1bWiwkLCJkaXNhYmxlZCIsS24sVm4sbm4sWm4sJG4sbnQsdHRdLGk9eW4rIl9fJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsZXQ9eW4sY3Q9aSsidHJhY2siLGZ0PWkrImxpc3QiLGF0PWkrInNsaWRlIixzdD1hdCsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIi0tY2xvbmUiLGx0PWF0KyJfX2NvbnRhaW5lciIsZHQ9aSsiYXJyb3dzIix2dD1pKyJhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3ciLGh0PXZ0KyItLXByZXYiLHB0PXZ0KyItLW5leHQiLGd0PWkrInBhZ2luYXRpb24iJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxtdD1ndCsiX19wYWdlIix5dD1pKyJwcm9ncmVzcyIrIl9fYmFyIixidD1pKyJ0b2dnbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIix3dD1pKyJzciIsdG49ImlzLWFjdGl2ZSIseHQ9ImlzLXByZXYiLGt0PSJpcy1uZXh0IicKICAgICAgICAgICAgICAgICAgICAgICAgYicsU3Q9ImlzLXZpc2libGUiLEV0PSJpcy1sb2FkaW5nIixMdD0iaXMtZm9jdXMtaW4iLE90JwogICAgICAgICAgICAgICAgICAgICAgICBiJz0iaXMtb3ZlcmZsb3ciLEF0PVt0bixTdCx4dCxrdCxFdCxMdCxPdF07dmFyIF90PSJ0b3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2hzdGFydCBtb3VzZWRvd24iLHp0PSJ0b3VjaG1vdmUgbW91c2Vtb3ZlIixEdD0idG91YycKICAgICAgICAgICAgICAgICAgICAgICAgYidoZW5kIHRvdWNoY2FuY2VsIG1vdXNldXAgY2xpY2siO3ZhciBNdD0ic2xpZGUiLFB0PSJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29vcCIsSXQ9ImZhZGUiO2Z1bmN0aW9uIFJ0KG8scix0LHUpe3ZhciBlLG49UShvKSxpPW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm9uLGM9bi5lbWl0LGY9bi5iaW5kLGE9by5Db21wb25lbnRzLHM9by5yb290LGw9by5vcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucyxkPWwuaXNOYXZpZ2F0aW9uLHY9bC51cGRhdGVPbk1vdmUsaD1sLmkxOG4scD1sJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5wYWdpbmF0aW9uLGc9bC5zbGlkZUZvY3VzLG09YS5EaXJlY3Rpb24ucmVzb2x2ZSx5PXonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHUsInN0eWxlIiksYj16KHUsbm4pLHc9LTE8dCx4PWZuKHUsIi4iK2x0KTtmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaygpe3ZhciBuPW8uc3BsaWRlcy5tYXAoZnVuY3Rpb24obil7bj1uLnNwbGlkZS5Db21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50cy5TbGlkZXMuZ2V0QXQocik7cmV0dXJuIG4/bi5zbGlkZS5pZDoiIn0pLmpvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCIgIik7SSh1LG5uLE9uKGguc2xpZGVYLCh3P3Q6cikrMSkpLEkodSxLbixuKSxJKHUsWicKICAgICAgICAgICAgICAgICAgICAgICAgYicsZz8iYnV0dG9uIjoiIiksZyYmUCh1LHR0KX1mdW5jdGlvbiBTKCl7ZXx8RSgpfWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBFKCl7dmFyIG4sdCxpO2V8fChuPW8uaW5kZXgsKGk9TCgpKSE9PXZuKHUsdG4pJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKEEodSx0bixpKSxJKHUsVm4sZCYmaXx8IiIpLGMoaT9QbjpJbixPKSksaT1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicoKXtpZihvLmlzKEl0KSlyZXR1cm4gTCgpO3ZhciBuPU4oYS5FbGVtZW50cy50cmFjayksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q9Tih1KSxpPW0oImxlZnQiLCEwKSxyPW0oInJpZ2h0IiwhMCk7cmV0dXJuIHhuKG5baV0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTw9a24odFtpXSkmJnhuKHRbcl0pPD1rbihuW3JdKX0oKSx0PSFpJiYoIUwoKXx8dyksbycKICAgICAgICAgICAgICAgICAgICAgICAgYicuc3RhdGUuaXMoW0cscm5dKXx8SSh1LCRuLHR8fCIiKSxJKGduKHUsbC5mb2N1c2FibGVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29kZXN8fCIiKSwkLHQ/LTE6IiIpLGcmJkkodSwkLHQ/LTE6MCksaSE9PXZuKHUsU3QpJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKEEodSxTdCxpKSxjKGk/Um46Q24sTykpLGl8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPScKICAgICAgICAgICAgICAgICAgICAgICAgYic9dXx8KHQ9YS5TbGlkZXMuZ2V0QXQoby5pbmRleCkpJiZkbih0LnNsaWRlKSxBKHUseHQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9PT1uLTEpLEEodSxrdCxyPT09bisxKSl9ZnVuY3Rpb24gTCgpe3ZhciBuPW8uaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO3JldHVybiBuPT09cnx8bC5jbG9uZVN0YXR1cyYmbj09PXR9dmFyIE89e2luZGV4OnIscycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlSW5kZXg6dCxzbGlkZTp1LGNvbnRhaW5lcjp4LGlzQ2xvbmU6dyxtb3VudDpmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24oKXt3fHwodS5pZD1zLmlkKyItc2xpZGUiK0FuKHIrMSksSSh1LFoscD8idGFicGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVsIjoiZ3JvdXAiKSxJKHUsdHQsaC5zbGlkZSksSSh1LG5uLGJ8fE9uKGguc2xpZGVMYScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZWwsW3IrMSxvLmxlbmd0aF0pKSksZih1LCJjbGljayIsUihjLE1uLE8pKSxmKHUsImtlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lkb3duIixSKGMsWW4sTykpLGkoW0RuLFVuLFZdLEUpLGkoR24sayksdiYmaShILFMpfSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveTpmdW5jdGlvbigpe2U9ITAsbi5kZXN0cm95KCksWCh1LEF0KSxQKHUsdXQpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJKHUsInN0eWxlIix5KSxJKHUsbm4sYnx8IiIpfSx1cGRhdGU6RSxzdHlsZTpmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24obix0LGkpe18oaSYmeHx8dSxuLHQpfSxpc1dpdGhpbjpmdW5jdGlvbihuLHQpe3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gbj1VKG4tciksKG49d3x8IWwucmV3aW5kJiYhby5pcyhQdCk/bjpZKG4sby5sZW5ndCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoLW4pKTw9dH19O3JldHVybiBPfXZhciBDdD1mKyItaW50ZXJ2YWwiO3ZhciBqdD17cGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdmU6ITEsY2FwdHVyZTohMH07dmFyIE50PXtTcGFjZWJhcjoiICIsUmlnaHQ6SG4sTGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnQ6Qm4sVXA6dCxEb3duOm59O2Z1bmN0aW9uIFR0KG4pe3JldHVybiBuPUMobik/bjpuLicKICAgICAgICAgICAgICAgICAgICAgICAgYidrZXksTnRbbl18fG59dmFyIEd0PSJrZXlkb3duIjt2YXIgRnQ9ZisiLWxhenkiLFh0PUZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiJysiLXNyY3NldCIsV3Q9IlsiK0Z0KyJdLCBbIitYdCsiXSI7dmFyIFl0PVsiICIsIkVudGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciJdO3ZhciBVdD1PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxNZWRpYTpmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24ocixuLG8pe3ZhciB1PXIuc3RhdGUsdD1vLmJyZWFrcG9pbnRzfHx7fSxlPW8ucmVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VjZWRNb3Rpb258fHt9LGk9em4oKSxjPVtdO2Z1bmN0aW9uIGYobil7biYmaS5kZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpfWZ1bmN0aW9uIGEobix0KXt0PW1hdGNoTWVkaWEodCk7aS5iaW5kKHQsImNoYW5nZScKICAgICAgICAgICAgICAgICAgICAgICAgYiciLHMpLGMucHVzaChbbix0XSl9ZnVuY3Rpb24gcygpe3ZhciBuPXUuaXMoNyksdD1vLmRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlY3Rpb24saT1jLnJlZHVjZShmdW5jdGlvbihuLHQpe3JldHVybiBkKG4sdFsxXS5tYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2hlcz90WzBdOnt9KX0se30pO3NuKG8pLGwoaSksby5kZXN0cm95P3IuZGVzdHJveSgiYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBsZXRlbHkiPT09by5kZXN0cm95KTpuPyhmKCEwKSxyLm1vdW50KCkpOnQhPT1vLmRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlY3Rpb24mJnIucmVmcmVzaCgpfWZ1bmN0aW9uIGwobix0LGkpe2QobyxuKSx0JiZkKE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3QuZ2V0UHJvdG90eXBlT2YobyksbiksIWkmJnUuaXMoMSl8fHIuZW1pdChLLG8pfScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm57c2V0dXA6ZnVuY3Rpb24oKXt2YXIgaT0ibWluIj09PW8ubWVkaWFRdWVyeTtFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0KS5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGk/K24tK3Q6K3QtK259KS5mb3JFYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaChmdW5jdGlvbihuKXthKHRbbl0sIigiKyhpPyJtaW4iOiJtYXgiKSsiLXdpZHRoOiIrbicKICAgICAgICAgICAgICAgICAgICAgICAgYicrInB4KSIpfSksYShlLHYpLHMoKX0sZGVzdHJveTpmLHJlZHVjZTpmdW5jdGlvbihuKXttJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hNZWRpYSh2KS5tYXRjaGVzJiYobj9kKG8sZSk6c24obyxFKGUpKSl9LHNldDpsfX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLERpcmVjdGlvbjpmdW5jdGlvbihuLHQsbyl7cmV0dXJue3Jlc29sdmU6ZnVuY3Rpb24obicKICAgICAgICAgICAgICAgICAgICAgICAgYicsdCxpKXt2YXIgcj0icnRsIiE9PShpPWl8fG8uZGlyZWN0aW9uKXx8dD9pPT09Sm4/MDotJwogICAgICAgICAgICAgICAgICAgICAgICBiJzE6MTtyZXR1cm4gbFtuXSYmbFtuXVtyXXx8bi5yZXBsYWNlKC93aWR0aHxsZWZ0fHJpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC9pLGZ1bmN0aW9uKG4sdCl7bj1sW24udG9Mb3dlckNhc2UoKV1bcl18fG47cmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicwPHQ/bi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStuLnNsaWNlKDEpOm59KX0sb3JpZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpmdW5jdGlvbihuKXtyZXR1cm4gbiooInJ0bCI9PT1vLmRpcmVjdGlvbj8xOi0xKX19fSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWxlbWVudHM6ZnVuY3Rpb24obix0LGkpe3ZhciByLG8sdSxlPVEobiksYz1lLm9uLGY9ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuYmluZCxhPW4ucm9vdCxzPWkuaTE4bixsPXt9LGQ9W10sdj1bXSxoPVtdO2Z1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwKCl7cj15KCIuIitjdCksbz1mbihyLCIuIitmdCksYm4ociYmbywiQSB0cmFjay9saXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBlbGVtZW50IGlzIG1pc3NpbmcuIiksayhkLFMobywiLiIrYXQrIjpub3QoLiIrc3QrIicKICAgICAgICAgICAgICAgICAgICAgICAgYicpIikpLHcoe2Fycm93czpkdCxwYWdpbmF0aW9uOmd0LHByZXY6aHQsbmV4dDpwdCxiYXI6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3l0LHRvZ2dsZTpidH0sZnVuY3Rpb24obix0KXtsW3RdPXkoIi4iK24pfSksYW4obCx7cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3Q6YSx0cmFjazpyLGxpc3Q6byxzbGlkZXM6ZH0pO3ZhciBuPWEuaWR8fGZ1bmN0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduKXtyZXR1cm4iIituK0FuKF9uW25dPShfbltuXXx8MCkrMSl9KHluKSx0PWkucm9sZTthJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5pZD1uLHIuaWQ9ci5pZHx8bisiLXRyYWNrIixvLmlkPW8uaWR8fG4rIi1saXN0IiwheignCiAgICAgICAgICAgICAgICAgICAgICAgIGInYSxaKSYmIlNFQ1RJT04iIT09YS50YWdOYW1lJiZ0JiZJKGEsWix0KSxJKGEsdHQscy5jYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3VzZWwpLEkobyxaLCJwcmVzZW50YXRpb24iKSxtKCl9ZnVuY3Rpb24gZyhuKXt2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q9dXQuY29uY2F0KCJzdHlsZSIpO0QoZCksWChhLHYpLFgocixoKSxQKFtyLG9dLHQpLFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGEsbj90Olsic3R5bGUiLHR0XSl9ZnVuY3Rpb24gbSgpe1goYSx2KSxYKHIsaCksdj1iKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidldCksaD1iKGN0KSxNKGEsdiksTShyLGgpLEkoYSxubixpLmxhYmVsKSxJKGEsWm4saS5sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FiZWxsZWRieSl9ZnVuY3Rpb24geShuKXtuPXBuKGEsbik7cmV0dXJuIG4mJmZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbihuLHQpe2lmKHgobi5jbG9zZXN0KSlyZXR1cm4gbi5jbG9zZXN0KHQpO2Zvcih2YXIgaScKICAgICAgICAgICAgICAgICAgICAgICAgYic9bjtpJiYxPT09aS5ub2RlVHlwZSYmIWNuKGksdCk7KWk9aS5wYXJlbnRFbGVtZW50O3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gaX0obiwiLiIrZXQpPT09YT9uOnZvaWQgMH1mdW5jdGlvbiBiKG4pe3JldHVyblsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbisiLS0iK2kudHlwZSxuKyItLSIraS5kaXJlY3Rpb24saS5kcmFnJiZuKyItLWRyYWdnYScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGUiLGkuaXNOYXZpZ2F0aW9uJiZuKyItLW5hdiIsbj09PWV0JiZ0bl19cmV0dXJuIGFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhsLHtzZXR1cDpwLG1vdW50OmZ1bmN0aW9uKCl7YyhKLGcpLGMoSixwKSxjKEssbSksZignCiAgICAgICAgICAgICAgICAgICAgICAgIGInZG9jdW1lbnQsX3QrIiBrZXlkb3duIixmdW5jdGlvbihuKXt1PSJrZXlkb3duIj09PW4udCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5cGV9LHtjYXB0dXJlOiEwfSksZihhLCJmb2N1c2luIixmdW5jdGlvbigpe0EoYSxMdCwhJwogICAgICAgICAgICAgICAgICAgICAgICBiJyF1KX0pfSxkZXN0cm95Omd9KX0sU2xpZGVzOmZ1bmN0aW9uKHIsbyx1KXt2YXIgbj1RKHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSx0PW4ub24sZT1uLmVtaXQsYz1uLmJpbmQsZj0obj1vLkVsZW1lbnRzKS5zbGlkZXMsYScKICAgICAgICAgICAgICAgICAgICAgICAgYic9bi5saXN0LHM9W107ZnVuY3Rpb24gaSgpe2YuZm9yRWFjaChmdW5jdGlvbihuLHQpe2QoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sdCwtMSl9KX1mdW5jdGlvbiBsKCl7aChmdW5jdGlvbihuKXtuLmRlc3Ryb3koKX0pLEQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHMpfWZ1bmN0aW9uIGQobix0LGkpe3Q9UnQocix0LGksbik7dC5tb3VudCgpLHMucHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicodCkscy5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIG4uaW5kZXgtdC5pbmRleH0pfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiB2KG4pe3JldHVybiBuP3AoZnVuY3Rpb24obil7cmV0dXJuIW4uaXNDbG9uZX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTpzfWZ1bmN0aW9uIGgobix0KXt2KHQpLmZvckVhY2gobil9ZnVuY3Rpb24gcCh0KXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHMuZmlsdGVyKHgodCk/dDpmdW5jdGlvbihuKXtyZXR1cm4gQyh0KT9jbihuLnNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSx0KTpiKHkodCksbi5pbmRleCl9KX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKXtpKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHQoSixsKSx0KEosaSl9LGRlc3Ryb3k6bCx1cGRhdGU6ZnVuY3Rpb24oKXtoKGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihuKXtuLnVwZGF0ZSgpfSl9LHJlZ2lzdGVyOmQsZ2V0OnYsZ2V0SW46ZnVuY3Rpb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pe3ZhciB0PW8uQ29udHJvbGxlcixpPXQudG9JbmRleChuKSxyPXQuaGFzRm9jdXMoKT8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMTp1LnBlclBhZ2U7cmV0dXJuIHAoZnVuY3Rpb24obil7cmV0dXJuIEVuKG4uaW5kZXgsaScKICAgICAgICAgICAgICAgICAgICAgICAgYicsaStyLTEpfSl9LGdldEF0OmZ1bmN0aW9uKG4pe3JldHVybiBwKG4pWzBdfSxhZGQ6ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKG4sbyl7ZyhuLGZ1bmN0aW9uKG4pe3ZhciB0LGkscjttKG49QyhuKT9obihuKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInbikmJigodD1mW29dKT9PKG4sdCk6TChhLG4pLE0obix1LmNsYXNzZXMuc2xpZGUpLHQ9bicKICAgICAgICAgICAgICAgICAgICAgICAgYicsaT1SKGUsam4pLHQ9Z24odCwiaW1nIiksKHI9dC5sZW5ndGgpP3QuZm9yRWFjaChmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24obil7YyhuLCJsb2FkIGVycm9yIixmdW5jdGlvbigpey0tcnx8aSgpfSl9KTppKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKX0pLGUoSil9LHJlbW92ZTpmdW5jdGlvbihuKXtUKHAobikubWFwKGZ1bmN0aW9uKG4peycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gbi5zbGlkZX0pKSxlKEopfSxmb3JFYWNoOmgsZmlsdGVyOnAsc3R5bGU6ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKHQsaSxyKXtoKGZ1bmN0aW9uKG4pe24uc3R5bGUodCxpLHIpfSl9LGdldExlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGg6ZnVuY3Rpb24obil7cmV0dXJuKG4/ZjpzKS5sZW5ndGh9LGlzRW5vdWdoOmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbigpe3JldHVybiBzLmxlbmd0aD51LnBlclBhZ2V9fX0sTGF5b3V0OmZ1bmN0aW9uKHQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24saSl7dmFyIHIsbyx1LGU9KGE9USh0KSkub24sYz1hLmJpbmQsZj1hLmVtaXQsYT1uLlMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMscz1uLkRpcmVjdGlvbi5yZXNvbHZlLGw9KG49bi5FbGVtZW50cykucm9vdCxkPScKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnRyYWNrLHY9bi5saXN0LGg9YS5nZXRBdCxwPWEuc3R5bGU7ZnVuY3Rpb24gZygpe3I9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2kuZGlyZWN0aW9uPT09Sm4sXyhsLCJtYXhXaWR0aCIsVyhpLndpZHRoKSksXyhkLHMoInAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkaW5nTGVmdCIpLHkoITEpKSxfKGQscygicGFkZGluZ1JpZ2h0IikseSghMCkpLG0oIScKICAgICAgICAgICAgICAgICAgICAgICAgYicwKX1mdW5jdGlvbiBtKG4pe3ZhciB0PU4obCk7IW4mJm8ud2lkdGg9PT10LndpZHRoJiZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5oZWlnaHQ9PT10LmhlaWdodHx8KF8oZCwiaGVpZ2h0IixmdW5jdGlvbigpe3ZhciBuPSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtyJiYoYm4obj1iKCksImhlaWdodCBvciBoZWlnaHRSYXRpbyBpcyBtaXNzaW5nLiIpLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduPSJjYWxjKCIrbisiIC0gIit5KCExKSsiIC0gIit5KCEwKSsiKSIpO3JldHVybiBufSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykscChzKCJtYXJnaW5SaWdodCIpLFcoaS5nYXApKSxwKCJ3aWR0aCIsaS5hdXRvV2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInP251bGw6VyhpLmZpeGVkV2lkdGgpfHwocj8iIjp3KCkpKSxwKCJoZWlnaHQiLFcoaS5maScKICAgICAgICAgICAgICAgICAgICAgICAgYid4ZWRIZWlnaHQpfHwocj9pLmF1dG9IZWlnaHQ/bnVsbDp3KCk6YigpKSwhMCksbz10LGYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05uKSx1IT09KHU9TygpKSYmKEEobCxPdCx1KSxmKCJvdmVyZmxvdyIsdSkpKX1mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24geShuKXt2YXIgdD1pLnBhZGRpbmcsbj1zKG4/InJpZ2h0IjoibGVmdCIpO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdCYmVyh0W25dfHwodW4odCk/MDp0KSl8fCIwcHgifWZ1bmN0aW9uIGIoKXtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1coaS5oZWlnaHR8fE4odikud2lkdGgqaS5oZWlnaHRSYXRpbyl9ZnVuY3Rpb24gdygpe3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgbj1XKGkuZ2FwKTtyZXR1cm4iY2FsYygoMTAwJSIrKG4mJiIgKyAiK24pKyIpLyIrKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpLnBlclBhZ2V8fDEpKyhuJiYiIC0gIituKSsiKSJ9ZnVuY3Rpb24geCgpe3JldHVybiBOJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh2KVtzKCJ3aWR0aCIpXX1mdW5jdGlvbiBrKG4sdCl7bj1oKG58fDApO3JldHVybiBuP04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG4uc2xpZGUpW3MoIndpZHRoIildKyh0PzA6TCgpKTowfWZ1bmN0aW9uIFMobix0KXt2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGksbj1oKG4pO3JldHVybiBuPyhuPU4obi5zbGlkZSlbcygicmlnaHQiKV0saT1OKHYpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tzKCJsZWZ0IildLFUobi1pKSsodD8wOkwoKSkpOjB9ZnVuY3Rpb24gRShuKXtyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFModC5sZW5ndGgtMSktUygwKStrKDAsbil9ZnVuY3Rpb24gTCgpe3ZhciBuPWgoMCk7cicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBuJiZwYXJzZUZsb2F0KF8obi5zbGlkZSxzKCJtYXJnaW5SaWdodCIpKSl8fDB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIE8oKXtyZXR1cm4gdC5pcyhJdCl8fEUoITApPngoKX1yZXR1cm57bW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOmZ1bmN0aW9uKCl7dmFyIG4sdCxpO2coKSxjKHdpbmRvdywicmVzaXplIGxvYWQiLChuPScKICAgICAgICAgICAgICAgICAgICAgICAgYidSKGYsam4pLGk9cW4odHx8MCxuLG51bGwsMSksZnVuY3Rpb24oKXtpLmlzUGF1c2VkKCkmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZpLnN0YXJ0KCl9KSksZShbSyxKXSxnKSxlKGpuLG0pfSxyZXNpemU6bSxsaXN0U2l6ZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCxzbGlkZVNpemU6ayxzbGlkZXJTaXplOkUsdG90YWxTaXplOlMsZ2V0UGFkZGluZzpmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24obil7cmV0dXJuIHBhcnNlRmxvYXQoXyhkLHMoInBhZGRpbmciKyhuPyJSaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiOiJMZWZ0IikpKSl8fDB9LGlzT3ZlcmZsb3c6T319LENsb25lczpmdW5jdGlvbihjLGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGYpe3ZhciB0LHI9UShjKSxuPXIub24sYT1pLkVsZW1lbnRzLHM9aS5TbGlkZXMsbz1pLicKICAgICAgICAgICAgICAgICAgICAgICAgYidEaXJlY3Rpb24ucmVzb2x2ZSxsPVtdO2Z1bmN0aW9uIHUoKXtpZihuKEosZCksbihbSyxqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25dLHYpLHQ9aCgpKXt2YXIgbz10LHU9cy5nZXQoKS5zbGljZSgpLGU9dS5sZW5ndGg7aWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGUpe2Zvcig7dS5sZW5ndGg8bzspayh1LHUpO2sodS5zbGljZSgtbyksdS5zbGljZSgwLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvKSkuZm9yRWFjaChmdW5jdGlvbihuLHQpe3ZhciBpPXQ8byxyPWZ1bmN0aW9uKG4sdCl7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ249bi5jbG9uZU5vZGUoITApO3JldHVybiBNKG4sZi5jbGFzc2VzLmNsb25lKSxuLmlkPWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnJvb3QuaWQrIi1jbG9uZSIrQW4odCsxKSxufShuLnNsaWRlLHQpO2k/TyhyLHVbMF0ucycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlKTpMKGEubGlzdCxyKSxrKGwscikscy5yZWdpc3RlcihyLHQtbysoaT8wOmUpLG4uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4KX0pfWkuTGF5b3V0LnJlc2l6ZSghMCl9fWZ1bmN0aW9uIGQoKXtlKCksdSgpfWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBlKCl7VChsKSxEKGwpLHIuZGVzdHJveSgpfWZ1bmN0aW9uIHYoKXt2YXIgbicKICAgICAgICAgICAgICAgICAgICAgICAgYic9aCgpO3QhPT1uJiYodDxufHwhbikmJnIuZW1pdChKKX1mdW5jdGlvbiBoKCl7dmFyIG4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q9Zi5jbG9uZXM7cmV0dXJuIGMuaXMoUHQpP2VuKHQpJiYodD0obj1mW28oImZpeGVkV2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoIildJiZpLkxheW91dC5zbGlkZVNpemUoMCkpJiZrbihOKGEudHJhY2spW28oIndpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aCIpXS9uKXx8ZltvKCJhdXRvV2lkdGgiKV0mJmMubGVuZ3RofHwyKmYucGVyUGFnZSk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q9MCx0fXJldHVybnttb3VudDp1LGRlc3Ryb3k6ZX19LE1vdmU6ZnVuY3Rpb24ocixjLG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXt2YXIgZSxuPVEociksdD1uLm9uLGY9bi5lbWl0LGE9ci5zdGF0ZS5zZXQsdT0obj1jLicKICAgICAgICAgICAgICAgICAgICAgICAgYidMYXlvdXQpLnNsaWRlU2l6ZSxpPW4uZ2V0UGFkZGluZyxzPW4udG90YWxTaXplLGw9bi5sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdFNpemUsZD1uLnNsaWRlclNpemUsdj0obj1jLkRpcmVjdGlvbikucmVzb2x2ZSxoPW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm9yaWVudCxwPShuPWMuRWxlbWVudHMpLmxpc3QsZz1uLnRyYWNrO2Z1bmN0aW9uIG0oKScKICAgICAgICAgICAgICAgICAgICAgICAgYid7Yy5Db250cm9sbGVyLmlzQnVzeSgpfHwoYy5TY3JvbGwuY2FuY2VsKCkseShyLmluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyksYy5TbGlkZXMudXBkYXRlKCkpfWZ1bmN0aW9uIHkobil7YihTKG4sITApKX1mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gYihuLHQpe3IuaXMoSXQpfHwodD10P246ZnVuY3Rpb24obil7e3ZhciB0LGk7ci5pcycKICAgICAgICAgICAgICAgICAgICAgICAgYicoUHQpJiYodD1rKG4pLGk9dD5jLkNvbnRyb2xsZXIuZ2V0RW5kKCksKHQ8MHx8aSkmJihuJwogICAgICAgICAgICAgICAgICAgICAgICBiJz13KG4saSkpKX1yZXR1cm4gbn0obiksXyhwLCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGUiK3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCJYIikrIigiK3QrInB4KSIpLG4hPT10JiZmKFVuKSl9ZnVuY3Rpb24gdyhuLHQpe3ZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaT1uLUwodCkscj1kKCk7cmV0dXJuIG4tPWgociooa24oVShpKS9yKXx8MSkpKih0PzE6JwogICAgICAgICAgICAgICAgICAgICAgICBiJy0xKX1mdW5jdGlvbiB4KCl7YihFKCksITApLGUuY2FuY2VsKCl9ZnVuY3Rpb24gayhuKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yKHZhciB0PWMuU2xpZGVzLmdldCgpLGk9MCxyPTEvMCxvPTA7bzx0Lmxlbmd0aDtvKycKICAgICAgICAgICAgICAgICAgICAgICAgYicrKXt2YXIgdT10W29dLmluZGV4LGU9VShTKHUsITApLW4pO2lmKCEoZTw9cikpYnJlYWs7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3I9ZSxpPXV9cmV0dXJuIGl9ZnVuY3Rpb24gUyhuLHQpe3ZhciBpPWgocyhuLTEpLShuPW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJjZW50ZXIiPT09KGk9by5mb2N1cyk/KGwoKS11KG4sITApKS8yOitpKnUobil8fDApKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7cmV0dXJuIHQ/KG49aSxuPW8udHJpbVNwYWNlJiZyLmlzKE10KT9xKG4sMCxoKGQoITApJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1sKCkpKTpuKTppfWZ1bmN0aW9uIEUoKXt2YXIgbj12KCJsZWZ0Iik7cmV0dXJuIE4ocCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInW25dLU4oZylbbl0raChpKCExKSl9ZnVuY3Rpb24gTChuKXtyZXR1cm4gUyhuP2MuQ29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb2xsZXIuZ2V0RW5kKCk6MCwhIW8udHJpbVNwYWNlKX1yZXR1cm57bW91bnQ6ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKCl7ZT1jLlRyYW5zaXRpb24sdChbQixObixLLEpdLG0pfSxtb3ZlOmZ1bmN0aW9uKG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHQsaSxyKXt2YXIgbyx1O24hPT10JiYobz1pPG4sdT1oKHcoRSgpLG8pKSxvPzA8PXU6dScKICAgICAgICAgICAgICAgICAgICAgICAgYic8PXBbdigic2Nyb2xsV2lkdGgiKV0tTihnKVt2KCJ3aWR0aCIpXSkmJih4KCksYih3KEUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksaTxuKSwhMCkpLGEoRyksZihILHQsaSxuKSxlLnN0YXJ0KHQsZnVuY3Rpb24oKXthKDMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSxmKERuLHQsaSxuKSxyJiZyKCl9KX0sanVtcDp5LHRyYW5zbGF0ZTpiLHNoaWZ0OncsYycKICAgICAgICAgICAgICAgICAgICAgICAgYidhbmNlbDp4LHRvSW5kZXg6ayx0b1Bvc2l0aW9uOlMsZ2V0UG9zaXRpb246RSxnZXRMaW1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6TCxleGNlZWRlZExpbWl0OmZ1bmN0aW9uKG4sdCl7dD1lbih0KT9FKCk6dDt2YXIgaT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInITAhPT1uJiZoKHQpPGgoTCghMSkpLG49ITEhPT1uJiZoKHQpPmgoTCghMCkpO3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaXx8bn0scmVwb3NpdGlvbjptfX0sQ29udHJvbGxlcjpmdW5jdGlvbihvLHUsZSl7dmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjLGYsYSxzLG49UShvKSx0PW4ub24saT1uLmVtaXQsbD11Lk1vdmUsZD1sLmdldFBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbixyPWwuZ2V0TGltaXQsdj1sLnRvUG9zaXRpb24saD0obj11LlNsaWRlcykuaXNFbicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdWdoLHA9bi5nZXRMZW5ndGgsZz1lLm9taXRFbmQsbT1vLmlzKFB0KSx5PW8uaXMoTXQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxiPVIoTCwhMSksdz1SKEwsITApLHg9ZS5zdGFydHx8MCxrPXg7ZnVuY3Rpb24gUygpe2YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXAoITApLGE9ZS5wZXJNb3ZlLHM9ZS5wZXJQYWdlLGM9XygpO3ZhciBuPXEoeCwwLGc/YycKICAgICAgICAgICAgICAgICAgICAgICAgYic6Zi0xKTtuIT09eCYmKHg9bixsLnJlcG9zaXRpb24oKSl9ZnVuY3Rpb24gRSgpe2MhPT1fJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpJiZpKCJlaSIpfWZ1bmN0aW9uIEwobix0KXt2YXIgaT1hfHwoUCgpPzE6cyksaT1PKHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInK2kqKG4/LTE6MSkseCwhKGF8fFAoKSkpO3JldHVybi0xPT09aSYmeSYmIVNuKGQoKSxyKCcKICAgICAgICAgICAgICAgICAgICAgICAgYichbiksMSk/bj8wOmM6dD9pOkEoaSl9ZnVuY3Rpb24gTyhuLHQsaSl7dmFyIHI7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBoKCl8fFAoKT8oKHI9ZnVuY3Rpb24obil7aWYoeSYmIm1vdmUiPT09ZS50cmltU3BhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiZuIT09eClmb3IodmFyIHQ9ZCgpO3Q9PT12KG4sITApJiZFbihuLDAsby5sZW5ndGgtMScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIWUucmV3aW5kKTspbjx4Py0tbjorK247cmV0dXJuIG59KG4pKSE9PW4mJih0PW4sbj1yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxpPSExKSxuPDB8fGM8bj9uPWF8fCFFbigwLG4sdCwhMCkmJiFFbihjLHQsbiwhMCk/bT8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaT9uPDA/LShmJXN8fHMpOmY6bjplLnJld2luZD9uPDA/YzowOi0xOnooRChuKSk6aSYmbicKICAgICAgICAgICAgICAgICAgICAgICAgYichPT10JiYobj16KEQodCkrKG48dD8tMToxKSkpKTpuPS0xLG59ZnVuY3Rpb24gQShuKXtyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIG0/KG4rZiklZnx8MDpufWZ1bmN0aW9uIF8oKXtmb3IodmFyIG49Zi0oUCgpfHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSYmYT8xOnMpO2cmJjA8bi0tOylpZih2KGYtMSwhMCkhPT12KG4sITApKXtuKys7YnJlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrfXJldHVybiBxKG4sMCxmLTEpfWZ1bmN0aW9uIHoobil7cmV0dXJuIHEoUCgpP246cypuJwogICAgICAgICAgICAgICAgICAgICAgICBiJywwLGMpfWZ1bmN0aW9uIEQobil7cmV0dXJuIFAoKT9ZKG4sYyk6eG4oKGM8PW4/Zi0xOm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKS9zKX1mdW5jdGlvbiBNKG4pe24hPT14JiYoaz14LHg9bil9ZnVuY3Rpb24gUCgpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4hZW4oZS5mb2N1cyl8fGUuaXNOYXZpZ2F0aW9ufWZ1bmN0aW9uIEkoKXtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ28uc3RhdGUuaXMoW0cscm5dKSYmISFlLndhaXRGb3JUcmFuc2l0aW9ufXJldHVybnttb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ6ZnVuY3Rpb24oKXtTKCksdChbSyxKLCJlaSJdLFMpLHQoTm4sRSl9LGdvOmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbihuLHQsaSl7dmFyIHI7SSgpfHwtMTwocj1BKG49ZnVuY3Rpb24obil7dmFyIHQ9eDt7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBpLHI7QyhuKT8ocj1uLm1hdGNoKC8oWytcXC08Pl0pKFxcZCspPy8pfHxbXSxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1yWzFdLHI9clsyXSwiKyI9PT1pfHwiLSI9PT1pP3Q9Tyh4KyArKCIiK2krKCtyfHwxKSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHgpOiI+Ij09PWk/dD1yP3ooK3IpOmIoITApOiI8Ij09PWkmJih0PXcoITApKSk6dD1tPycKICAgICAgICAgICAgICAgICAgICAgICAgYiduOnEobiwwLGMpfXJldHVybiB0fShuKSkpJiYodHx8ciE9PXgpJiYoTShyKSxsLm1vdmUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24scixrLGkpKX0sc2Nyb2xsOmZ1bmN0aW9uKG4sdCxpLHIpe3UuU2Nyb2xsLnNjcm9sbCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbix0LGksZnVuY3Rpb24oKXt2YXIgbj1BKGwudG9JbmRleChkKCkpKTtNKGc/WShuLGMpOicKICAgICAgICAgICAgICAgICAgICAgICAgYiduKSxyJiZyKCl9KX0sZ2V0TmV4dDpiLGdldFByZXY6dyxnZXRBZGphY2VudDpMLGdldEVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q6XyxzZXRJbmRleDpNLGdldEluZGV4OmZ1bmN0aW9uKG4pe3JldHVybiBuP2s6eH0sdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXg6eix0b1BhZ2U6RCx0b0Rlc3Q6ZnVuY3Rpb24obil7cmV0dXJuIG49bC50b0luZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleChuKSx5P3EobiwwLGMpOm59LGhhc0ZvY3VzOlAsaXNCdXN5Okl9fSxBcnJvd3M6ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKG8sbix0KXt2YXIgaSxyLHU9UShvKSxlPXUub24sYz11LmJpbmQsZj11LmVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGE9dC5jbGFzc2VzLHM9dC5pMThuLGw9bi5FbGVtZW50cyxkPW4uQ29udHJvbGxlcix2PScKICAgICAgICAgICAgICAgICAgICAgICAgYidsLmFycm93cyxoPWwudHJhY2sscD12LGc9bC5wcmV2LG09bC5uZXh0LHk9e307ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGIoKXt2YXIgbj10LmFycm93czshbnx8ZyYmbXx8KHA9dnx8aigiZGl2IixhLmFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3MpLGc9UyghMCksbT1TKCExKSxpPSEwLEwocCxbZyxtXSksdnx8TyhwLGgpKSxnJiZtJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmKGFuKHkse3ByZXY6ZyxuZXh0Om19KSxsbihwLG4/IiI6Im5vbmUiKSxNKHAscj1kdCsiJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0tIit0LmRpcmVjdGlvbiksbiYmKGUoW0IsRG4sSixWLCJlaSJdLEUpLGMobSwiY2xpY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInIixSKGssIj4iKSksYyhnLCJjbGljayIsUihrLCI8IikpLEUoKSxJKFtnLG1dLEtuLGguaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkKSxmKCJhcnJvd3M6bW91bnRlZCIsZyxtKSkpLGUoSyx3KX1mdW5jdGlvbiB3KCl7eCgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxiKCl9ZnVuY3Rpb24geCgpe3UuZGVzdHJveSgpLFgocCxyKSxpPyhUKHY/W2csbV06cCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGc9bT1udWxsKTpQKFtnLG1dLHV0KX1mdW5jdGlvbiBrKG4pe2QuZ28obiwhMCl9ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIFMobil7cmV0dXJuIGhuKFwnPGJ1dHRvbiBjbGFzcz0iXCcrYS5hcnJvdysiICcKICAgICAgICAgICAgICAgICAgICAgICAgYiciKyhuP2EucHJldjphLm5leHQpK1wnIiB0eXBlPSJidXR0b24iPjxzdmcgeG1sbnM9Imh0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDQwIDQwIiB3aWR0aD0iJwogICAgICAgICAgICAgICAgICAgICAgICBiJzQwIiBoZWlnaHQ9IjQwIiBmb2N1c2FibGU9ImZhbHNlIj48cGF0aCBkPSJcJysodC5hcnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dQYXRofHwibTE1LjUgMC45MzItNC4zIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDQuNCAxNC42LTE0LjYgNC40LTQuMy00LjQtNC40LTE0LjYtMTQuNnoiKStcJyIgLycKICAgICAgICAgICAgICAgICAgICAgICAgYiI+Jyl9ZnVuY3Rpb24gRSgpe3ZhciBuLHQsaSxyO2cmJm0mJihyPW8uaW5kZXgsbj1kLmdlIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3RQcmV2KCksdD1kLmdldE5leHQoKSxpPS0xPG4mJnI8bj9zLmxhc3Q6cy5wcmV2LHI9LTEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPHQmJnQ8cj9zLmZpcnN0OnMubmV4dCxnLmRpc2FibGVkPW48MCxtLmRpc2FibGVkPXQ8MCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsSShnLG5uLGkpLEkobSxubixyKSxmKCJhcnJvd3M6dXBkYXRlZCIsZyxtLG4sdCkpfXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm57YXJyb3dzOnksbW91bnQ6YixkZXN0cm95OngsdXBkYXRlOkV9fSxBdXRvcGxheTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24obix0LGkpe3ZhciByLG8sdT1RKG4pLGU9dS5vbixjPXUuYmluZCxmPXUuZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtaXQsYT1xbihpLmludGVydmFsLG4uZ28uYmluZChuLCI+IiksZnVuY3Rpb24obil7dmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0PWwuYmFyO3QmJl8odCwid2lkdGgiLDEwMCpuKyIlIiksZigiYXV0b3BsYXk6cGxheWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmciLG4pfSkscz1hLmlzUGF1c2VkLGw9dC5FbGVtZW50cyxkPSh1PXQuRWxlbWVudHMpLicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb290LHY9dS50b2dnbGUsaD1pLmF1dG9wbGF5LHA9InBhdXNlIj09PWg7ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2coKXtzKCkmJnQuU2xpZGVzLmlzRW5vdWdoKCkmJihhLnN0YXJ0KCFpLnJlc2V0UHJvZ3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNzKSxvPXI9cD0hMSxiKCksZihGbikpfWZ1bmN0aW9uIG0obil7cD0hIShuPXZvaWQgMCcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT1uPyEwOm4pLGIoKSxzKCl8fChhLnBhdXNlKCksZihYbikpfWZ1bmN0aW9uIHkoKXtwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8KHJ8fG8/bSghMSk6ZygpKX1mdW5jdGlvbiBiKCl7diYmKEEodix0biwhcCksSSh2LG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbixpLmkxOG5bcD8icGxheSI6InBhdXNlIl0pKX1mdW5jdGlvbiB3KG4pe249dC5TbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLmdldEF0KG4pO2Euc2V0KG4mJit6KG4uc2xpZGUsQ3QpfHxpLmludGVydmFsKX1yZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jue21vdW50OmZ1bmN0aW9uKCl7aCYmKGkucGF1c2VPbkhvdmVyJiZjKGQsIm1vdXNlZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyIG1vdXNlbGVhdmUiLGZ1bmN0aW9uKG4pe3I9Im1vdXNlZW50ZXIiPT09bi50eXBlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5KCl9KSxpLnBhdXNlT25Gb2N1cyYmYyhkLCJmb2N1c2luIGZvY3Vzb3V0IixmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24obil7bz0iZm9jdXNpbiI9PT1uLnR5cGUseSgpfSksdiYmYyh2LCJjbGljayIsZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKCl7cD9nKCk6bSghMCl9KSxlKFtILFRuLEpdLGEucmV3aW5kKSxlKEgsdyksdiYmSScKICAgICAgICAgICAgICAgICAgICAgICAgYicodixLbixsLnRyYWNrLmlkKSxwfHxnKCksYigpKX0sZGVzdHJveTphLmNhbmNlbCxwbGF5JwogICAgICAgICAgICAgICAgICAgICAgICBiJzpnLHBhdXNlOm0saXNQYXVzZWQ6c319LENvdmVyOmZ1bmN0aW9uKG4sdCxpKXt2YXIgcj0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUShuKS5vbjtmdW5jdGlvbiBvKGkpe3QuU2xpZGVzLmZvckVhY2goZnVuY3Rpb24obil7dicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciB0PWZuKG4uY29udGFpbmVyfHxuLnNsaWRlLCJpbWciKTt0JiZ0LnNyYyYmdShpLHQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24pfSl9ZnVuY3Rpb24gdShuLHQsaSl7aS5zdHlsZSgiYmFja2dyb3VuZCIsbj9cJ2NlbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IvY292ZXIgbm8tcmVwZWF0IHVybCgiXCcrdC5zcmMrXCciKVwnOiIiLCEwKSxsbih0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduPyJub25lIjoiIil9cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7aS5jb3ZlciYmKHIoV24sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1IodSwhMCkpLHIoW0IsSyxKXSxSKG8sITApKSl9LGRlc3Ryb3k6UihvLCExKX19LFNjcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGw6ZnVuY3Rpb24obixjLHUpe3ZhciBmLGEsdD1RKG4pLGk9dC5vbixzPXQuZW1pdCxsPScKICAgICAgICAgICAgICAgICAgICAgICAgYiduLnN0YXRlLnNldCxkPWMuTW92ZSx2PWQuZ2V0UG9zaXRpb24sZT1kLmdldExpbWl0LGg9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QuZXhjZWVkZWRMaW1pdCxwPWQudHJhbnNsYXRlLGc9bi5pcyhNdCksbT0xO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB5KG4sdCxpLHIsbyl7dmFyIHUsZT12KCksaT0oeCgpLCFpfHxnJiZoKCl8fChpPWMuTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidheW91dC5zbGlkZXJTaXplKCksdT1MbihuKSppKnhuKFUobikvaSl8fDAsbj1kLnRvUG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKGMuQ29udHJvbGxlci50b0Rlc3QobiVpKSkrdSksU24oZSxuLDEpKTttPTEsdD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaT8wOnR8fHduKFUobi1lKS8xLjUsODAwKSxhPXIsZj1xbih0LGIsUih3LGUsbixvKSwxKScKICAgICAgICAgICAgICAgICAgICAgICAgYicsbChybikscyhUbiksZi5zdGFydCgpfWZ1bmN0aW9uIGIoKXtsKDMpLGEmJmEoKSxzKFYpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31mdW5jdGlvbiB3KG4sdCxpLHIpe3ZhciBvPXYoKSxyPShuKyh0LW4pKih0PXIsKG49dS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFzaW5nRnVuYyk/bih0KToxLU1hdGgucG93KDEtdCw0KSktbykqbTtwKG8rciksZyYmIScKICAgICAgICAgICAgICAgICAgICAgICAgYidpJiZoKCkmJihtKj0uNixVKHIpPDEwJiZ5KGUoaCghMCkpLDYwMCwhMSxhLCEwKSl9ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHgoKXtmJiZmLmNhbmNlbCgpfWZ1bmN0aW9uIHIoKXtmJiYhZi5pc1BhdXNlZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSYmKHgoKSxiKCkpfXJldHVybnttb3VudDpmdW5jdGlvbigpe2koSCx4KSxpKFtLLEpdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyKX0sZGVzdHJveTp4LHNjcm9sbDp5LGNhbmNlbDpyfX0sRHJhZzpmdW5jdGlvbihlLG8sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Mpe3ZhciBmLHQsdSxhLHMsbCxkLHYsbj1RKGUpLGk9bi5vbixoPW4uZW1pdCxwPW4uYmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmQsZz1uLnVuYmluZCxtPWUuc3RhdGUseT1vLk1vdmUsYj1vLlNjcm9sbCx3PW8uQ29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb2xsZXIseD1vLkVsZW1lbnRzLnRyYWNrLGs9by5NZWRpYS5yZWR1Y2Uscj0obj1vLkRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlY3Rpb24pLnJlc29sdmUsUz1uLm9yaWVudCxFPXkuZ2V0UG9zaXRpb24sTD15LmV4Y2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWRlZExpbWl0LE89ITE7ZnVuY3Rpb24gaigpe3ZhciBuPWMuZHJhZztDKCFuKSxhPSJmcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZSI9PT1ufWZ1bmN0aW9uIE4obil7dmFyIHQsaSxyO2w9ITEsZHx8KHQ9UihuKSxpPW4uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldCxyPWMubm9EcmFnLGNuKGksIi4iK210KyIsIC4iK3Z0KXx8ciYmY24oaSxyKXwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfCF0JiZuLmJ1dHRvbnx8KHcuaXNCdXN5KCk/RihuLCEwKToodj10P3g6d2luZG93LHM9bScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMoW0cscm5dKSx1PW51bGwscCh2LHp0LEEsanQpLHAodixEdCxfLGp0KSx5LmNhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2woKSxiLmNhbmNlbCgpLHoobikpKSl9ZnVuY3Rpb24gQShuKXt2YXIgdCxpLHIsbyx1O20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzKDYpfHwobS5zZXQoNiksaCgiZHJhZyIpKSxuLmNhbmNlbGFibGUmJihzPyh5LnRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduc2xhdGUoZitEKG4pLyhPJiZlLmlzKE10KT81OjEpKSx1PTIwMDxNKG4pLHQ9TyE9PShPJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1MKCkpLCh1fHx0KSYmeihuKSxsPSEwLGgoImRyYWdnaW5nIiksRihuKSk6VShEKHU9biknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKT5VKEQodSwhMCkpJiYodD1uLGk9Yy5kcmFnTWluVGhyZXNob2xkLHI9dW4oaSksbz1yJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmaS5tb3VzZXx8MCxyPShyP2kudG91Y2g6K2kpfHwxMCxzPVUoRCh0KSk+KFIodCk/cjpvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksRihuKSkpfWZ1bmN0aW9uIF8obil7dmFyIHQsaSxyO20uaXMoNikmJihtLnNldCgzKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCgiZHJhZ2dlZCIpKSxzJiYoaT1mdW5jdGlvbihuKXtyZXR1cm4gRSgpK0xuKG4pKlkoVScKICAgICAgICAgICAgICAgICAgICAgICAgYicobikqKGMuZmxpY2tQb3dlcnx8NjAwKSxhPzEvMDpvLkxheW91dC5saXN0U2l6ZSgpKihjJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5mbGlja01heFBhZ2VzfHwxKSl9KHQ9ZnVuY3Rpb24obil7aWYoZS5pcyhQdCl8fCFPKXsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHQ9TShuKTtpZih0JiZ0PDIwMClyZXR1cm4gRChuKS90fXJldHVybiAwfSh0PW4pKScKICAgICAgICAgICAgICAgICAgICAgICAgYicscj1jLnJld2luZCYmYy5yZXdpbmRCeURyYWcsayghMSksYT93LnNjcm9sbChpLDAsYy5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hcCk6ZS5pcyhJdCk/dy5nbyhTKExuKHQpKTwwP3I/IjwiOiItIjpyPyI+IjoiKyIpOmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzKE10KSYmTyYmcj93LmdvKEwoITApPyI+IjoiPCIpOncuZ28ody50b0Rlc3QoaSksIScKICAgICAgICAgICAgICAgICAgICAgICAgYicwKSxrKCEwKSxGKG4pKSxnKHYsenQsQSksZyh2LER0LF8pLHM9ITF9ZnVuY3Rpb24gVChuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7IWQmJmwmJkYobiwhMCl9ZnVuY3Rpb24geihuKXt1PXQsdD1uLGY9RSgpfWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBEKG4sdCl7cmV0dXJuIEkobix0KS1JKFAobiksdCl9ZnVuY3Rpb24gTShuKXtyZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIG1uKG4pLW1uKFAobikpfWZ1bmN0aW9uIFAobil7cmV0dXJuIHQ9PT1uJiZ1fHx0fWZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBJKG4sdCl7cmV0dXJuKFIobik/bi5jaGFuZ2VkVG91Y2hlc1swXTpuKVsicGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UiK3IodD8iWSI6IlgiKV19ZnVuY3Rpb24gUihuKXtyZXR1cm4idW5kZWZpbmVkIiE9dCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5cGVvZiBUb3VjaEV2ZW50JiZuIGluc3RhbmNlb2YgVG91Y2hFdmVudH1mdW5jdGlvbiBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhuKXtkPW59cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7cCh4LHp0LG9uLGp0KSxwKHgsRHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG9uLGp0KSxwKHgsX3QsTixqdCkscCh4LCJjbGljayIsVCx7Y2FwdHVyZTohMH0pLHAoeCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsImRyYWdzdGFydCIsRiksaShbQixLXSxqKX0sZGlzYWJsZTpDLGlzRHJhZ2dpbmc6ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKCl7cmV0dXJuIHN9fX0sS2V5Ym9hcmQ6ZnVuY3Rpb24odCxuLGkpe3ZhciByLG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHU9USh0KSxlPXUub24sYz11LmJpbmQsZj11LnVuYmluZCxhPXQucm9vdCxzPW4uRGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbi5yZXNvbHZlO2Z1bmN0aW9uIGwoKXt2YXIgbj1pLmtleWJvYXJkO24mJihyPSJnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvYmFsIj09PW4/d2luZG93OmEsYyhyLEd0LGgpKX1mdW5jdGlvbiBkKCl7ZihyLEd0KX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gdigpe3ZhciBuPW87bz0hMCxwKGZ1bmN0aW9uKCl7bz1ufSl9ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGgobil7b3x8KChuPVR0KG4pKT09PXMoQm4pP3QuZ28oIjwiKTpuPT09cyhIbikmJnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dvKCI+IikpfXJldHVybnttb3VudDpmdW5jdGlvbigpe2woKSxlKEssZCksZShLLGwpLGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKEgsdil9LGRlc3Ryb3k6ZCxkaXNhYmxlOmZ1bmN0aW9uKG4pe289bn19fSxMYXp5TG9hZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6ZnVuY3Rpb24oaSxuLG8pe3ZhciB0PVEoaSkscj10Lm9uLHU9dC5vZmYsZT10LmJpbmQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2M9dC5lbWl0LGY9InNlcXVlbnRpYWwiPT09by5sYXp5TG9hZCxhPVtEbixWXSxzPVtdO2YnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBsKCl7RChzKSxuLlNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uKHIpe2duKHIucycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlLFd0KS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciB0PXoobixGdCksaT16KG4sWHQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJzt0PT09bi5zcmMmJmk9PT1uLnNyY3NldHx8KHQ9by5jbGFzc2VzLnNwaW5uZXIsdD1mbignCiAgICAgICAgICAgICAgICAgICAgICAgIGInaT1uLnBhcmVudEVsZW1lbnQsIi4iK3QpfHxqKCJzcGFuIix0LGkpLHMucHVzaChbbixyLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0XSksbi5zcmN8fGxuKG4sIm5vbmUiKSl9KX0pLChmP3A6KHUoYSkscihhLGQpLGQpKSgpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31mdW5jdGlvbiBkKCl7KHM9cy5maWx0ZXIoZnVuY3Rpb24obil7dmFyIHQ9by5wZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSooKG8ucHJlbG9hZFBhZ2VzfHwxKSsxKS0xO3JldHVybiFuWzFdLmlzV2l0aGluKGkuaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4LHQpfHx2KG4pfSkpLmxlbmd0aHx8dShhKX1mdW5jdGlvbiB2KG4pe3ZhciB0PW5bJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBdO00oblsxXS5zbGlkZSxFdCksZSh0LCJsb2FkIGVycm9yIixSKGgsbikpLEkodCwic3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInYyIseih0LEZ0KSksSSh0LCJzcmNzZXQiLHoodCxYdCkpLFAodCxGdCksUCh0LFh0KX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gaChuLHQpe3ZhciBpPW5bMF0scj1uWzFdO1goci5zbGlkZSxFdCksImVycm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIhPT10LnR5cGUmJihUKG5bMl0pLGxuKGksIiIpLGMoV24saSxyKSxjKGpuKSksZiYmcCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKX1mdW5jdGlvbiBwKCl7cy5sZW5ndGgmJnYocy5zaGlmdCgpKX1yZXR1cm57bW91bnQ6ZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uKCl7by5sYXp5TG9hZCYmKGwoKSxyKEosbCkpfSxkZXN0cm95OlIoRCxzKSxjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlY2s6ZH19LFBhZ2luYXRpb246ZnVuY3Rpb24obCxuLGQpe3ZhciB2LGgsdD1RKGwpLHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXQub24sZz10LmVtaXQsbT10LmJpbmQseT1uLlNsaWRlcyxiPW4uRWxlbWVudHMsdz1uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidDb250cm9sbGVyLHg9dy5oYXNGb2N1cyxyPXcuZ2V0SW5kZXgsZT13LmdvLGM9bi5EaXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uLnJlc29sdmUsaz1iLnBhZ2luYXRpb24sUz1bXTtmdW5jdGlvbiBFKCl7diYmKFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGs/byh2LmNoaWxkcmVuKTp2KSxYKHYsaCksRChTKSx2PW51bGwpLHQuZGVzdHJveSgpfScKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBMKG4pe2UoIj4iK24sITApfWZ1bmN0aW9uIE8obix0KXt2YXIgaT1TLmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgscj1UdCh0KSxvPUEoKSx1PS0xLG89KHI9PT1jKEhuLCExLG8pP3U9KytuJWk6cj0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT1jKEJuLCExLG8pP3U9KC0tbitpKSVpOiJIb21lIj09PXI/dT0wOiJFbmQiPT09ciYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1PWktMSksU1t1XSk7byYmKGRuKG8uYnV0dG9uKSxlKCI+Iit1KSxGKHQsITApKX1mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gQSgpe3JldHVybiBkLnBhZ2luYXRpb25EaXJlY3Rpb258fGQuZGlyZWN0aW9ufWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBfKG4pe3JldHVybiBTW3cudG9QYWdlKG4pXX1mdW5jdGlvbiB6KCl7dmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLHQ9XyhyKCEwKSksaT1fKHIoKSk7dCYmKFgobj10LmJ1dHRvbix0biksUChuLFFuKSxJJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhuLCQsLTEpKSxpJiYoTShuPWkuYnV0dG9uLHRuKSxJKG4sUW4sITApLEkobiwkLCIiKSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGcoInBhZ2luYXRpb246dXBkYXRlZCIse2xpc3Q6dixpdGVtczpTfSx0LGkpfXJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYid7aXRlbXM6Uyxtb3VudDpmdW5jdGlvbiBuKCl7RSgpLHAoW0ssSiwiZWkiXSxuKTt2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q9ZC5wYWdpbmF0aW9uO2lmKGsmJmxuKGssdD8iIjoibm9uZSIpLHQpe3AoW0gsVG4sVl0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHopO3ZhciB0PWwubGVuZ3RoLGk9ZC5jbGFzc2VzLHI9ZC5pMThuLG89ZC5wZXJQYWdlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1PXgoKT93LmdldEVuZCgpKzE6a24odC9vKTtNKHY9a3x8aigidWwiLGkucGFnaW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sYi50cmFjay5wYXJlbnRFbGVtZW50KSxoPWd0KyItLSIrQSgpKSxJKHYsWiwidGFibGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QiKSxJKHYsbm4sci5zZWxlY3QpLEkodixudCxBKCk9PT1Kbj8idmVydGljYWwiOiIiKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7Zm9yKHZhciBlPTA7ZTx1O2UrKyl7dmFyIGM9aigibGkiLG51bGwsdiksZj1qKCJidXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIix7Y2xhc3M6aS5wYWdlLHR5cGU6ImJ1dHRvbiJ9LGMpLGE9eS5nZXRJbihlKS5tYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmN0aW9uKG4pe3JldHVybiBuLnNsaWRlLmlkfSkscz0heCgpJiYxPG8/ci5wYWdlWCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6ci5zbGlkZVg7bShmLCJjbGljayIsUihMLGUpKSxkLnBhZ2luYXRpb25LZXlib2FyZCYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20oZiwia2V5ZG93biIsUihPLGUpKSxJKGMsWiwicHJlc2VudGF0aW9uIiksSShmLFosInQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWIiKSxJKGYsS24sYS5qb2luKCIgIikpLEkoZixubixPbihzLGUrMSkpLEkoZiwkLC0xKScKICAgICAgICAgICAgICAgICAgICAgICAgYicsUy5wdXNoKHtsaTpjLGJ1dHRvbjpmLHBhZ2U6ZX0pfXooKSxnKCJwYWdpbmF0aW9uOm1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudGVkIix7bGlzdDp2LGl0ZW1zOlN9LF8obC5pbmRleCkpfX0sZGVzdHJveTpFLGdldEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDpfLHVwZGF0ZTp6fX0sU3luYzpmdW5jdGlvbihpLG4sdCl7dmFyIHI9dC5pc05hdmlnYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLG89dC5zbGlkZUZvY3VzLHU9W107ZnVuY3Rpb24gZSgpe3ZhciBuLHQ7aS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uaXNQYXJlbnR8fChmKGksbi5zcGxpZGUpLGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG4uc3BsaWRlLGkpKX0pLHImJihuPVEoaSksKHQ9bi5vbikoTW4scyksdChZbixsKSx0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidbQixLXSxhKSx1LnB1c2gobiksbi5lbWl0KEduLGkuc3BsaWRlcykpfWZ1bmN0aW9uIGMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7dS5mb3JFYWNoKGZ1bmN0aW9uKG4pe24uZGVzdHJveSgpfSksRCh1KX1mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZihuLHIpe249UShuKTtuLm9uKEgsZnVuY3Rpb24obix0LGkpe3IuZ28oci5pcyhQdCk/aScKICAgICAgICAgICAgICAgICAgICAgICAgYic6bil9KSx1LnB1c2gobil9ZnVuY3Rpb24gYSgpe0kobi5FbGVtZW50cy5saXN0LG50LHQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RpcmVjdGlvbj09PUpuPyJ2ZXJ0aWNhbCI6IiIpfWZ1bmN0aW9uIHMobil7aS5nbyhuLmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCl9ZnVuY3Rpb24gbChuLHQpe2IoWXQsVHQodCkpJiYocyhuKSxGKHQpKX1yZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYidue3NldHVwOlIobi5NZWRpYS5zZXQse3NsaWRlRm9jdXM6ZW4obyk/cjpvfSwhMCksbW91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250OmUsZGVzdHJveTpjLHJlbW91bnQ6ZnVuY3Rpb24oKXtjKCksZSgpfX19LFdoZWVsOmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbihlLGMsZil7dmFyIG49UShlKS5iaW5kLGE9MDtmdW5jdGlvbiB0KG4pe3ZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdCxpLHIsbyx1O24uY2FuY2VsYWJsZSYmKHQ9KHU9bi5kZWx0YVkpPDAsaT1tbihuKSxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJz1mLndoZWVsTWluVGhyZXNob2xkfHwwLG89Zi53aGVlbFNsZWVwfHwwLFUodSk+ciYmbzwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaS1hJiYoZS5nbyh0PyI8IjoiPiIpLGE9aSksdT10LGYucmVsZWFzZVdoZWVsJiYhZS5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUuaXMoRykmJi0xPT09Yy5Db250cm9sbGVyLmdldEFkamFjZW50KHUpfHxGKG4pKX1yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJue21vdW50OmZ1bmN0aW9uKCl7Zi53aGVlbCYmbihjLkVsZW1lbnRzLnRyYWNrLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInd2hlZWwiLHQsanQpfX19LExpdmU6ZnVuY3Rpb24obix0LGkpe3ZhciByPVEobikub24sbycKICAgICAgICAgICAgICAgICAgICAgICAgYic9dC5FbGVtZW50cy50cmFjayx1PWkubGl2ZSYmIWkuaXNOYXZpZ2F0aW9uLGU9aigic3BhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24iLHd0KSxjPXFuKDkwLFIoZiwhMSkpO2Z1bmN0aW9uIGYobil7SShvLHJ0LG4pLG4/KEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG8sZSksYy5zdGFydCgpKTooVChlKSxjLmNhbmNlbCgpKX1mdW5jdGlvbiBhKG4pe3UmJicKICAgICAgICAgICAgICAgICAgICAgICAgYidJKG8saXQsbj8ib2ZmIjoicG9saXRlIil9cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7dSYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhhKCF0LkF1dG9wbGF5LmlzUGF1c2VkKCkpLEkobyxvdCwhMCksZS50ZXh0Q29udGVudD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIlx4ZTJceDgwXHhhNiIscihGbixSKGEsITApKSxyKFhuLFIoYSwhMSkpLHIoW0RuLFZdLFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGYsITApKSl9LGRpc2FibGU6YSxkZXN0cm95OmZ1bmN0aW9uKCl7UChvLFtpdCxvdCxydCcKICAgICAgICAgICAgICAgICAgICAgICAgYiddKSxUKGUpfX19fSkscXQ9e3R5cGU6InNsaWRlIixyb2xlOiJyZWdpb24iLHNwZWVkOjQwJwogICAgICAgICAgICAgICAgICAgICAgICBiJzAscGVyUGFnZToxLGNsb25lU3RhdHVzOiEwLGFycm93czohMCxwYWdpbmF0aW9uOiEwLHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdpbmF0aW9uS2V5Ym9hcmQ6ITAsaW50ZXJ2YWw6NWUzLHBhdXNlT25Ib3ZlcjohMCxwYScKICAgICAgICAgICAgICAgICAgICAgICAgYid1c2VPbkZvY3VzOiEwLHJlc2V0UHJvZ3Jlc3M6ITAsZWFzaW5nOiJjdWJpYy1iZXppZXIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJzAuMjUsIDEsIDAuNSwgMSkiLGRyYWc6ITAsZGlyZWN0aW9uOiJsdHIiLHRyaW1TcGFjZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInITAsZm9jdXNhYmxlTm9kZXM6ImEsIGJ1dHRvbiwgdGV4dGFyZWEsIGlucHV0LCBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBpZnJhbWUiLGxpdmU6ITAsY2xhc3Nlczp7c2xpZGU6YXQsY2xvbmU6c3QsYXJyb3dzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzpkdCxhcnJvdzp2dCxwcmV2Omh0LG5leHQ6cHQscGFnaW5hdGlvbjpndCxwYWdlOm10LHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGlubmVyOmkrInNwaW5uZXIifSxpMThuOntwcmV2OiJQcmV2aW91cyBzbGlkZSIsbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6Ik5leHQgc2xpZGUiLGZpcnN0OiJHbyB0byBmaXJzdCBzbGlkZSIsbGFzdDoiR28gdG8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3Qgc2xpZGUiLHNsaWRlWDoiR28gdG8gc2xpZGUgJXMiLHBhZ2VYOiJHbyB0byBwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSAlcyIscGxheToiU3RhcnQgYXV0b3BsYXkiLHBhdXNlOiJQYXVzZSBhdXRvcGxheSIsYycKICAgICAgICAgICAgICAgICAgICAgICAgYidhcm91c2VsOiJjYXJvdXNlbCIsc2xpZGU6InNsaWRlIixzZWxlY3Q6IlNlbGVjdCBhIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSB0byBzaG93IixzbGlkZUxhYmVsOiIlcyBvZiAlcyJ9LHJlZHVjZWRNb3Rpb246e3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGVlZDowLHJld2luZFNwZWVkOjAsYXV0b3BsYXk6InBhdXNlIn19O2Z1bmN0aW9uIEJ0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLHQsaSl7dmFyIHI9dC5TbGlkZXM7ZnVuY3Rpb24gbygpe3IuZm9yRWFjaChmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24obil7bi5zdHlsZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgtIisxMDAqbi5pbmRleCsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiUpIil9KX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKXtRKG4pLm9uKFtCLEpdLG8pfSxzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcnQ6ZnVuY3Rpb24obix0KXtyLnN0eWxlKCJ0cmFuc2l0aW9uIiwib3BhY2l0eSAiK2kuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwZWVkKyJtcyAiK2kuZWFzaW5nKSxwKHQpfSxjYW5jZWw6b259fWZ1bmN0aW9uIEh0KHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG4sZSl7dmFyIGMsZj1uLk1vdmUsYT1uLkNvbnRyb2xsZXIscz1uLlNjcm9sbCx0PW4uRScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnRzLmxpc3QsbD1SKF8sdCwidHJhbnNpdGlvbiIpO2Z1bmN0aW9uIGkoKXtsKCIiJwogICAgICAgICAgICAgICAgICAgICAgICBiJykscy5jYW5jZWwoKX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKXtRKHUpLmJpbmQodCwidHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW5zaXRpb25lbmQiLGZ1bmN0aW9uKG4pe24udGFyZ2V0PT09dCYmYyYmKGkoKSxjKCkpfScKICAgICAgICAgICAgICAgICAgICAgICAgYicpfSxzdGFydDpmdW5jdGlvbihuLHQpe3ZhciBpPWYudG9Qb3NpdGlvbihuLCEwKSxyPWYuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldFBvc2l0aW9uKCksbz1mdW5jdGlvbihuKXt2YXIgdD1lLnJld2luZFNwZWVkO2lmKHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmlzKE10KSYmdCl7dmFyIGk9YS5nZXRJbmRleCghMCkscj1hLmdldEVuZCgpO2lmKDA9PScKICAgICAgICAgICAgICAgICAgICAgICAgYic9aSYmcjw9bnx8cjw9aSYmMD09PW4pcmV0dXJuIHR9cmV0dXJuIGUuc3BlZWR9KG4pOzE8JwogICAgICAgICAgICAgICAgICAgICAgICBiJz1VKGktcikmJjE8PW8/ZS51c2VTY3JvbGw/cy5zY3JvbGwoaSxvLCExLHQpOihsKCJ0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNmb3JtICIrbysibXMgIitlLmVhc2luZyksZi50cmFuc2xhdGUoaSwhMCksYz10KTooZicKICAgICAgICAgICAgICAgICAgICAgICAgYicuanVtcChuKSx0KCkpfSxjYW5jZWw6aX19dD1mdW5jdGlvbigpe2Z1bmN0aW9uIGkobix0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7dGhpcy5ldmVudD1RKCksdGhpcy5Db21wb25lbnRzPXt9LHRoaXMuc3RhdGU9cygxKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5zcGxpZGVzPVtdLHRoaXMubj17fSx0aGlzLnQ9e307bj1DKG4pP3BuKGRvY3VtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCxuKTpuO2JuKG4sbisiIGlzIGludmFsaWQuIiksdD1kKHtsYWJlbDp6KHRoaXMucm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q9bixubil8fCIiLGxhYmVsbGVkYnk6eihuLFpuKXx8IiJ9LHF0LGkuZGVmYXVsdHMsdHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHt9KTt0cnl7ZCh0LEpTT04ucGFyc2UoeihuLGYpKSl9Y2F0Y2gobil7Ym4oITEsIkludicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbGlkIEpTT04iKX10aGlzLm49T2JqZWN0LmNyZWF0ZShkKHt9LHQpKX12YXIgbj1pLnByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290b3R5cGU7cmV0dXJuIG4ubW91bnQ9ZnVuY3Rpb24obix0KXt2YXIgaT10aGlzLHI9dGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuc3RhdGUsbz10aGlzLkNvbXBvbmVudHM7cmV0dXJuIGJuKHIuaXMoWzEsN10pLCJBbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWFkeSBtb3VudGVkISIpLHIuc2V0KDEpLHRoaXMuaT1vLHRoaXMucj10fHx0aGlzLnJ8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wodGhpcy5pcyhJdCk/QnQ6SHQpLHRoaXMudD1ufHx0aGlzLnQsdyhhbih7fSxVdCx0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy50LHtUcmFuc2l0aW9uOnRoaXMucn0pLGZ1bmN0aW9uKG4sdCl7bj1uKGksbyxpLm4pOycKICAgICAgICAgICAgICAgICAgICAgICAgYicob1t0XT1uKS5zZXR1cCYmbi5zZXR1cCgpfSksdyhvLGZ1bmN0aW9uKG4pe24ubW91bnQmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyZuLm1vdW50KCl9KSx0aGlzLmVtaXQoQiksTSh0aGlzLnJvb3QsImlzLWluaXRpYWxpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCIpLHIuc2V0KDMpLHRoaXMuZW1pdCgicmVhZHkiKSx0aGlzfSxuLnN5bmM9ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKG4pe3JldHVybiB0aGlzLnNwbGlkZXMucHVzaCh7c3BsaWRlOm59KSxuLnNwbGlkZXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B1c2goe3NwbGlkZTp0aGlzLGlzUGFyZW50OiEwfSksdGhpcy5zdGF0ZS5pcygzKSYmKHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLmkuU3luYy5yZW1vdW50KCksbi5Db21wb25lbnRzLlN5bmMucmVtb3VudCgpKSx0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc30sbi5nbz1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5pLkNvbnRyb2xsZXIuZ28obiksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXN9LG4ub249ZnVuY3Rpb24obix0KXtyZXR1cm4gdGhpcy5ldmVudC5vbihuLHQpLHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzfSxuLm9mZj1mdW5jdGlvbihuKXtyZXR1cm4gdGhpcy5ldmVudC5vZmYobiksdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid9LG4uZW1pdD1mdW5jdGlvbihuKXt2YXIgdDtyZXR1cm4odD10aGlzLmV2ZW50KS5lbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5hcHBseSh0LFtuXS5jb25jYXQobyhhcmd1bWVudHMsMSkpKSx0aGlzfSxuLmFkZD1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24obix0KXtyZXR1cm4gdGhpcy5pLlNsaWRlcy5hZGQobix0KSx0aGlzfSxuLnJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmU9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuaS5TbGlkZXMucmVtb3ZlKG4pLHRoaXN9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxuLmlzPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm4udHlwZT09PW59LG4ucmVmcmVzaD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KEopLHRoaXN9LG4uZGVzdHJveT1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24odCl7dm9pZCAwPT09dCYmKHQ9ITApO3ZhciBuPXRoaXMuZXZlbnQsaT10aGlzLnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZTtyZXR1cm4gaS5pcygxKT9RKHRoaXMpLm9uKCJyZWFkeSIsdGhpcy5kZXN0cm95LmInCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kKHRoaXMsdCkpOih3KHRoaXMuaSxmdW5jdGlvbihuKXtuLmRlc3Ryb3kmJm4uZGVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3kodCl9LCEwKSxuLmVtaXQoYSksbi5kZXN0cm95KCksdCYmRCh0aGlzLnNwbGlkZXMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxpLnNldCg3KSksdGhpc30sSnQoaSxbe2tleToib3B0aW9ucyIsZ2V0OmZ1bmN0aW9uKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGIne3JldHVybiB0aGlzLm59LHNldDpmdW5jdGlvbihuKXt0aGlzLmkuTWVkaWEuc2V0KG4sIScKICAgICAgICAgICAgICAgICAgICAgICAgYicwLCEwKX19LHtrZXk6Imxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaS5TJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzLmdldExlbmd0aCghMCl9fSx7a2V5OiJpbmRleCIsZ2V0OmZ1bmN0aW9uKCl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB0aGlzLmkuQ29udHJvbGxlci5nZXRJbmRleCgpfX1dKSxpfSgpO3JldHVybiB0LicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWZhdWx0cz17fSx0LlNUQVRFUz1yLHR9LCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPXQoKToiZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUodCk6KG49InVuZGVmaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOm58fHNlbGYpLlNwbGlkZT10JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3BsaWRlLm1pbi5qcy5tYXBcbicsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUubWluLmpzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInZnVuY3Rpb24gcihuLHQpe2Zvcih2YXIgaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I9dFtpXTtyLmVudW1lcmFibGU9ci5lbnVtZXJhYmxlfHwhMSxyLmNvbmZpZ3VyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVByb3BlcnR5KG4sci5rZXkscil9fWZ1bmN0aW9uIEp0KG4sdCxpKXt0JiZyKG4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3RvdHlwZSx0KSxpJiZyKG4saSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pfVxuLyohXG4gKiBTcGxpZGUuanNcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBWZXJzaW9uICA6IDQuMS40XG4gKiBMaWNlbnNlICA6IE1JVFxuICogQ29weXJpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodDogMjAyMiBOYW90b3NoaSBGdWppdGFcbiAqL1xudmFyIG4sdDtuPXRoaXMsdD1mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIHY9IihwcmVmZXJzLXJlZHVjZWQtbW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbjogcmVkdWNlKSIsRz00LHJuPTUscj17Q1JFQVRFRDoxLE1PVU5URUQ6MixJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RMRTozLE1PVklORzpHLFNDUk9MTElORzpybixEUkFHR0lORzo2LERFU1RST1lFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6N307ZnVuY3Rpb24gRChuKXtuLmxlbmd0aD0wfWZ1bmN0aW9uIG8obix0LGkpe3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobix0LGkpfWZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBSKG4pe3JldHVybiBuLmJpbmQuYXBwbHkobixbbnVsbF0uY29uY2F0KG8oYXJndScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50cywxKSkpfWZ1bmN0aW9uIG9uKCl7fXZhciBwPXNldFRpbWVvdXQ7ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGgobil7cmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShuKX1mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdShuLHQpe3JldHVybiB0eXBlb2YgdD09PW59ZnVuY3Rpb24gdW4obil7cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiFjKG4pJiZ1KCJvYmplY3QiLG4pfXZhciBlPUFycmF5LmlzQXJyYXkseD1SKHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJmdW5jdGlvbiIpLEM9Uih1LCJzdHJpbmciKSxlbj1SKHUsInVuZGVmaW5lZCIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztmdW5jdGlvbiBjKG4pe3JldHVybiBudWxsPT09bn1mdW5jdGlvbiBtKG4pe3RyeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7cmV0dXJuIG4gaW5zdGFuY2VvZihuLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHx3aW5kb3cpLkhUTUxFbGVtZW50fWNhdGNoKG4pe3JldHVybiExfX1mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24geShuKXtyZXR1cm4gZShuKT9uOltuXX1mdW5jdGlvbiBnKG4sdCl7eShuKS5mbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaCh0KX1mdW5jdGlvbiBiKG4sdCl7cmV0dXJuLTE8bi5pbmRleE9mKHQpfWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBrKG4sdCl7cmV0dXJuIG4ucHVzaC5hcHBseShuLHkodCkpLG59ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIEEodCxuLGkpe3QmJmcobixmdW5jdGlvbihuKXtuJiZ0LmNsYXNzTGlzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbaT8iYWRkIjoicmVtb3ZlIl0obil9KX1mdW5jdGlvbiBNKG4sdCl7QShuLEModCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInP3Quc3BsaXQoIiAiKTp0LCEwKX1mdW5jdGlvbiBMKG4sdCl7Zyh0LG4uYXBwZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NoaWxkLmJpbmQobikpfWZ1bmN0aW9uIE8obixpKXtnKG4sZnVuY3Rpb24obil7dicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciB0PShpfHxuKS5wYXJlbnROb2RlO3QmJnQuaW5zZXJ0QmVmb3JlKG4saSl9KX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gY24obix0KXtyZXR1cm4gbShuKSYmKG4ubXNNYXRjaGVzU2VsZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yfHxuLm1hdGNoZXMpLmNhbGwobix0KX1mdW5jdGlvbiBTKG4sdCl7bj1uP28obicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuY2hpbGRyZW4pOltdO3JldHVybiB0P24uZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gY24obix0KX0pOm59ZnVuY3Rpb24gZm4obix0KXtyZXR1cm4gdD9TKG4sdClbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBdOm4uZmlyc3RFbGVtZW50Q2hpbGR9dmFyIEU9T2JqZWN0LmtleXM7ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHcodCxpLG4pe3QmJihuP0UodCkucmV2ZXJzZSgpOkUodCkpLmZvckVhY2goZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKG4peyJfX3Byb3RvX18iIT09biYmaSh0W25dLG4pfSl9ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuKHIpe3JldHVybiBvKGFyZ3VtZW50cywxKS5mb3JFYWNoKGZ1bmN0aW9uKGkpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3KGksZnVuY3Rpb24obix0KXtyW3RdPWlbdF19KX0pLHJ9ZnVuY3Rpb24gZChpKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIG8oYXJndW1lbnRzLDEpLmZvckVhY2goZnVuY3Rpb24obil7dyhuLGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbihuLHQpe2Uobik/aVt0XT1uLnNsaWNlKCk6dW4obik/aVt0XT1kKHt9LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bihpW3RdKT9pW3RdOnt9LG4pOmlbdF09bn0pfSksaX1mdW5jdGlvbiBzbih0LG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXtnKG58fEUodCksZnVuY3Rpb24obil7ZGVsZXRlIHRbbl19KX1mdW5jdGlvbiBQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuLGkpe2cobixmdW5jdGlvbih0KXtnKGksZnVuY3Rpb24obil7dCYmdC5yZW1vdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlQXR0cmlidXRlKG4pfSl9KX1mdW5jdGlvbiBJKGksdCxyKXt1bih0KT93KHQsZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKG4sdCl7SShpLHQsbil9KTpnKGksZnVuY3Rpb24obil7YyhyKXx8IiI9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09cj9QKG4sdCk6bi5zZXRBdHRyaWJ1dGUodCxTdHJpbmcocikpfSl9ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGoobix0LGkpe249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuKTtyZXR1cm4gdCYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJihDKHQpP006SSkobix0KSxpJiZMKGksbiksbn1mdW5jdGlvbiBfKG4sdCxpKXtpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YoZW4oaSkpcmV0dXJuIGdldENvbXB1dGVkU3R5bGUobilbdF07YyhpKXx8KG4ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlW3RdPSIiK2kpfWZ1bmN0aW9uIGxuKG4sdCl7XyhuLCJkaXNwbGF5Iix0KX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZG4obil7bi5zZXRBY3RpdmUmJm4uc2V0QWN0aXZlKCl8fG4uZm9jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSl9ZnVuY3Rpb24geihuLHQpe3JldHVybiBuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRBdHRyaWJ1dGUodCl9ZnVuY3Rpb24gdm4obix0KXtyZXR1cm4gbiYmbi5jbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3NMaXN0LmNvbnRhaW5zKHQpfWZ1bmN0aW9uIE4obil7cmV0dXJuIG4uZ2V0Qm91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kaW5nQ2xpZW50UmVjdCgpfWZ1bmN0aW9uIFQobil7ZyhuLGZ1bmN0aW9uKG4peycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduJiZuLnBhcmVudE5vZGUmJm4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0pfWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBobihuKXtyZXR1cm4gZm4oKG5ldyBET01QYXJzZXIpLnBhcnNlRnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21TdHJpbmcobiwidGV4dC9odG1sIikuYm9keSl9ZnVuY3Rpb24gRihuLHQpe24ucCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXZlbnREZWZhdWx0KCksdCYmKG4uc3RvcFByb3BhZ2F0aW9uKCksbi5zdG9wSW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfWZ1bmN0aW9uIHBuKG4sdCl7cmV0dXJuIG4mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyZuLnF1ZXJ5U2VsZWN0b3IodCl9ZnVuY3Rpb24gZ24obix0KXtyZXR1cm4gdD9vKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLnF1ZXJ5U2VsZWN0b3JBbGwodCkpOltdfWZ1bmN0aW9uIFgobix0KXtBKG4sdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInITEpfWZ1bmN0aW9uIG1uKG4pe3JldHVybiBuLnRpbWVTdGFtcH1mdW5jdGlvbiBXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuKXtyZXR1cm4gQyhuKT9uOm4/bisicHgiOiIifXZhciB5bj0ic3BsaWRlIixmPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciZGF0YS0iK3luO2Z1bmN0aW9uIGJuKG4sdCl7aWYoIW4pdGhyb3cgbmV3IEVycm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncigiWyIreW4rIl0gIisodHx8IiIpKX12YXIgWT1NYXRoLm1pbix3bj1NYXRoLm1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gseG49TWF0aC5mbG9vcixrbj1NYXRoLmNlaWwsVT1NYXRoLmFicztmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU24obix0LGkpe3JldHVybiBVKG4tdCk8aX1mdW5jdGlvbiBFbihuLHQsaSxyKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIG89WSh0LGkpLHQ9d24odCxpKTtyZXR1cm4gcj9vPG4mJm48dDpvPD1uJiZuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzw9dH1mdW5jdGlvbiBxKG4sdCxpKXt2YXIgcj1ZKHQsaSksdD13bih0LGkpO3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gWSh3bihyLG4pLHQpfWZ1bmN0aW9uIExuKG4pe3JldHVybigwPG4pLShuPDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKX1mdW5jdGlvbiBPbih0LG4pe3JldHVybiBnKG4sZnVuY3Rpb24obil7dD10LnJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYWNlKCIlcyIsIiIrbil9KSx0fWZ1bmN0aW9uIEFuKG4pe3JldHVybiBuPDEwPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciMCIrbjoiIitufXZhciBfbj17fTtmdW5jdGlvbiB6bigpe3ZhciBjPVtdO2Z1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpKG4saSxyKXtnKG4sZnVuY3Rpb24odCl7dCYmZyhpLGZ1bmN0aW9uKG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tuLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihuKXtuPW4uc3BsaXQoIi4iKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7cih0LG5bMF0sblsxXSl9KX0pfSl9cmV0dXJue2JpbmQ6ZnVuY3Rpb24obix0LHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGUpe2kobix0LGZ1bmN0aW9uKG4sdCxpKXt2YXIgcj0iYWRkRXZlbnRMaXN0ZW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IiaW4gbixvPXI/bi5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQobix0LHUsZSk6bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucmVtb3ZlTGlzdGVuZXIuYmluZChuLHUpO3I/bi5hZGRFdmVudExpc3RlbmVyKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHUsZSk6bi5hZGRMaXN0ZW5lcih1KSxjLnB1c2goW24sdCxpLHUsb10pfSl9LHVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JpbmQ6ZnVuY3Rpb24obix0LG8pe2kobix0LGZ1bmN0aW9uKHQsaSxyKXtjPWMuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4hIShuWzBdIT09dHx8blsxXSE9PWl8fG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWzJdIT09cnx8byYmblszXSE9PW8pfHwobls0XSgpLCExKX0pfSl9LGRpc3BhdGNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpmdW5jdGlvbihuLHQsaSl7dmFyIHI7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDdXN0b21FdmVudD9yPW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWw6aX0pOihyPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpKS5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pdEN1c3RvbUV2ZW50KHQsITAsITEsaSksbi5kaXNwYXRjaEV2ZW50KHIpLHJ9LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95OmZ1bmN0aW9uKCl7Yy5mb3JFYWNoKGZ1bmN0aW9uKG4pe25bNF0oKX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxEKGMpfX19dmFyIEI9Im1vdW50ZWQiLEg9Im1vdmUiLERuPSJtb3ZlZCIsTW49JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJjbGljayIsUG49ImFjdGl2ZSIsSW49ImluYWN0aXZlIixSbj0idmlzaWJsZSIsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduPSJoaWRkZW4iLEo9InJlZnJlc2giLEs9InVwZGF0ZWQiLGpuPSJyZXNpemUiLE4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj0icmVzaXplZCIsVG49InNjcm9sbCIsVj0ic2Nyb2xsZWQiLGE9ImRlc3Ryb3kiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHbj0ibmF2aWdhdGlvbjptb3VudGVkIixGbj0iYXV0b3BsYXk6cGxheSIsWG49IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdXRvcGxheTpwYXVzZSIsV249Imxhenlsb2FkOmxvYWRlZCIsWW49InNrIixVbj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInNoIjtmdW5jdGlvbiBRKG4pe3ZhciBpPW4/bi5ldmVudC5idXM6ZG9jdW1lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxyPXpuKCk7cmV0dXJuIG4mJm4uZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Lm9uKGEsci5kZXN0cm95KSxhbihyLHtidXM6aSxvbjpmdW5jdGlvbihuLHQpe3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmJpbmQoaSx5KG4pLmpvaW4oIiAiKSxmdW5jdGlvbihuKXt0LmFwcGx5KHQsZShuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5kZXRhaWwpP24uZGV0YWlsOltdKX0pfSxvZmY6UihyLnVuYmluZCxpKSxlbWl0OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbihuKXtyLmRpc3BhdGNoKGksbixvKGFyZ3VtZW50cywxKSl9fSl9ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHFuKHQsbixpLHIpe3ZhciBvLHUsZT1EYXRlLm5vdyxjPTAsZj0hMCxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0wO2Z1bmN0aW9uIHMoKXtpZighZil7aWYoYz10P1koKGUoKS1vKS90LDEpOjEsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJmkoYyksMTw9YyYmKG4oKSxvPWUoKSxyJiYrK2E+PXIpKXJldHVybiBsKCk7dT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaChzKX19ZnVuY3Rpb24gbCgpe2Y9ITB9ZnVuY3Rpb24gZCgpe3UmJmNhbmNlbEFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ltYXRpb25GcmFtZSh1KSxmPSEodT1jPTApfXJldHVybntzdGFydDpmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobil7bnx8ZCgpLG89ZSgpLShuP2MqdDowKSxmPSExLHU9aChzKX0scmV3aW5kOmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbigpe289ZSgpLGM9MCxpJiZpKGMpfSxwYXVzZTpsLGNhbmNlbDpkLHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6ZnVuY3Rpb24obil7dD1ufSxpc1BhdXNlZDpmdW5jdGlvbigpe3JldHVybiBmfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9fWZ1bmN0aW9uIHMobil7dmFyIHQ9bjtyZXR1cm57c2V0OmZ1bmN0aW9uKG4pe3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPW59LGlzOmZ1bmN0aW9uKG4pe3JldHVybiBiKHkobiksdCl9fX12YXIgbj0iQXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293IixCbj1uKyJMZWZ0IixIbj1uKyJSaWdodCIsdD1uKyJVcCIsbj1uKyJEb3duIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSm49InR0YiIsbD17d2lkdGg6WyJoZWlnaHQiXSxsZWZ0OlsidG9wIiwicmlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIl0scmlnaHQ6WyJib3R0b20iLCJsZWZ0Il0seDpbInkiXSxYOlsiWSJdLFk6WyJYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJdLEFycm93TGVmdDpbdCxIbl0sQXJyb3dSaWdodDpbbixCbl19O3ZhciBaPSJybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZSIsJD0idGFiaW5kZXgiLGk9ImFyaWEtIixLbj1pKyJjb250cm9scyIsVm49aSsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImN1cnJlbnQiLFFuPWkrInNlbGVjdGVkIixubj1pKyJsYWJlbCIsWm49aSsibGFiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbGVkYnkiLCRuPWkrImhpZGRlbiIsbnQ9aSsib3JpZW50YXRpb24iLHR0PWkrIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb2xlZGVzY3JpcHRpb24iLGl0PWkrImxpdmUiLHJ0PWkrImJ1c3kiLG90PWkrImEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9taWMiLHV0PVtaLCQsImRpc2FibGVkIixLbixWbixubixabiwkbixudCx0dF0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2k9eW4rIl9fIixldD15bixjdD1pKyJ0cmFjayIsZnQ9aSsibGlzdCIsYXQ9aSsicycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlIixzdD1hdCsiLS1jbG9uZSIsbHQ9YXQrIl9fY29udGFpbmVyIixkdD1pKyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyb3dzIix2dD1pKyJhcnJvdyIsaHQ9dnQrIi0tcHJldiIscHQ9dnQrIi0tbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QiLGd0PWkrInBhZ2luYXRpb24iLG10PWd0KyJfX3BhZ2UiLHl0PWkrInByb2dyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcyIrIl9fYmFyIixidD1pKyJ0b2dnbGUiLHd0PWkrInNyIix0bj0iaXMtYWN0aXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSIseHQ9ImlzLXByZXYiLGt0PSJpcy1uZXh0IixTdD0iaXMtdmlzaWJsZSIsRXQ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJpcy1sb2FkaW5nIixMdD0iaXMtZm9jdXMtaW4iLE90PSJpcy1vdmVyZmxvdyIsQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0PVt0bixTdCx4dCxrdCxFdCxMdCxPdF07dmFyIF90PSJ0b3VjaHN0YXJ0IG1vdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWRvd24iLHp0PSJ0b3VjaG1vdmUgbW91c2Vtb3ZlIixEdD0idG91Y2hlbmQgdG91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoY2FuY2VsIG1vdXNldXAgY2xpY2siO3ZhciBNdD0ic2xpZGUiLFB0PSJsb29wIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSXQ9ImZhZGUiO2Z1bmN0aW9uIFJ0KG8scix0LHUpe3ZhciBlLG49UShvKSxpPW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLm9uLGM9bi5lbWl0LGY9bi5iaW5kLGE9by5Db21wb25lbnRzLHM9by5yb290LGw9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28ub3B0aW9ucyxkPWwuaXNOYXZpZ2F0aW9uLHY9bC51cGRhdGVPbk1vdmUsaD1sLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpMThuLHA9bC5wYWdpbmF0aW9uLGc9bC5zbGlkZUZvY3VzLG09YS5EaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnJlc29sdmUseT16KHUsInN0eWxlIiksYj16KHUsbm4pLHc9LTE8dCx4PWZuKHUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIuIitsdCk7ZnVuY3Rpb24gaygpe3ZhciBuPW8uc3BsaWRlcy5tYXAoZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKG4pe249bi5zcGxpZGUuQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQocik7cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBuP24uc2xpZGUuaWQ6IiJ9KS5qb2luKCIgIik7SSh1LG5uLE9uKGguc2xpZGVYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywodz90OnIpKzEpKSxJKHUsS24sbiksSSh1LFosZz8iYnV0dG9uIjoiIiksZyYmUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodSx0dCl9ZnVuY3Rpb24gUygpe2V8fEUoKX1mdW5jdGlvbiBFKCl7dmFyIG4sdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaTtlfHwobj1vLmluZGV4LChpPUwoKSkhPT12bih1LHRuKSYmKEEodSx0bixpKSxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh1LFZuLGQmJml8fCIiKSxjKGk/UG46SW4sTykpLGk9ZnVuY3Rpb24oKXtpZihvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyhJdCkpcmV0dXJuIEwoKTt2YXIgbj1OKGEuRWxlbWVudHMudHJhY2spLHQ9TignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndSksaT1tKCJsZWZ0IiwhMCkscj1tKCJyaWdodCIsITApO3JldHVybiB4bihuW2ldJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk8PWtuKHRbaV0pJiZ4bih0W3JdKTw9a24obltyXSl9KCksdD0haSYmKCFMKCl8fCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3KSxvLnN0YXRlLmlzKFtHLHJuXSl8fEkodSwkbix0fHwiIiksSShnbih1LGwuZm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3VzYWJsZU5vZGVzfHwiIiksJCx0Py0xOiIiKSxnJiZJKHUsJCx0Py0xOjApLGkhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09dm4odSxTdCkmJihBKHUsU3QsaSksYyhpP1JuOkNuLE8pKSxpfHxkb2N1bWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuYWN0aXZlRWxlbWVudCE9PXV8fCh0PWEuU2xpZGVzLmdldEF0KG8uaW5kZXgpKSYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJmRuKHQuc2xpZGUpLEEodSx4dCxyPT09bi0xKSxBKHUsa3Qscj09PW4rMSkpfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBMKCl7dmFyIG49by5pbmRleDtyZXR1cm4gbj09PXJ8fGwuY2xvbmVTdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdHVzJiZuPT09dH12YXIgTz17aW5kZXg6cixzbGlkZUluZGV4OnQsc2xpZGU6dSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29udGFpbmVyOngsaXNDbG9uZTp3LG1vdW50OmZ1bmN0aW9uKCl7d3x8KHUuaWQ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuaWQrIi1zbGlkZSIrQW4ocisxKSxJKHUsWixwPyJ0YWJwYW5lbCI6Imdyb3VwIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLEkodSx0dCxoLnNsaWRlKSxJKHUsbm4sYnx8T24oaC5zbGlkZUxhYmVsLFtyKzEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG8ubGVuZ3RoXSkpKSxmKHUsImNsaWNrIixSKGMsTW4sTykpLGYodSwia2V5ZG93JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24iLFIoYyxZbixPKSksaShbRG4sVW4sVl0sRSksaShHbixrKSx2JiZpKEgsUyl9LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95OmZ1bmN0aW9uKCl7ZT0hMCxuLmRlc3Ryb3koKSxYKHUsQXQpLFAodSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXQpLEkodSwic3R5bGUiLHkpLEkodSxubixifHwiIil9LHVwZGF0ZTpFLHN0eWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpmdW5jdGlvbihuLHQsaSl7XyhpJiZ4fHx1LG4sdCl9LGlzV2l0aGluOmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbihuLHQpe3JldHVybiBuPVUobi1yKSwobj13fHwhbC5yZXdpbmQmJiFvLmlzKFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCk/bjpZKG4sby5sZW5ndGgtbikpPD10fX07cmV0dXJuIE99dmFyIEN0PWYrIi1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJ2YWwiO3ZhciBqdD17cGFzc2l2ZTohMSxjYXB0dXJlOiEwfTt2YXIgTnQ9eycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGFjZWJhcjoiICIsUmlnaHQ6SG4sTGVmdDpCbixVcDp0LERvd246bn07ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIFR0KG4pe3JldHVybiBuPUMobik/bjpuLmtleSxOdFtuXXx8bn12YXIgR3Q9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJrZXlkb3duIjt2YXIgRnQ9ZisiLWxhenkiLFh0PUZ0KyItc3Jjc2V0IixXdD0iWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciK0Z0KyJdLCBbIitYdCsiXSI7dmFyIFl0PVsiICIsIkVudGVyIl07dmFyIFV0PU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxNZWRpYTpmdW5jdGlvbihyLG4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28pe3ZhciB1PXIuc3RhdGUsdD1vLmJyZWFrcG9pbnRzfHx7fSxlPW8ucmVkdWNlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNb3Rpb258fHt9LGk9em4oKSxjPVtdO2Z1bmN0aW9uIGYobil7biYmaS5kZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpfWZ1bmN0aW9uIGEobix0KXt0PW1hdGNoTWVkaWEodCk7aS5iaW5kKHQsImNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuZ2UiLHMpLGMucHVzaChbbix0XSl9ZnVuY3Rpb24gcygpe3ZhciBuPXUuaXMoNycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLHQ9by5kaXJlY3Rpb24saT1jLnJlZHVjZShmdW5jdGlvbihuLHQpe3JldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZChuLHRbMV0ubWF0Y2hlcz90WzBdOnt9KX0se30pO3NuKG8pLGwoaSksby5kZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JveT9yLmRlc3Ryb3koImNvbXBsZXRlbHkiPT09by5kZXN0cm95KTpuPyhmKCEwKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsci5tb3VudCgpKTp0IT09by5kaXJlY3Rpb24mJnIucmVmcmVzaCgpfWZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBsKG4sdCxpKXtkKG8sbiksdCYmZChPYmplY3QuZ2V0UHJvdG90eXBlT2YobyksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pLCFpJiZ1LmlzKDEpfHxyLmVtaXQoSyxvKX1yZXR1cm57c2V0dXA6ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCl7dmFyIGk9Im1pbiI9PT1vLm1lZGlhUXVlcnk7RSh0KS5zb3J0KGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbihuLHQpe3JldHVybiBpPytuLSt0Oit0LStufSkuZm9yRWFjaChmdW5jdGlvbihuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7YSh0W25dLCIoIisoaT8ibWluIjoibWF4IikrIi13aWR0aDoiK24rInB4KSIpfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGEoZSx2KSxzKCl9LGRlc3Ryb3k6ZixyZWR1Y2U6ZnVuY3Rpb24obil7bWF0Y2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWVkaWEodikubWF0Y2hlcyYmKG4/ZChvLGUpOnNuKG8sRShlKSkpfSxzZXQ6bH19JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxEaXJlY3Rpb246ZnVuY3Rpb24obix0LG8pe3JldHVybntyZXNvbHZlOmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbihuLHQsaSl7dmFyIHI9InJ0bCIhPT0oaT1pfHxvLmRpcmVjdGlvbil8fHQ/aT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT1Kbj8wOi0xOjE7cmV0dXJuIGxbbl0mJmxbbl1bcl18fG4ucmVwbGFjZSgvd2lkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RofGxlZnR8cmlnaHQvaSxmdW5jdGlvbihuLHQpe249bFtuLnRvTG93ZXJDYXNlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpXVtyXXx8bjtyZXR1cm4gMDx0P24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpY2UoMSk6bn0pfSxvcmllbnQ6ZnVuY3Rpb24obil7cmV0dXJuIG4qKCJydGwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09PW8uZGlyZWN0aW9uPzE6LTEpfX19LEVsZW1lbnRzOmZ1bmN0aW9uKG4sdCxpKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7dmFyIHIsbyx1LGU9UShuKSxjPWUub24sZj1lLmJpbmQsYT1uLnJvb3Qscz1pLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMThuLGw9e30sZD1bXSx2PVtdLGg9W107ZnVuY3Rpb24gcCgpe3I9eSgiLiIrY3QpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxvPWZuKHIsIi4iK2Z0KSxibihyJiZvLCJBIHRyYWNrL2xpc3QgZWxlbWVudCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbWlzc2luZy4iKSxrKGQsUyhvLCIuIithdCsiOm5vdCguIitzdCsiKSIpKSx3KHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyb3dzOmR0LHBhZ2luYXRpb246Z3QscHJldjpodCxuZXh0OnB0LGJhcjp5dCx0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29nZ2xlOmJ0fSxmdW5jdGlvbihuLHQpe2xbdF09eSgiLiIrbil9KSxhbihsLHtybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdDphLHRyYWNrOnIsbGlzdDpvLHNsaWRlczpkfSk7dmFyIG49YS5pZHx8ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKG4pe3JldHVybiIiK24rQW4oX25bbl09KF9uW25dfHwwKSsxKX0oeW4pLHQ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2kucm9sZTthLmlkPW4sci5pZD1yLmlkfHxuKyItdHJhY2siLG8uaWQ9by5pZHx8bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrIi1saXN0IiwheihhLFopJiYiU0VDVElPTiIhPT1hLnRhZ05hbWUmJnQmJkkoYSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWix0KSxJKGEsdHQscy5jYXJvdXNlbCksSShvLFosInByZXNlbnRhdGlvbiIpLG0oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9ZnVuY3Rpb24gZyhuKXt2YXIgdD11dC5jb25jYXQoInN0eWxlIik7RChkKSxYKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhLHYpLFgocixoKSxQKFtyLG9dLHQpLFAoYSxuP3Q6WyJzdHlsZSIsdHRdKX1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gbSgpe1goYSx2KSxYKHIsaCksdj1iKGV0KSxoPWIoY3QpLE0oYSx2KSxNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhyLGgpLEkoYSxubixpLmxhYmVsKSxJKGEsWm4saS5sYWJlbGxlZGJ5KX1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24geShuKXtuPXBuKGEsbik7cmV0dXJuIG4mJmZ1bmN0aW9uKG4sdCl7aWYoeCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi5jbG9zZXN0KSlyZXR1cm4gbi5jbG9zZXN0KHQpO2Zvcih2YXIgaT1uO2kmJjE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09aS5ub2RlVHlwZSYmIWNuKGksdCk7KWk9aS5wYXJlbnRFbGVtZW50O3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaX0obiwiLiIrZXQpPT09YT9uOnZvaWQgMH1mdW5jdGlvbiBiKG4pe3JldHVyblsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbisiLS0iK2kudHlwZSxuKyItLSIraS5kaXJlY3Rpb24saS5kcmFnJiZuKyItLWRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZ2FibGUiLGkuaXNOYXZpZ2F0aW9uJiZuKyItLW5hdiIsbj09PWV0JiZ0bl19cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBhbihsLHtzZXR1cDpwLG1vdW50OmZ1bmN0aW9uKCl7YyhKLGcpLGMoSiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncCksYyhLLG0pLGYoZG9jdW1lbnQsX3QrIiBrZXlkb3duIixmdW5jdGlvbihuKXt1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0ia2V5ZG93biI9PT1uLnR5cGV9LHtjYXB0dXJlOiEwfSksZihhLCJmb2N1c2luIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZnVuY3Rpb24oKXtBKGEsTHQsISF1KX0pfSxkZXN0cm95Omd9KX0sU2xpZGVzOmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbihyLG8sdSl7dmFyIG49UShyKSx0PW4ub24sZT1uLmVtaXQsYz1uLmJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kLGY9KG49by5FbGVtZW50cykuc2xpZGVzLGE9bi5saXN0LHM9W107ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGkoKXtmLmZvckVhY2goZnVuY3Rpb24obix0KXtkKG4sdCwtMSl9KX1mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gbCgpe2goZnVuY3Rpb24obil7bi5kZXN0cm95KCl9KSxEKHMpfWZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkKG4sdCxpKXt0PVJ0KHIsdCxpLG4pO3QubW91bnQoKSxzLnB1c2godCkscy5zbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydChmdW5jdGlvbihuLHQpe3JldHVybiBuLmluZGV4LXQuaW5kZXh9KX1mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gdihuKXtyZXR1cm4gbj9wKGZ1bmN0aW9uKG4pe3JldHVybiFuLmlzQ2xvbmV9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6c31mdW5jdGlvbiBoKG4sdCl7dih0KS5mb3JFYWNoKG4pfWZ1bmN0aW9uIHAodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3JldHVybiBzLmZpbHRlcih4KHQpP3Q6ZnVuY3Rpb24obil7cmV0dXJuIEModCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInP2NuKG4uc2xpZGUsdCk6Yih5KHQpLG4uaW5kZXgpfSl9cmV0dXJue21vdW50OmZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbigpe2koKSx0KEosbCksdChKLGkpfSxkZXN0cm95OmwsdXBkYXRlOmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbigpe2goZnVuY3Rpb24obil7bi51cGRhdGUoKX0pfSxyZWdpc3RlcjpkLGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQ6dixnZXRJbjpmdW5jdGlvbihuKXt2YXIgdD1vLkNvbnRyb2xsZXIsaT10LnRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4KG4pLHI9dC5oYXNGb2N1cygpPzE6dS5wZXJQYWdlO3JldHVybiBwKGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihuKXtyZXR1cm4gRW4obi5pbmRleCxpLGkrci0xKX0pfSxnZXRBdDpmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24obil7cmV0dXJuIHAobilbMF19LGFkZDpmdW5jdGlvbihuLG8pe2cobixmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24obil7dmFyIHQsaSxyO20obj1DKG4pP2huKG4pOm4pJiYoKHQ9ZltvXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpP08obix0KTpMKGEsbiksTShuLHUuY2xhc3Nlcy5zbGlkZSksdD1uLGk9UihlLGonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiksdD1nbih0LCJpbWciKSwocj10Lmxlbmd0aCk/dC5mb3JFYWNoKGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuKXtjKG4sImxvYWQgZXJyb3IiLGZ1bmN0aW9uKCl7LS1yfHxpKCl9KX0pOmkoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfSksZShKKX0scmVtb3ZlOmZ1bmN0aW9uKG4pe1QocChuKS5tYXAoZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG4pe3JldHVybiBuLnNsaWRlfSkpLGUoSil9LGZvckVhY2g6aCxmaWx0ZXI6cCxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGU6ZnVuY3Rpb24odCxpLHIpe2goZnVuY3Rpb24obil7bi5zdHlsZSh0LGkscicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpfSl9LGdldExlbmd0aDpmdW5jdGlvbihuKXtyZXR1cm4obj9mOnMpLmxlbmd0aH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGlzRW5vdWdoOmZ1bmN0aW9uKCl7cmV0dXJuIHMubGVuZ3RoPnUucGVyUGFnZX19JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sTGF5b3V0OmZ1bmN0aW9uKHQsbixpKXt2YXIgcixvLHUsZT0oYT1RKHQpKS5vbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsYz1hLmJpbmQsZj1hLmVtaXQsYT1uLlNsaWRlcyxzPW4uRGlyZWN0aW9uLnJlc28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHZlLGw9KG49bi5FbGVtZW50cykucm9vdCxkPW4udHJhY2ssdj1uLmxpc3QsaD1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5nZXRBdCxwPWEuc3R5bGU7ZnVuY3Rpb24gZygpe3I9aS5kaXJlY3Rpb249PT1KbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXyhsLCJtYXhXaWR0aCIsVyhpLndpZHRoKSksXyhkLHMoInBhZGRpbmdMZWZ0IiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHkoITEpKSxfKGQscygicGFkZGluZ1JpZ2h0IikseSghMCkpLG0oITApfWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBtKG4pe3ZhciB0PU4obCk7IW4mJm8ud2lkdGg9PT10LndpZHRoJiZvLmhlaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQ9PT10LmhlaWdodHx8KF8oZCwiaGVpZ2h0IixmdW5jdGlvbigpe3ZhciBuPSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIjtyJiYoYm4obj1iKCksImhlaWdodCBvciBoZWlnaHRSYXRpbyBpcyBtaXNzaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4iKSxuPSJjYWxjKCIrbisiIC0gIit5KCExKSsiIC0gIit5KCEwKSsiKSIpO3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gbn0oKSkscChzKCJtYXJnaW5SaWdodCIpLFcoaS5nYXApKSxwKCJ3aWR0aCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGkuYXV0b1dpZHRoP251bGw6VyhpLmZpeGVkV2lkdGgpfHwocj8iIjp3KCkpKSxwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygiaGVpZ2h0IixXKGkuZml4ZWRIZWlnaHQpfHwocj9pLmF1dG9IZWlnaHQ/bnVsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6dygpOmIoKSksITApLG89dCxmKE5uKSx1IT09KHU9TygpKSYmKEEobCxPdCx1KSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZigib3ZlcmZsb3ciLHUpKSl9ZnVuY3Rpb24geShuKXt2YXIgdD1pLnBhZGRpbmcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ249cyhuPyJyaWdodCI6ImxlZnQiKTtyZXR1cm4gdCYmVyh0W25dfHwodW4odCk/MCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6dCkpfHwiMHB4In1mdW5jdGlvbiBiKCl7cmV0dXJuIFcoaS5oZWlnaHR8fE4odiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLndpZHRoKmkuaGVpZ2h0UmF0aW8pfWZ1bmN0aW9uIHcoKXt2YXIgbj1XKGkuZ2FwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7cmV0dXJuImNhbGMoKDEwMCUiKyhuJiYiICsgIituKSsiKS8iKyhpLnBlclBhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlfHwxKSsobiYmIiAtICIrbikrIikifWZ1bmN0aW9uIHgoKXtyZXR1cm4gTih2KVsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncygid2lkdGgiKV19ZnVuY3Rpb24gayhuLHQpe249aChufHwwKTtyZXR1cm4gbj9OJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuLnNsaWRlKVtzKCJ3aWR0aCIpXSsodD8wOkwoKSk6MH1mdW5jdGlvbiBTKG4sdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3ZhciBpLG49aChuKTtyZXR1cm4gbj8obj1OKG4uc2xpZGUpW3MoInJpZ2h0IiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSxpPU4odilbcygibGVmdCIpXSxVKG4taSkrKHQ/MDpMKCkpKTowfWZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFKG4pe3JldHVybiBTKHQubGVuZ3RoLTEpLVMoMCkraygwLG4pfWZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMKCl7dmFyIG49aCgwKTtyZXR1cm4gbiYmcGFyc2VGbG9hdChfKG4uc2xpZGUscygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIm1hcmdpblJpZ2h0IikpKXx8MH1mdW5jdGlvbiBPKCl7cmV0dXJuIHQuaXMoSXQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8RSghMCk+eCgpfXJldHVybnttb3VudDpmdW5jdGlvbigpe3ZhciBuLHQsaTtnKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGMod2luZG93LCJyZXNpemUgbG9hZCIsKG49UihmLGpuKSxpPXFuKHR8fDAsbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCwxKSxmdW5jdGlvbigpe2kuaXNQYXVzZWQoKSYmaS5zdGFydCgpfSkpLGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tLLEpdLGcpLGUoam4sbSl9LHJlc2l6ZTptLGxpc3RTaXplOngsc2xpZGVTaXplOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrLHNsaWRlclNpemU6RSx0b3RhbFNpemU6UyxnZXRQYWRkaW5nOmZ1bmN0aW9uKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXtyZXR1cm4gcGFyc2VGbG9hdChfKGQscygicGFkZGluZyIrKG4/IlJpZ2h0IjoiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xlZnQiKSkpKXx8MH0saXNPdmVyZmxvdzpPfX0sQ2xvbmVzOmZ1bmN0aW9uKGMsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZil7dmFyIHQscj1RKGMpLG49ci5vbixhPWkuRWxlbWVudHMscz1pLlNsaWRlcywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbz1pLkRpcmVjdGlvbi5yZXNvbHZlLGw9W107ZnVuY3Rpb24gdSgpe2lmKG4oSixkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksbihbSyxqbl0sdiksdD1oKCkpe3ZhciBvPXQsdT1zLmdldCgpLnNsaWNlKCksZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9dS5sZW5ndGg7aWYoZSl7Zm9yKDt1Lmxlbmd0aDxvOylrKHUsdSk7ayh1LnNsaWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgtbyksdS5zbGljZSgwLG8pKS5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7dmFyIGk9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q8byxyPWZ1bmN0aW9uKG4sdCl7bj1uLmNsb25lTm9kZSghMCk7cmV0dXJuIE0obicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZi5jbGFzc2VzLmNsb25lKSxuLmlkPWMucm9vdC5pZCsiLWNsb25lIitBbih0KzEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxufShuLnNsaWRlLHQpO2k/TyhyLHVbMF0uc2xpZGUpOkwoYS5saXN0LHIpLGsoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wscikscy5yZWdpc3RlcihyLHQtbysoaT8wOmUpLG4uaW5kZXgpfSl9aS5MYXlvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LnJlc2l6ZSghMCl9fWZ1bmN0aW9uIGQoKXtlKCksdSgpfWZ1bmN0aW9uIGUoKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVChsKSxEKGwpLHIuZGVzdHJveSgpfWZ1bmN0aW9uIHYoKXt2YXIgbj1oKCk7dCE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1uJiYodDxufHwhbikmJnIuZW1pdChKKX1mdW5jdGlvbiBoKCl7dmFyIG4sdD1mLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbG9uZXM7cmV0dXJuIGMuaXMoUHQpP2VuKHQpJiYodD0obj1mW28oImZpeGVkV2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoIildJiZpLkxheW91dC5zbGlkZVNpemUoMCkpJiZrbihOKGEudHJhY2spW28oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJ3aWR0aCIpXS9uKXx8ZltvKCJhdXRvV2lkdGgiKV0mJmMubGVuZ3RofHwyKmYucCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlclBhZ2UpOnQ9MCx0fXJldHVybnttb3VudDp1LGRlc3Ryb3k6ZX19LE1vdmU6ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKHIsYyxvKXt2YXIgZSxuPVEociksdD1uLm9uLGY9bi5lbWl0LGE9ci5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUuc2V0LHU9KG49Yy5MYXlvdXQpLnNsaWRlU2l6ZSxpPW4uZ2V0UGFkZGluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicscz1uLnRvdGFsU2l6ZSxsPW4ubGlzdFNpemUsZD1uLnNsaWRlclNpemUsdj0obj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYy5EaXJlY3Rpb24pLnJlc29sdmUsaD1uLm9yaWVudCxwPShuPWMuRWxlbWVudHMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5saXN0LGc9bi50cmFjaztmdW5jdGlvbiBtKCl7Yy5Db250cm9sbGVyLmlzQnVzeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKXx8KGMuU2Nyb2xsLmNhbmNlbCgpLHkoci5pbmRleCksYy5TbGlkZXMudXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpKX1mdW5jdGlvbiB5KG4pe2IoUyhuLCEwKSl9ZnVuY3Rpb24gYihuLHQpe3IuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKEl0KXx8KHQ9dD9uOmZ1bmN0aW9uKG4pe3t2YXIgdCxpO3IuaXMoUHQpJiYodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ayhuKSxpPXQ+Yy5Db250cm9sbGVyLmdldEVuZCgpLCh0PDB8fGkpJiYobj13KG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGkpKSl9cmV0dXJuIG59KG4pLF8ocCwidHJhbnNmb3JtIiwidHJhbnNsYXRlIit2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygiWCIpKyIoIit0KyJweCkiKSxuIT09dCYmZihVbikpfWZ1bmN0aW9uIHcobix0KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7dmFyIGk9bi1MKHQpLHI9ZCgpO3JldHVybiBuLT1oKHIqKGtuKFUoaSkvcil8fDEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSkqKHQ/MTotMSl9ZnVuY3Rpb24geCgpe2IoRSgpLCEwKSxlLmNhbmNlbCgpfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBrKG4pe2Zvcih2YXIgdD1jLlNsaWRlcy5nZXQoKSxpPTAscj0xLzAsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9MDtvPHQubGVuZ3RoO28rKyl7dmFyIHU9dFtvXS5pbmRleCxlPVUoUyh1LCEwKS0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbik7aWYoIShlPD1yKSlicmVhaztyPWUsaT11fXJldHVybiBpfWZ1bmN0aW9uIFMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24sdCl7dmFyIGk9aChzKG4tMSktKG49biwiY2VudGVyIj09PShpPW8uZm9jdXMpPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobCgpLXUobiwhMCkpLzI6K2kqdShuKXx8MCkpO3JldHVybiB0PyhuPWksbj1vLnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmltU3BhY2UmJnIuaXMoTXQpP3EobiwwLGgoZCghMCktbCgpKSk6bik6aX1mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gRSgpe3ZhciBuPXYoImxlZnQiKTtyZXR1cm4gTihwKVtuXS1OKGcpW25dKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKGkoITEpKX1mdW5jdGlvbiBMKG4pe3JldHVybiBTKG4/Yy5Db250cm9sbGVyLmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRFbmQoKTowLCEhby50cmltU3BhY2UpfXJldHVybnttb3VudDpmdW5jdGlvbigpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tlPWMuVHJhbnNpdGlvbix0KFtCLE5uLEssSl0sbSl9LG1vdmU6ZnVuY3Rpb24obicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdCxpLHIpe3ZhciBvLHU7biE9PXQmJihvPWk8bix1PWgodyhFKCksbykpLG8/MDwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXU6dTw9cFt2KCJzY3JvbGxXaWR0aCIpXS1OKGcpW3YoIndpZHRoIildKSYmKHgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksYih3KEUoKSxpPG4pLCEwKSksYShHKSxmKEgsdCxpLG4pLGUuc3RhcnQodCxmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24oKXthKDMpLGYoRG4sdCxpLG4pLHImJnIoKX0pfSxqdW1wOnksdHJhbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGF0ZTpiLHNoaWZ0OncsY2FuY2VsOngsdG9JbmRleDprLHRvUG9zaXRpb246UyxnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0UG9zaXRpb246RSxnZXRMaW1pdDpMLGV4Y2VlZGVkTGltaXQ6ZnVuY3Rpb24obicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdCl7dD1lbih0KT9FKCk6dDt2YXIgaT0hMCE9PW4mJmgodCk8aChMKCExKSksbj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInITEhPT1uJiZoKHQpPmgoTCghMCkpO3JldHVybiBpfHxufSxyZXBvc2l0aW9uOm19JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sQ29udHJvbGxlcjpmdW5jdGlvbihvLHUsZSl7dmFyIGMsZixhLHMsbj1RKG8pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0PW4ub24saT1uLmVtaXQsbD11Lk1vdmUsZD1sLmdldFBvc2l0aW9uLHI9bC5nZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGltaXQsdj1sLnRvUG9zaXRpb24saD0obj11LlNsaWRlcykuaXNFbm91Z2gscD1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5nZXRMZW5ndGgsZz1lLm9taXRFbmQsbT1vLmlzKFB0KSx5PW8uaXMoTXQpLGI9UicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoTCwhMSksdz1SKEwsITApLHg9ZS5zdGFydHx8MCxrPXg7ZnVuY3Rpb24gUygpe2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXAoITApLGE9ZS5wZXJNb3ZlLHM9ZS5wZXJQYWdlLGM9XygpO3ZhciBuPXEoeCwwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxnP2M6Zi0xKTtuIT09eCYmKHg9bixsLnJlcG9zaXRpb24oKSl9ZnVuY3Rpb24gRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKXtjIT09XygpJiZpKCJlaSIpfWZ1bmN0aW9uIEwobix0KXt2YXIgaT1hfHwoUCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKT8xOnMpLGk9Tyh4K2kqKG4/LTE6MSkseCwhKGF8fFAoKSkpO3JldHVybi0xPT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2kmJnkmJiFTbihkKCkscighbiksMSk/bj8wOmM6dD9pOkEoaSl9ZnVuY3Rpb24gTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobix0LGkpe3ZhciByO3JldHVybiBoKCl8fFAoKT8oKHI9ZnVuY3Rpb24obil7aWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHkmJiJtb3ZlIj09PWUudHJpbVNwYWNlJiZuIT09eClmb3IodmFyIHQ9ZCgpO3Q9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09dihuLCEwKSYmRW4obiwwLG8ubGVuZ3RoLTEsIWUucmV3aW5kKTspbjx4Py0tbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6KytuO3JldHVybiBufShuKSkhPT1uJiYodD1uLG49cixpPSExKSxuPDB8fGM8bj8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj1hfHwhRW4oMCxuLHQsITApJiYhRW4oYyx0LG4sITApP20/aT9uPDA/LShmJXN8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3xzKTpmOm46ZS5yZXdpbmQ/bjwwP2M6MDotMTp6KEQobikpOmkmJm4hPT10JiYobicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9eihEKHQpKyhuPHQ/LTE6MSkpKSk6bj0tMSxufWZ1bmN0aW9uIEEobil7cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBtPyhuK2YpJWZ8fDA6bn1mdW5jdGlvbiBfKCl7Zm9yKHZhciBuPWYtKFAoKXx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20mJmE/MTpzKTtnJiYwPG4tLTspaWYodihmLTEsITApIT09dihuLCEwKSl7bisrOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidicmVha31yZXR1cm4gcShuLDAsZi0xKX1mdW5jdGlvbiB6KG4pe3JldHVybiBxKFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk/bjpzKm4sMCxjKX1mdW5jdGlvbiBEKG4pe3JldHVybiBQKCk/WShuLGMpOnhuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygoYzw9bj9mLTE6bikvcyl9ZnVuY3Rpb24gTShuKXtuIT09eCYmKGs9eCx4PW4pfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBQKCl7cmV0dXJuIWVuKGUuZm9jdXMpfHxlLmlzTmF2aWdhdGlvbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gSSgpe3JldHVybiBvLnN0YXRlLmlzKFtHLHJuXSkmJiEhZS53YWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZvclRyYW5zaXRpb259cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7UygpLHQoW0ssSicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsImVpIl0sUyksdChObixFKX0sZ286ZnVuY3Rpb24obix0LGkpe3ZhciByO0koKXwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfC0xPChyPUEobj1mdW5jdGlvbihuKXt2YXIgdD14O3t2YXIgaSxyO0Mobik/KHI9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24ubWF0Y2goLyhbK1xcLTw+XSkoXFxkKyk/Lyl8fFtdLGk9clsxXSxyPXJbMl0sIisiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09PWl8fCItIj09PWk/dD1PKHgrICsoIiIraSsoK3J8fDEpKSx4KToiPiI9PT1pPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0PXI/eigrcik6YighMCk6IjwiPT09aSYmKHQ9dyghMCkpKTp0PW0/bjpxKG4sMCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYyl9cmV0dXJuIHR9KG4pKSkmJih0fHxyIT09eCkmJihNKHIpLGwubW92ZShuLHIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ssaSkpfSxzY3JvbGw6ZnVuY3Rpb24obix0LGkscil7dS5TY3JvbGwuc2Nyb2xsKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLHQsaSxmdW5jdGlvbigpe3ZhciBuPUEobC50b0luZGV4KGQoKSkpO00oZz9ZKG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGMpOm4pLHImJnIoKX0pfSxnZXROZXh0OmIsZ2V0UHJldjp3LGdldEFkamFjZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzpMLGdldEVuZDpfLHNldEluZGV4Ok0sZ2V0SW5kZXg6ZnVuY3Rpb24obil7cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBuP2s6eH0sdG9JbmRleDp6LHRvUGFnZTpELHRvRGVzdDpmdW5jdGlvbihuKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIG49bC50b0luZGV4KG4pLHk/cShuLDAsYyk6bn0saGFzRm9jdXM6UCxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NCdXN5Okl9fSxBcnJvd3M6ZnVuY3Rpb24obyxuLHQpe3ZhciBpLHIsdT1RKG8pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlPXUub24sYz11LmJpbmQsZj11LmVtaXQsYT10LmNsYXNzZXMscz10LmkxOG4sbD0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi5FbGVtZW50cyxkPW4uQ29udHJvbGxlcix2PWwuYXJyb3dzLGg9bC50cmFjayxwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz12LGc9bC5wcmV2LG09bC5uZXh0LHk9e307ZnVuY3Rpb24gYigpe3ZhciBuPXQuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycm93czshbnx8ZyYmbXx8KHA9dnx8aigiZGl2IixhLmFycm93cyksZz1TKCEwKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbT1TKCExKSxpPSEwLEwocCxbZyxtXSksdnx8TyhwLGgpKSxnJiZtJiYoYW4oeSx7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXY6ZyxuZXh0Om19KSxsbihwLG4/IiI6Im5vbmUiKSxNKHAscj1kdCsiLS0iKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LmRpcmVjdGlvbiksbiYmKGUoW0IsRG4sSixWLCJlaSJdLEUpLGMobSwiY2xpY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIixSKGssIj4iKSksYyhnLCJjbGljayIsUihrLCI8IikpLEUoKSxJKFtnLG1dLEtuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxoLmlkKSxmKCJhcnJvd3M6bW91bnRlZCIsZyxtKSkpLGUoSyx3KX1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdygpe3goKSxiKCl9ZnVuY3Rpb24geCgpe3UuZGVzdHJveSgpLFgocCxyKSxpPygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVCh2P1tnLG1dOnApLGc9bT1udWxsKTpQKFtnLG1dLHV0KX1mdW5jdGlvbiBrKG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIntkLmdvKG4sITApfWZ1bmN0aW9uIFMobil7cmV0dXJuIGhuKCc8YnV0dG9uIGNsYSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcz0iXCcrYS5hcnJvdysiICIrKG4/YS5wcmV2OmEubmV4dCkrXCciIHR5cGU9ImJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b24iPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd0JveD0iMCAwIDQwIDQwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIGZvY3VzYWJsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U9ImZhbHNlIj48cGF0aCBkPSJcJysodC5hcnJvd1BhdGh8fCJtMTUuNSAwLjkzMi0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNC4zIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuNiA0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy40LTQuMy00LjQtNC40LTE0LjYtMTQuNnoiKStcJyIgLz5cJyl9ZnVuY3Rpb24gRSgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t2YXIgbix0LGkscjtnJiZtJiYocj1vLmluZGV4LG49ZC5nZXRQcmV2KCksdD1kLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXROZXh0KCksaT0tMTxuJiZyPG4/cy5sYXN0OnMucHJldixyPS0xPHQmJnQ8cj8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5maXJzdDpzLm5leHQsZy5kaXNhYmxlZD1uPDAsbS5kaXNhYmxlZD10PDAsSShnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxubixpKSxJKG0sbm4sciksZigiYXJyb3dzOnVwZGF0ZWQiLGcsbSxuLHQpKX1yZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJue2Fycm93czp5LG1vdW50OmIsZGVzdHJveTp4LHVwZGF0ZTpFfX0sQXV0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGF5OmZ1bmN0aW9uKG4sdCxpKXt2YXIgcixvLHU9UShuKSxlPXUub24sYz11LmJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kLGY9dS5lbWl0LGE9cW4oaS5pbnRlcnZhbCxuLmdvLmJpbmQobiwiPiIpLGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihuKXt2YXIgdD1sLmJhcjt0JiZfKHQsIndpZHRoIiwxMDAqbisiJSIpLGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCJhdXRvcGxheTpwbGF5aW5nIixuKX0pLHM9YS5pc1BhdXNlZCxsPXQuRWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLGQ9KHU9dC5FbGVtZW50cykucm9vdCx2PXUudG9nZ2xlLGg9aS5hdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicscD0icGF1c2UiPT09aDtmdW5jdGlvbiBnKCl7cygpJiZ0LlNsaWRlcy5pc0Vub3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2goKSYmKGEuc3RhcnQoIWkucmVzZXRQcm9ncmVzcyksbz1yPXA9ITEsYigpLGYoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZuKSl9ZnVuY3Rpb24gbShuKXtwPSEhKG49dm9pZCAwPT09bj8hMDpuKSxiKCkscycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKXx8KGEucGF1c2UoKSxmKFhuKSl9ZnVuY3Rpb24geSgpe3B8fChyfHxvP20oITEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTpnKCkpfWZ1bmN0aW9uIGIoKXt2JiYoQSh2LHRuLCFwKSxJKHYsbm4saS5pMThuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1twPyJwbGF5IjoicGF1c2UiXSkpfWZ1bmN0aW9uIHcobil7bj10LlNsaWRlcy5nZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0QXQobik7YS5zZXQobiYmK3oobi5zbGlkZSxDdCl8fGkuaW50ZXJ2YWwpfXJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm57bW91bnQ6ZnVuY3Rpb24oKXtoJiYoaS5wYXVzZU9uSG92ZXImJmMoZCwibW91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlZW50ZXIgbW91c2VsZWF2ZSIsZnVuY3Rpb24obil7cj0ibW91c2VlbnRlciI9PScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9bi50eXBlLHkoKX0pLGkucGF1c2VPbkZvY3VzJiZjKGQsImZvY3VzaW4gZm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0IixmdW5jdGlvbihuKXtvPSJmb2N1c2luIj09PW4udHlwZSx5KCl9KSx2JiZjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh2LCJjbGljayIsZnVuY3Rpb24oKXtwP2coKTptKCEwKX0pLGUoW0gsVG4sSl0sYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicucmV3aW5kKSxlKEgsdyksdiYmSSh2LEtuLGwudHJhY2suaWQpLHB8fGcoKSxiKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKX0sZGVzdHJveTphLmNhbmNlbCxwbGF5OmcscGF1c2U6bSxpc1BhdXNlZDpzfX0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvdmVyOmZ1bmN0aW9uKG4sdCxpKXt2YXIgcj1RKG4pLm9uO2Z1bmN0aW9uIG8oaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3QuU2xpZGVzLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHQ9Zm4obi5jb250YWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVyfHxuLnNsaWRlLCJpbWciKTt0JiZ0LnNyYyYmdShpLHQsbil9KX1mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdShuLHQsaSl7aS5zdHlsZSgiYmFja2dyb3VuZCIsbj9cJ2NlbnRlci9jb3ZlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbm8tcmVwZWF0IHVybCgiXCcrdC5zcmMrXCciKVwnOiIiLCEwKSxsbih0LG4/Im4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lIjoiIil9cmV0dXJue21vdW50OmZ1bmN0aW9uKCl7aS5jb3ZlciYmKHIoV24sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1IodSwhMCkpLHIoW0IsSyxKXSxSKG8sITApKSl9LGRlc3Ryb3k6UihvLCExKX19LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTY3JvbGw6ZnVuY3Rpb24obixjLHUpe3ZhciBmLGEsdD1RKG4pLGk9dC5vbixzPXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmVtaXQsbD1uLnN0YXRlLnNldCxkPWMuTW92ZSx2PWQuZ2V0UG9zaXRpb24sZT1kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5nZXRMaW1pdCxoPWQuZXhjZWVkZWRMaW1pdCxwPWQudHJhbnNsYXRlLGc9bi5pcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoTXQpLG09MTtmdW5jdGlvbiB5KG4sdCxpLHIsbyl7dmFyIHUsZT12KCksaT0oeCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSwhaXx8ZyYmaCgpfHwoaT1jLkxheW91dC5zbGlkZXJTaXplKCksdT1MbihuKSppJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyp4bihVKG4pL2kpfHwwLG49ZC50b1Bvc2l0aW9uKGMuQ29udHJvbGxlci50b0RlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KG4laSkpK3UpLFNuKGUsbiwxKSk7bT0xLHQ9aT8wOnR8fHduKFUobi1lKS8xLjUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLDgwMCksYT1yLGY9cW4odCxiLFIodyxlLG4sbyksMSksbChybikscyhUbiksZi5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnQoKX1mdW5jdGlvbiBiKCl7bCgzKSxhJiZhKCkscyhWKX1mdW5jdGlvbiB3KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLHQsaSxyKXt2YXIgbz12KCkscj0obisodC1uKSoodD1yLChuPXUuZWFzaW5nRnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmMpP24odCk6MS1NYXRoLnBvdygxLXQsNCkpLW8pKm07cChvK3IpLGcmJiFpJiZoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpJiYobSo9LjYsVShyKTwxMCYmeShlKGgoITApKSw2MDAsITEsYSwhMCkpfWZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiB4KCl7ZiYmZi5jYW5jZWwoKX1mdW5jdGlvbiByKCl7ZiYmIWYuaXNQYXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VkKCkmJih4KCksYigpKX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKXtpKEgseCksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2koW0ssSl0scil9LGRlc3Ryb3k6eCxzY3JvbGw6eSxjYW5jZWw6cn19LERyYWc6ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uKGUsbyxjKXt2YXIgZix0LHUsYSxzLGwsZCx2LG49UShlKSxpPW4ub24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGg9bi5lbWl0LHA9bi5iaW5kLGc9bi51bmJpbmQsbT1lLnN0YXRlLHk9by5Nb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxiPW8uU2Nyb2xsLHc9by5Db250cm9sbGVyLHg9by5FbGVtZW50cy50cmFjayxrPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvLk1lZGlhLnJlZHVjZSxyPShuPW8uRGlyZWN0aW9uKS5yZXNvbHZlLFM9bi5vcmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LEU9eS5nZXRQb3NpdGlvbixMPXkuZXhjZWVkZWRMaW1pdCxPPSExO2Z1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBqKCl7dmFyIG49Yy5kcmFnO0MoIW4pLGE9ImZyZWUiPT09bn1mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgTihuKXt2YXIgdCxpLHI7bD0hMSxkfHwodD1SKG4pLGk9bi50YXJnZXQscj1jLm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb0RyYWcsY24oaSwiLiIrbXQrIiwgLiIrdnQpfHxyJiZjbihpLHIpfHwhdCYmbi5iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0dG9ufHwody5pc0J1c3koKT9GKG4sITApOih2PXQ/eDp3aW5kb3cscz1tLmlzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbRyxybl0pLHU9bnVsbCxwKHYsenQsQSxqdCkscCh2LER0LF8sanQpLHkuY2FuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCgpLGIuY2FuY2VsKCkseihuKSkpKX1mdW5jdGlvbiBBKG4pe3ZhciB0LGkscixvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx1O20uaXMoNil8fChtLnNldCg2KSxoKCJkcmFnIikpLG4uY2FuY2VsYWJsZSYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzPyh5LnRyYW5zbGF0ZShmK0QobikvKE8mJmUuaXMoTXQpPzU6MSkpLHU9MjAwPE0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG4pLHQ9TyE9PShPPUwoKSksKHV8fHQpJiZ6KG4pLGw9ITAsaCgiZHJhZ2dpbmciJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksRihuKSk6VShEKHU9bikpPlUoRCh1LCEwKSkmJih0PW4saT1jLmRyYWdNaW5UaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXNob2xkLHI9dW4oaSksbz1yJiZpLm1vdXNlfHwwLHI9KHI/aS50b3VjaDoraSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHwxMCxzPVUoRCh0KSk+KFIodCk/cjpvKSxGKG4pKSl9ZnVuY3Rpb24gXyhuKXt2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIHQsaSxyO20uaXMoNikmJihtLnNldCgzKSxoKCJkcmFnZ2VkIikpLHMmJihpPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbihuKXtyZXR1cm4gRSgpK0xuKG4pKlkoVShuKSooYy5mbGlja1Bvd2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnx8NjAwKSxhPzEvMDpvLkxheW91dC5saXN0U2l6ZSgpKihjLmZsaWNrTWF4UGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzfHwxKSl9KHQ9ZnVuY3Rpb24obil7aWYoZS5pcyhQdCl8fCFPKXt2YXIgdD1NKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKTtpZih0JiZ0PDIwMClyZXR1cm4gRChuKS90fXJldHVybiAwfSh0PW4pKSxyPWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnJld2luZCYmYy5yZXdpbmRCeURyYWcsayghMSksYT93LnNjcm9sbChpLDAsYy5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hcCk6ZS5pcyhJdCk/dy5nbyhTKExuKHQpKTwwP3I/IjwiOiItIjpyPyI+IjoiKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKTplLmlzKE10KSYmTyYmcj93LmdvKEwoITApPyI+IjoiPCIpOncuZ28ody50b0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0KGkpLCEwKSxrKCEwKSxGKG4pKSxnKHYsenQsQSksZyh2LER0LF8pLHM9ITF9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIFQobil7IWQmJmwmJkYobiwhMCl9ZnVuY3Rpb24geihuKXt1PXQsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9bixmPUUoKX1mdW5jdGlvbiBEKG4sdCl7cmV0dXJuIEkobix0KS1JKFAobiksdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWZ1bmN0aW9uIE0obil7cmV0dXJuIG1uKG4pLW1uKFAobikpfWZ1bmN0aW9uIFAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pe3JldHVybiB0PT09biYmdXx8dH1mdW5jdGlvbiBJKG4sdCl7cmV0dXJuKFIobicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpP24uY2hhbmdlZFRvdWNoZXNbMF06bilbInBhZ2UiK3IodD8iWSI6IlgiKV19ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIFIobil7cmV0dXJuInVuZGVmaW5lZCIhPXR5cGVvZiBUb3VjaEV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmbiBpbnN0YW5jZW9mIFRvdWNoRXZlbnR9ZnVuY3Rpb24gQyhuKXtkPW59cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybnttb3VudDpmdW5jdGlvbigpe3AoeCx6dCxvbixqdCkscCh4LER0LG9uLGp0KSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncCh4LF90LE4sanQpLHAoeCwiY2xpY2siLFQse2NhcHR1cmU6ITB9KSxwKHgsImRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fnc3RhcnQiLEYpLGkoW0IsS10sail9LGRpc2FibGU6Qyxpc0RyYWdnaW5nOmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbigpe3JldHVybiBzfX19LEtleWJvYXJkOmZ1bmN0aW9uKHQsbixpKXt2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHIsbyx1PVEodCksZT11Lm9uLGM9dS5iaW5kLGY9dS51bmJpbmQsYT10LnJvb3QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M9bi5EaXJlY3Rpb24ucmVzb2x2ZTtmdW5jdGlvbiBsKCl7dmFyIG49aS5rZXlibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmQ7biYmKHI9Imdsb2JhbCI9PT1uP3dpbmRvdzphLGMocixHdCxoKSl9ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGQoKXtmKHIsR3QpfWZ1bmN0aW9uIHYoKXt2YXIgbj1vO289ITAscChmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24oKXtvPW59KX1mdW5jdGlvbiBoKG4pe298fCgobj1UdChuKSk9PT1zKEJuKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/dC5nbygiPCIpOm49PT1zKEhuKSYmdC5nbygiPiIpKX1yZXR1cm57bW91bnQ6ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uKCl7bCgpLGUoSyxkKSxlKEssbCksZShILHYpfSxkZXN0cm95OmQsZGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FibGU6ZnVuY3Rpb24obil7bz1ufX19LExhenlMb2FkOmZ1bmN0aW9uKGksbixvKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7dmFyIHQ9UShpKSxyPXQub24sdT10Lm9mZixlPXQuYmluZCxjPXQuZW1pdCxmPSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VxdWVudGlhbCI9PT1vLmxhenlMb2FkLGE9W0RuLFZdLHM9W107ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2woKXtEKHMpLG4uU2xpZGVzLmZvckVhY2goZnVuY3Rpb24ocil7Z24oci5zbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsV3QpLmZvckVhY2goZnVuY3Rpb24obil7dmFyIHQ9eihuLEZ0KSxpPXoobixYdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3Q9PT1uLnNyYyYmaT09PW4uc3Jjc2V0fHwodD1vLmNsYXNzZXMuc3Bpbm5lcix0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1mbihpPW4ucGFyZW50RWxlbWVudCwiLiIrdCl8fGooInNwYW4iLHQsaSkscy5wdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzaChbbixyLHRdKSxuLnNyY3x8bG4obiwibm9uZSIpKX0pfSksKGY/cDoodShhKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncihhLGQpLGQpKSgpfWZ1bmN0aW9uIGQoKXsocz1zLmZpbHRlcihmdW5jdGlvbihuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7dmFyIHQ9by5wZXJQYWdlKigoby5wcmVsb2FkUGFnZXN8fDEpKzEpLTE7cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiFuWzFdLmlzV2l0aGluKGkuaW5kZXgsdCl8fHYobil9KSkubGVuZ3RofHx1KGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKX1mdW5jdGlvbiB2KG4pe3ZhciB0PW5bMF07TShuWzFdLnNsaWRlLEV0KSxlKHQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJsb2FkIGVycm9yIixSKGgsbikpLEkodCwic3JjIix6KHQsRnQpKSxJKHQsInNyYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQiLHoodCxYdCkpLFAodCxGdCksUCh0LFh0KX1mdW5jdGlvbiBoKG4sdCl7dmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBpPW5bMF0scj1uWzFdO1goci5zbGlkZSxFdCksImVycm9yIiE9PXQudHlwZSYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhUKG5bMl0pLGxuKGksIiIpLGMoV24saSxyKSxjKGpuKSksZiYmcCgpfWZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBwKCl7cy5sZW5ndGgmJnYocy5zaGlmdCgpKX1yZXR1cm57bW91bnQ6ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKCl7by5sYXp5TG9hZCYmKGwoKSxyKEosbCkpfSxkZXN0cm95OlIoRCxzKSxjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlY2s6ZH19LFBhZ2luYXRpb246ZnVuY3Rpb24obCxuLGQpe3ZhciB2LGgsdD1RKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsKSxwPXQub24sZz10LmVtaXQsbT10LmJpbmQseT1uLlNsaWRlcyxiPW4uRWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzLHc9bi5Db250cm9sbGVyLHg9dy5oYXNGb2N1cyxyPXcuZ2V0SW5kZXgsZT13JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5nbyxjPW4uRGlyZWN0aW9uLnJlc29sdmUsaz1iLnBhZ2luYXRpb24sUz1bXTtmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gRSgpe3YmJihUKGs/byh2LmNoaWxkcmVuKTp2KSxYKHYsaCksRChTKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndj1udWxsKSx0LmRlc3Ryb3koKX1mdW5jdGlvbiBMKG4pe2UoIj4iK24sITApfWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBPKG4sdCl7dmFyIGk9Uy5sZW5ndGgscj1UdCh0KSxvPUEoKSx1PS0xLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvPShyPT09YyhIbiwhMSxvKT91PSsrbiVpOnI9PT1jKEJuLCExLG8pP3U9KC0tbisnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaSklaToiSG9tZSI9PT1yP3U9MDoiRW5kIj09PXImJih1PWktMSksU1t1XSk7byYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhkbihvLmJ1dHRvbiksZSgiPiIrdSksRih0LCEwKSl9ZnVuY3Rpb24gQSgpe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gZC5wYWdpbmF0aW9uRGlyZWN0aW9ufHxkLmRpcmVjdGlvbn1mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXyhuKXtyZXR1cm4gU1t3LnRvUGFnZShuKV19ZnVuY3Rpb24geigpe3ZhciBuLHQ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ18ocighMCkpLGk9XyhyKCkpO3QmJihYKG49dC5idXR0b24sdG4pLFAobixRbiksSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobiwkLC0xKSksaSYmKE0obj1pLmJ1dHRvbix0biksSShuLFFuLCEwKSxJKG4sJCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiIpKSxnKCJwYWdpbmF0aW9uOnVwZGF0ZWQiLHtsaXN0OnYsaXRlbXM6U30sdCxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9cmV0dXJue2l0ZW1zOlMsbW91bnQ6ZnVuY3Rpb24gbigpe0UoKSxwKFtLLEosIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlaSJdLG4pO3ZhciB0PWQucGFnaW5hdGlvbjtpZihrJiZsbihrLHQ/IiI6Im5vbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiksdCl7cChbSCxUbixWXSx6KTt2YXIgdD1sLmxlbmd0aCxpPWQuY2xhc3NlcyxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1kLmkxOG4sbz1kLnBlclBhZ2UsdT14KCk/dy5nZXRFbmQoKSsxOmtuKHQvbyk7TScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodj1rfHxqKCJ1bCIsaS5wYWdpbmF0aW9uLGIudHJhY2sucGFyZW50RWxlbWVudCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGg9Z3QrIi0tIitBKCkpLEkodixaLCJ0YWJsaXN0IiksSSh2LG5uLHIuc2VsZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksSSh2LG50LEEoKT09PUpuPyJ2ZXJ0aWNhbCI6IiIpO2Zvcih2YXIgZT0wO2U8dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7ZSsrKXt2YXIgYz1qKCJsaSIsbnVsbCx2KSxmPWooImJ1dHRvbiIse2NsYXNzOmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnBhZ2UsdHlwZToiYnV0dG9uIn0sYyksYT15LmdldEluKGUpLm1hcChmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24obil7cmV0dXJuIG4uc2xpZGUuaWR9KSxzPSF4KCkmJjE8bz9yLnBhZ2VYOnIucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlWDttKGYsImNsaWNrIixSKEwsZSkpLGQucGFnaW5hdGlvbktleWJvYXJkJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbShmLCJrZXlkb3duIixSKE8sZSkpLEkoYyxaLCJwcmVzZW50YXRpb24iKSxJKGYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1osInRhYiIpLEkoZixLbixhLmpvaW4oIiAiKSksSShmLG5uLE9uKHMsZSsxKSksSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZiwkLC0xKSxTLnB1c2goe2xpOmMsYnV0dG9uOmYscGFnZTplfSl9eigpLGcoInAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdpbmF0aW9uOm1vdW50ZWQiLHtsaXN0OnYsaXRlbXM6U30sXyhsLmluZGV4KSl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30sZGVzdHJveTpFLGdldEF0Ol8sdXBkYXRlOnp9fSxTeW5jOmZ1bmN0aW9uKGksbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsdCl7dmFyIHI9dC5pc05hdmlnYXRpb24sbz10LnNsaWRlRm9jdXMsdT1bXTtmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZSgpe3ZhciBuLHQ7aS5zcGxpZGVzLmZvckVhY2goZnVuY3Rpb24obil7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uaXNQYXJlbnR8fChmKGksbi5zcGxpZGUpLGYobi5zcGxpZGUsaSkpfSksciYmKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduPVEoaSksKHQ9bi5vbikoTW4scyksdChZbixsKSx0KFtCLEtdLGEpLHUucHVzaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiksbi5lbWl0KEduLGkuc3BsaWRlcykpfWZ1bmN0aW9uIGMoKXt1LmZvckVhY2goJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKG4pe24uZGVzdHJveSgpfSksRCh1KX1mdW5jdGlvbiBmKG4scil7bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9UShuKTtuLm9uKEgsZnVuY3Rpb24obix0LGkpe3IuZ28oci5pcyhQdCk/aTpuKX0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSx1LnB1c2gobil9ZnVuY3Rpb24gYSgpe0kobi5FbGVtZW50cy5saXN0LG50LHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpcmVjdGlvbj09PUpuPyJ2ZXJ0aWNhbCI6IiIpfWZ1bmN0aW9uIHMobil7aS5nbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobi5pbmRleCl9ZnVuY3Rpb24gbChuLHQpe2IoWXQsVHQodCkpJiYocyhuKSxGKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSl9cmV0dXJue3NldHVwOlIobi5NZWRpYS5zZXQse3NsaWRlRm9jdXM6ZW4obyk/JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I6b30sITApLG1vdW50OmUsZGVzdHJveTpjLHJlbW91bnQ6ZnVuY3Rpb24oKXtjKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLGUoKX19fSxXaGVlbDpmdW5jdGlvbihlLGMsZil7dmFyIG49UShlKS5iaW5kLGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPTA7ZnVuY3Rpb24gdChuKXt2YXIgdCxpLHIsbyx1O24uY2FuY2VsYWJsZSYmKHQ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh1PW4uZGVsdGFZKTwwLGk9bW4obikscj1mLndoZWVsTWluVGhyZXNob2xkfHwwLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvPWYud2hlZWxTbGVlcHx8MCxVKHUpPnImJm88aS1hJiYoZS5nbyh0PyI8IjoiPiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxhPWkpLHU9dCxmLnJlbGVhc2VXaGVlbCYmIWUuc3RhdGUuaXMoRykmJi0xPT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MuQ29udHJvbGxlci5nZXRBZGphY2VudCh1KXx8RihuKSl9cmV0dXJue21vdW50OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbigpe2Yud2hlZWwmJm4oYy5FbGVtZW50cy50cmFjaywid2hlZWwiLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLGp0KX19fSxMaXZlOmZ1bmN0aW9uKG4sdCxpKXt2YXIgcj1RKG4pLm9uLG89dC5FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudHMudHJhY2ssdT1pLmxpdmUmJiFpLmlzTmF2aWdhdGlvbixlPWooInNwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIix3dCksYz1xbig5MCxSKGYsITEpKTtmdW5jdGlvbiBmKG4pe0kobyxydCxuKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbj8oTChvLGUpLGMuc3RhcnQoKSk6KFQoZSksYy5jYW5jZWwoKSl9ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Eobil7dSYmSShvLGl0LG4/Im9mZiI6InBvbGl0ZSIpfXJldHVybnttb3VudDpmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24oKXt1JiYoYSghdC5BdXRvcGxheS5pc1BhdXNlZCgpKSxJKG8sb3QsITAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxlLnRleHRDb250ZW50PSJceGUyXHg4MFx4YTYiLHIoRm4sUihhLCEwKSkscihYbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsUihhLCExKSkscihbRG4sVl0sUihmLCEwKSkpfSxkaXNhYmxlOmEsZGVzdHJveTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24oKXtQKG8sW2l0LG90LHJ0XSksVChlKX19fX0pLHF0PXt0eXBlOiJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUiLHJvbGU6InJlZ2lvbiIsc3BlZWQ6NDAwLHBlclBhZ2U6MSxjbG9uZVN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXM6ITAsYXJyb3dzOiEwLHBhZ2luYXRpb246ITAscGFnaW5hdGlvbktleWJvYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDohMCxpbnRlcnZhbDo1ZTMscGF1c2VPbkhvdmVyOiEwLHBhdXNlT25Gb2N1czohJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzAscmVzZXRQcm9ncmVzczohMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjI1LCAxLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMC41LCAxKSIsZHJhZzohMCxkaXJlY3Rpb246Imx0ciIsdHJpbVNwYWNlOiEwLGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1c2FibGVOb2RlczoiYSwgYnV0dG9uLCB0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIGlmcmFtZSIsbGl2ZTohMCxjbGFzc2VzOntzbGlkZTphdCxjbG9uZTpzdCxhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3dzOmR0LGFycm93OnZ0LHByZXY6aHQsbmV4dDpwdCxwYWdpbmF0aW9uOmd0LHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlOm10LHNwaW5uZXI6aSsic3Bpbm5lciJ9LGkxOG46e3ByZXY6IlByZXZpb3VzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGlkZSIsbmV4dDoiTmV4dCBzbGlkZSIsZmlyc3Q6IkdvIHRvIGZpcnN0IHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSIsbGFzdDoiR28gdG8gbGFzdCBzbGlkZSIsc2xpZGVYOiJHbyB0byBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJXMiLHBhZ2VYOiJHbyB0byBwYWdlICVzIixwbGF5OiJTdGFydCBhdXRvcGxheSIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdXNlOiJQYXVzZSBhdXRvcGxheSIsY2Fyb3VzZWw6ImNhcm91c2VsIixzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6InNsaWRlIixzZWxlY3Q6IlNlbGVjdCBhIHNsaWRlIHRvIHNob3ciLHNsaWRlTGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVsOiIlcyBvZiAlcyJ9LHJlZHVjZWRNb3Rpb246e3NwZWVkOjAscmV3aW5kU3BlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkOjAsYXV0b3BsYXk6InBhdXNlIn19O2Z1bmN0aW9uIEJ0KG4sdCxpKXt2YXIgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9dC5TbGlkZXM7ZnVuY3Rpb24gbygpe3IuZm9yRWFjaChmdW5jdGlvbihuKXtuLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZSgidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgtIisxMDAqbi5pbmRleCsiJSkiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9KX1yZXR1cm57bW91bnQ6ZnVuY3Rpb24oKXtRKG4pLm9uKFtCLEpdLG8pfSxzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcnQ6ZnVuY3Rpb24obix0KXtyLnN0eWxlKCJ0cmFuc2l0aW9uIiwib3BhY2l0eSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIitpLnNwZWVkKyJtcyAiK2kuZWFzaW5nKSxwKHQpfSxjYW5jZWw6b259fWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBIdCh1LG4sZSl7dmFyIGMsZj1uLk1vdmUsYT1uLkNvbnRyb2xsZXIscz1uLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTY3JvbGwsdD1uLkVsZW1lbnRzLmxpc3QsbD1SKF8sdCwidHJhbnNpdGlvbiIpO2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBpKCl7bCgiIikscy5jYW5jZWwoKX1yZXR1cm57bW91bnQ6ZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uKCl7USh1KS5iaW5kKHQsInRyYW5zaXRpb25lbmQiLGZ1bmN0aW9uKG4pe24udCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldD09PXQmJmMmJihpKCksYygpKX0pfSxzdGFydDpmdW5jdGlvbihuLHQpe3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgaT1mLnRvUG9zaXRpb24obiwhMCkscj1mLmdldFBvc2l0aW9uKCksbz1mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24obil7dmFyIHQ9ZS5yZXdpbmRTcGVlZDtpZih1LmlzKE10KSYmdCl7dmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpPWEuZ2V0SW5kZXgoITApLHI9YS5nZXRFbmQoKTtpZigwPT09aSYmcjw9bnx8cjwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPWkmJjA9PT1uKXJldHVybiB0fXJldHVybiBlLnNwZWVkfShuKTsxPD1VKGktcikmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYxPD1vP2UudXNlU2Nyb2xsP3Muc2Nyb2xsKGksbywhMSx0KToobCgidHJhbnNmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybSAiK28rIm1zICIrZS5lYXNpbmcpLGYudHJhbnNsYXRlKGksITApLGM9dCk6KGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmp1bXAobiksdCgpKX0sY2FuY2VsOml9fXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhuLHQpe3RoaXMuZXZlbnQ9USgpLHRoaXMuQ29tcG9uZW50cz17fSx0aGlzLnN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZT1zKDEpLHRoaXMuc3BsaWRlcz1bXSx0aGlzLm49e30sdGhpcy50PXt9O249QygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbik/cG4oZG9jdW1lbnQsbik6bjtibihuLG4rIiBpcyBpbnZhbGlkLiIpLHQ9ZCh7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhYmVsOnoodGhpcy5yb290PW4sbm4pfHwiIixsYWJlbGxlZGJ5Onoobixabil8fCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIn0scXQsaS5kZWZhdWx0cyx0fHx7fSk7dHJ5e2QodCxKU09OLnBhcnNlKHoobiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZikpKX1jYXRjaChuKXtibighMSwiSW52YWxpZCBKU09OIil9dGhpcy5uPU9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuY3JlYXRlKGQoe30sdCkpfXZhciBuPWkucHJvdG90eXBlO3JldHVybiBuLm1vdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudD1mdW5jdGlvbihuLHQpe3ZhciBpPXRoaXMscj10aGlzLnN0YXRlLG89dGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50cztyZXR1cm4gYm4oci5pcyhbMSw3XSksIkFscmVhZHkgbW91bnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QhIiksci5zZXQoMSksdGhpcy5pPW8sdGhpcy5yPXR8fHRoaXMucnx8KHRoaXMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKEl0KT9CdDpIdCksdGhpcy50PW58fHRoaXMudCx3KGFuKHt9LFV0LHRoaXMudCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1RyYW5zaXRpb246dGhpcy5yfSksZnVuY3Rpb24obix0KXtuPW4oaSxvLGkubik7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhvW3RdPW4pLnNldHVwJiZuLnNldHVwKCl9KSx3KG8sZnVuY3Rpb24obil7bi5tbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQmJm4ubW91bnQoKX0pLHRoaXMuZW1pdChCKSxNKHRoaXMucm9vdCwiaXMtaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpYWxpemVkIiksci5zZXQoMyksdGhpcy5lbWl0KCJyZWFkeSIpLHRoaXN9LG4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N5bmM9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuc3BsaWRlcy5wdXNoKHtzcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOm59KSxuLnNwbGlkZXMucHVzaCh7c3BsaWRlOnRoaXMsaXNQYXJlbnQ6ITB9KSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5zdGF0ZS5pcygzKSYmKHRoaXMuaS5TeW5jLnJlbW91bnQoKSxuLkNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzLlN5bmMucmVtb3VudCgpKSx0aGlzfSxuLmdvPWZ1bmN0aW9uKG4pe3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gdGhpcy5pLkNvbnRyb2xsZXIuZ28obiksdGhpc30sbi5vbj1mdW5jdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbix0KXtyZXR1cm4gdGhpcy5ldmVudC5vbihuLHQpLHRoaXN9LG4ub2ZmPWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbihuKXtyZXR1cm4gdGhpcy5ldmVudC5vZmYobiksdGhpc30sbi5lbWl0PWZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbihuKXt2YXIgdDtyZXR1cm4odD10aGlzLmV2ZW50KS5lbWl0LmFwcGx5KHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFtuXS5jb25jYXQobyhhcmd1bWVudHMsMSkpKSx0aGlzfSxuLmFkZD1mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24obix0KXtyZXR1cm4gdGhpcy5pLlNsaWRlcy5hZGQobix0KSx0aGlzfSxuLnJlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmU9ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMuaS5TbGlkZXMucmVtb3ZlKG4pLHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzfSxuLmlzPWZ1bmN0aW9uKG4pe3JldHVybiB0aGlzLm4udHlwZT09PW59LG4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZnJlc2g9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbWl0KEopLHRoaXN9LG4uZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3k9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9ITApO3ZhciBuPXRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmV2ZW50LGk9dGhpcy5zdGF0ZTtyZXR1cm4gaS5pcygxKT9RKHRoaXMpLm9uKCJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhZHkiLHRoaXMuZGVzdHJveS5iaW5kKHRoaXMsdCkpOih3KHRoaXMuaSxmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24obil7bi5kZXN0cm95JiZuLmRlc3Ryb3kodCl9LCEwKSxuLmVtaXQoYSksbi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSgpLHQmJkQodGhpcy5zcGxpZGVzKSxpLnNldCg3KSksdGhpc30sSnQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ksW3trZXk6Im9wdGlvbnMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm59LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQ6ZnVuY3Rpb24obil7dGhpcy5pLk1lZGlhLnNldChuLCEwLCEwKX19LHtrZXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmkuU2xpZGVzLmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RMZW5ndGgoITApfX0se2tleToiaW5kZXgiLGdldDpmdW5jdGlvbigpe3JldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5pLkNvbnRyb2xsZXIuZ2V0SW5kZXgoKX19XSksaX0oKTtyZXR1cm4gdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVmYXVsdHM9e30sdC5TVEFURVM9cix0fSwib2JqZWN0Ij09dHlwZW9mIGV4cG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz10KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOiJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKToobj0idW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8c2VsZikuU3BsaWRlPXQoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWluLmpzLm1hcFxuJywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS5taW4uanMnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzI6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ0g0c0lBQUFBQUFBQUNvMTkrM0xidU5Mbi8rY3BaTzRaSFRDQ2FHbHU1L3NvTTZva2RpYVonCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VNY081bEp4dXRLMFJJbE1hWkFEUWxKZGl4VjdkUHNnKzJUN0s4YjRFMldaN2RxSmdKQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFTVNsMGYzckMrREpVbzEwbktwV0pwVFU3c01remNRcXpGcHgwQnZFUjlwTElqWFZzMEhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJzZiZ1BWSjRGK2lxK0htUmVwSmJ6S0F0dmtpaW9aemFiZzc3TXZGR3FKdkYwYVo0ZjlLU3onCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ3BObDVNVDRUcnN0TW0rZHhkbytjK1g1emRkb3BMMXhOSWxWOUQ1TEYxR203OUdkekx1TicKICAgICAgICAgICAgICAgICAgICAgICAgYic3bVhtYnJlVG9wZS9hdXFtak4wSDNXNmp5OTRpUzNXcTd4Y1JPaTlqTHNQVEo1dDB5dnFPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZDZzY0Ui8wdCs3Mkg0ZlBEdjdSZXRhNlhDVHhPUEsrNXBUNVBjcHkrbTdMYi8zbzliMGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncWV3MEhrVXFqNmpzN08wSEtubVZMdTZ6ZURyVGZ1djczdmZmdDk2RitFZytpMXV2bDEveCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDVlE1L0FkTkhybytVSUdleGJuVVFURW00VDQ0U3pTWDZ5d2VhV2RBRlZlQkl4WlpOTUhYJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3UxazBYbzZpY1hlZVVtMi9aZkt1STM4SmZwU1pDbjZTV2ZEdzZ1TGt4WWVUWTc4dno4NC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndnFQVTkvTHQ4ZW1KL3dNS2ZuLzc3aGYvRjNuNTZ1TDg5SlRTbVpMSEZ5OSsrWVhTUDh2aicKICAgICAgICAgICAgICAgICAgICAgICAgYidrOHNQRitlZjhjNi90NE55cG8rRmNoK1VYZitnVnkxQldxeEFGdWxscGxvdnNpeThyOWJCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3l4UE1qemNLazhSV3JGNjlvRGJ0YThxN2lkWFlDeGVMaEJibVNpMlQ1SnJvWmhScWtZb3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbTRLa2xNNWwzM1ZyVGZCOGJXbU9Ga0VlNlEveFBFcVh1dXIyclBhSkxQcHJHZVg2aFlybicKICAgICAgICAgICAgICAgICAgICAgICAgYidJVDE4bllYekNNK3IxcGFHNkcxOTZuNDZhZWtnQ0ZTdGpxcWFQQmdoM1c0dmhaTXlnVGtTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JWRm5vc0JNUTV6enI3d0xMc1JTT2tVamppdGZtUkphWlRWRlBsS21ZS2tNa1k0ZHR4ckYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncUQ1Um1KaG1qK2IwVkdmM1pZMVdySElkcWhGNmp5MlJybFdVSGFjam5qL2FBdUV5MGIvSCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwWHF6V1dQSzA3WHJ2Zmx3ZG5xU1JGUmhpL2tlMVdZTmU2SDYwbjJ0SHpSelErVmZxZXZxJwogICAgICAgICAgICAgICAgICAgICAgICBiJytkVE1IMVh6d0RsT1FyU2thL043VTUvZmJ2OUllZWhBZEhjK2FkUzZiYXdDOXZReW41V0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY1krcXJxeU4vb1hRVWxrT1FOOHY5eEhSYTd1dHZWRVM1dmxwbklOUkRaMXdQSFo4SjR2bScKICAgICAgICAgICAgICAgICAgICAgICAgYic2U3B5cm1ueGF4OCtNeDkrZ1o5WCtNeFFlemsydnhaT3kzRjlMY0dicXJxbnB1NlV2azZkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2k5VDQxU3hPeGt6R2FMZFc5Wng1ME1OdTU0aE9kQ0RpelFhenRRZ3pUUDY3ZEJ3Tk5IVWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS3dnVzlUTENMRWI4ZXIyZkk5V1lvVGtUSVZaNm5wL1I0a1g1WlpTQUd0TU1UWHR6VStTVycKICAgICAgICAgICAgICAgICAgICAgICAgYidXN0RXMEtWcFJ3VnFpRzNzaldnQTZJZnJYNEdsMjAwd1ZONGtUblNVaVhybjdWUGJrNjNyJwogICAgICAgICAgICAgICAgICAgICAgICBiJzExWmswdXllSHByUFhQV3VmV29yeTdXbE5aNHczaThuZ2VYUTRQQjVSZmRyekc0c0ZhK3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVU1NVExJcVhSU3V3d1VpNFBtVXJPcXYzenZueWhSblFseS9PQWJaS3V4MExEVUtWemVVTycKICAgICAgICAgICAgICAgICAgICAgICAgYidsY2pLWGpaWnpPTldzWUJyRWRjV2tFZDRwYStER1ArZ1dWZG1WZE5qRWY5L3Q2eW9aYlhUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ011OHVhamxRaG9OaXZNeDVUT0ZZUEd3bDhwUXhSVDRLc0hEbUZlNU9YSFVuVjBTbVRJS2InCiAgICAgICAgICAgICAgICAgICAgICAgIGInRFUxYmd4REhvQllkdFdpRzZ0UHpmZy9aTXNYSGpiZVpYTTJHZXFIQnpXNldPakw3cXRiVycKICAgICAgICAgICAgICAgICAgICAgICAgYidXN3lrSWJvZmx0VEdrTmExT1Y1VGdWN3pkejh3d2lwdE5vNERwcGNOMzNOMTBCR1lmZlU1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xTK1pqNkptNDdOZkM5bWtnbkhCQUVkWkZPcklVaURhTHdrZEpNYTcvc3gvNi9KWENEK2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ3FLL09yLzVVclFaVDBSRWRPSGFCcWFSZnBYT0YralArRkxmSnpRSldJekJDRlUyRyt5dScKICAgICAgICAgICAgICAgICAgICAgICAgYiduQXBwZVJ5blU1ZUNpWjBDYXRnWngyQTU0YjNUMktaanc4eDR6Q2haUmUxMkxTTmMydVlUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2pDOFhEd3ZhSGtwZmpySTBTZnlEWG4wMnZ1M3cxV2xqQ21zVlY4ME5yT2h6SlJjbG1heEQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOEtmR0srOGFvaHd0djB3aHliQWtyNUlZL2JuQTNoYTE2aCtFZXN3UStUc1ZJMnptTElreCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5OWhoMjdNNlJ3THpFU3BhdDQ3UHo5Nkg0Qk1aODlZOGVwMmxjMHNrbUdZZDNlbkRtWjRuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2p1dmRwT1A3V211dkxVLzA3RlFlRzRFcFhNbE1DTXVZTGdoQmh0UFF3RFZweXQ3TzU5RTQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQm1rMUh0WWFYdXlaVlFDUzdMN2cxbzBKbmU0eVVXTFFqZW92d003QkFNR3JxN2MrVlJJTScKICAgICAgICAgICAgICAgICAgICAgICAgYic4cXBmYTIrdUdpdWtBWlF1ZFRoZlZEWCtxRlY0WllTN0dxcU9zN2lEeEhTWVRkK3J3TWtaJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0R6dHlFampqVUlkZHAzT3ZLbzU5WTd1TnpYR2dYRDNMMG5XTGx1TWt5ekJBNTRwcWQ1enInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHRNUm1qYTFhL0RTNXdDU2ErYk5ZeVhYeXFiRE8zbG4wNU1rVFRONWEzT2pLRTdrUjVNTycKICAgICAgICAgICAgICAgICAgICAgICAgYidiMnJpNGxMdFlOR1BRblcxZTFUamhDZTJDdkVpK25BYWZDWVpnOFVOMW9wVEJUL0lodWtSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JkR1I5dE9qZ0ZPQnJocjZxL2lVMFlLZWF1V3pRRUZHTEtTK3VLZTF4UkM5SStWMmhUcXEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbzR0enk3QUwxckt6VTNSQUxCZU1BbkxCK1M1M0pGZ0s3UWxaNitDTHhvSWY5WHREcDRkYScKICAgICAgICAgICAgICAgICAgICAgICAgYidQbFhsT2YraWdvY2F3UDlHU0pyS1J3R2tmMWtja3hTZzJkcVZBd3kzbXB4YTFmRFNYam1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dyS0tCM3liMFNBQkMvQlAvOXBJREhkcmV2eEFNTXF2eXdpNWxCSG9pcE9OOG5JTkNOeWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMEpZbE5oVUI5SkorcVdRS3NhRXMrMmc4dGxETk51MFhkWFlmTDlGUk5MRGJ1Q2hmdzVPeScKICAgICAgICAgICAgICAgICAgICAgICAgYidjT25LRVFOV2NXWG9iQ2xUSGhxazllTWhwWThHWkVsekZJeWVSbDBIQjRKbURjZ0dXNGltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RpbENrVmZmVXdxZ0x3V3hYdjFBbVpSRno5V1AxMkJUeEE2NEp5UmpDQlQ2ZTZmUlVtNmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncStBelJoRjZ0UVNmbS9Na0RMT0Fkbld0QkQxL3VGbmVRSDNPSVhia09JS01TUHdZOGx4aycKICAgICAgICAgICAgICAgICAgICAgICAgYidqNFF2ditEVTNnWWZBT1NOZGJOQnRIUFFwMjJsdktMUDVsRkdZQXZmZ1BhVTNsZkR3THp0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0p6dWVBR3lQWXpGeXQxdW0vcGVCTTRlSWdyQjI1QnRLUXgrUXg4cWtVSGFHNUFqQTY5YVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInNzVFTVdkUTY4aTNTc1NweUY4aXQ0anpHcUIzNUNwbFpQQjVIeXBHL0J0QXhKbG1Venh6NScKICAgICAgICAgICAgICAgICAgICAgICAgYidXK0FzRjJDVjFPcFhSUS95K0J2cXZ5dlRlUENCT0NzTGJVZitYaVRwUVFnMmE4WUpEUitWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZMaUtqWER4eS82L3BnNHVJWU9BSEh3REh6NDFpc0psamcvK2diSWsvSGFmcE9IWXAzL28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInM2MvMFlRenlJLzNPbkdyai82ZlFVV0pvQjhwaldlamRMSE4vWnpFTHpSTGE5SlFoRmRZbScKICAgICAgICAgICAgICAgICAgICAgICAgYidJR1l5cUFzNjh6cVdJNVNaWndma1NrTGdSRGE1SDBzTWFBZGNtdzBZUzFZbnY2YXhZc2JTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1pJUldMOVFTY01zelJBZkJaVk1RalV6dzZXVGlYNGpNTTF1UUNDcWF4OXB2N0t5U3dnancnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneVIyRHc3WU9OLzVTUnVNc1JRanhnZUFZVStHcGRDMUhRUSt5RWFRYkJyMXFObk5oWk9LRScKICAgICAgICAgICAgICAgICAgICAgICAgYidmMGFCSG40V0F0Q3RtN3FIR3Avdys0UTJZOUNuN0I4RkkwSWFtTWcwaUdnNjIrMU9KM3dlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1pDWFVUREM3eTJBbThyb3RESVVQOU9HNkZnTEEzVzZQeUJTUTdKZzl3S2hRV1N3RDlMZGsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJrT3MrYThRRjhZRngyQmtCcU9ubW0veDYvMnBlMkJ6S0oxZzdPNUQ2YmZOQk4yVUZ2SicKICAgICAgICAgICAgICAgICAgICAgICAgYidOT2duMG5UR0gwdmdWNzhwMDlSV3h2bDdxdGRvckFCMjI5cFk4MHFCVm9PaTgvc2I5Qjh6JwogICAgICAgICAgICAgICAgICAgICAgICBiJzBOYU5JSm9pa1d5WUFXai9CUURLMnBFdklhSTZ6bWswMFdBTG5MNGdReDd3T0tVL0xoekonCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGNmcG1uWTUzdFA2eHBGSjhMQ094M3JtWHptemlPdGZ5d1J0SUk4dENQR2MyVUpqRmJ4eScKICAgICAgICAgICAgICAgICAgICAgICAgYidibElOUG9jSFZBdmxkeWk3eCs4bi9IN0c3MmY4ZnNJdjkrcVVXOUxvankyNE1LMG85UFo2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3l3YkNQOEZLVW1KQy8wU1B3aHUycWpneUJnL0lZa0EwK1pzSzRvNUR5QjNWZ0JkK04vbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUnZEYWtmL2hiTTdBa3BpQzRud1Mza1JnUjM5V0dYQ2tHekNYZjNKSndldVVwbHlhRWM1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidBc05rY1JIMUNGdDlsTVVMVXh4emNjS3NNK00wdGo3YVN6a2RZa2Jpa1NPWE9yajZVLzZUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RTRXl4NDZwKytneGVvVys0T1A0SXI1d2plRVJsb1NPTHlPTnBCeHhNem9MaVdsUDdMZHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInREMva2RHNXdhNjZEVUhlY2JuZVVwQXI1eE9TL2ZMRjZEV0NESEpzTzBWeGpzbFpWenBFeicKICAgICAgICAgICAgICAgICAgICAgICAgYidIYXo0ZFZJUEhMa29zZ29haFNPblhCWHdIekxDakhtdWd5azNqMEo4N2Q1VXlOSXBXSC91JwogICAgICAgICAgICAgICAgICAgICAgICBiJzBJT2JFRis4TVgxUHAxTmF4YlhwTU1vMXladThXd2ljTzgxWjgrMWJrekZmdmpTWlVocWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbUR5eGVUSXd5bE9UWnpXeEc2Tmo1NllBMGk0RHZNYklYbURldFVKRCtBcmFSZ3Q0Q2RXdScKICAgICAgICAgICAgICAgICAgICAgICAgYidtY0srb0xwT2w2TVo4NGdXWkErMktlK0NiOFVUa3B6bWdaV214WU5JalZ1Y01KdmYxRmt1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1drYStjdk5ucUdzWDZEMlN3UHZZTm0rUm1rQk0xYVRTaFJhcHpBaXltZjBmWVQvK1I2VFEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMVFFdFU5QUFmb2k1ZzBNWml6TFljT3FSWG83RkptNmVJNXVscWNhZVRiMlVDVE9YNHlEeCcKICAgICAgICAgICAgICAgICAgICAgICAgYic0dnhkS1ZybENnVkdhSityTXd4R3pxaEcvNytVWENCUnJhK2NJc3Y5ZmswVEsrZEI2QjNIJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1djU2RCWjdNMHdRdjN3ZmZqSzMzSGl2anlodk9LakNnZGREdEgyRytBMml0cU9BNW5VVFgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInekw2M0ZwRXJkTldvWFRuVW9zVmVTQTBOdVJxbGQya3FzNFlQdEZTSzRxRXl2ZlhpTWVsMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidOYkU2ZU10OWt0QThacWJPSnluV1ErMW5iZ2NTVU5KamJFTmxVbi9LNlJDYkYweE1rWExvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ltbTcvUjdsdW1sZGRCOGlzamZWeWs2S0lSSGlIRVNFVGpFNDVsZFN4TUVwTkdiQTFoVk4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDJhcjVndE9rY3ltNzRJTGpDRlJXSE9VSXhFUDN5di9MVHJ0RWdIVVpBWmtMRnJOeFZ0ZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5a3cwUFRDVCtVNkVuclgvNUI2ekMxTGMzcEZJaklPNU1EeVpyTDBBTXNnYTNrMzVZaHJ2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ01QTlg4YlY3Rk53Q0MxQ3EzYjZqVkdiTEZLVzJaRElJRGlBQnhjRXBHV25Xa0tNZXRnK0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXJwMjlZdk0xRFdLYVZ4Z2FrWWR4aWluTlBqRUdIU0kvNUgxSXpjUC95bjFzTnN2SnB4ZicKICAgICAgICAgICAgICAgICAgICAgICAgYidOQ1hvYTF6TTI2VXU1dTJTZFZLYXBndmx2N0xUQklGZUFEakRWZXhVNFBVbGxnUGNzRWs5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RuVmNORHJHR0ExdHVKTGFCNS9JeUJYUjdadjhyYzBUd2RRdDVSVVZjMU1sTlFhc3JTUWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYytKTFRNd3lCMVpFcVdhcGZCNDhjSDAvay96UnQ1elJKdU12WmNtdy9UdkkrVmZVaUwrVycKICAgICAgICAgICAgICAgICAgICAgICAgYidqSXJyK0dHTlVTMUI4RUdPZjhDcURadnBRRC9PMEZGTHpvc2h5YzFGcUNEeGZHZWFwY3VGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1k1NXBMV2ZGb08wZXVkbHNxbTF5U29KUlhxRXRySzV4ajEyN21PZ0o3V2lyUVZ5SUVSUUsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbm44dXZvM3VEZStrQjUvdHdvaXJZd1VZTG4rL2xpZVUvVVZKRU9hS0FOUWJlZW51MVhmWScKICAgICAgICAgICAgICAgICAgICAgICAgYidtYW9LUUEyQys0VG1YMmhYMG1aY2F0Tmp5M2prZlgwQW9DSG9wTXppL0JQSk5SN3BnMThFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lQZHVzOEU3aEpVd3lYL0VlaFkvQXVyRmNwSzVCYW9adGpUbS9DRHhEREJzdHc5NEw3N1gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWkZMNmpIZUtlZW9xMXlXanlyYWdpSE5lOTFjNm1HQ2RZaWczMlNwTWpJRDRxb09IUlpqbicKICAgICAgICAgICAgICAgICAgICAgICAgYidJRmdmMkhNVUx2QkdSQlpPZnZ3T2p5OFg0U2lDTlBYQno2VEJTRytVWlBUMEVqTzdBT2tRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J2TlZ6ZXJ4UWRldEpFRmg5MkpQOHp1eWlFT3Y1azc5QWxsVUxCdC84YlhwSlNsVVVMZDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOEpwZ1FKNk5BRU9oYXFIMmxkT2hzbXZaUXVvVHBjeUxueUZucVlmT0NRM1FNZUwxb3k0OCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJTkFhbzIrUmVDaGRHRDU1L09RWkdSZXJpYzlJU1RIN2FobGtocXVBMjZUZURaU3kyd1c0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VnYlBlTmhDTTRHOE15N2pNL1lZYzJuTUdwcHNtbm9tMWdnYlYvUlVjNWFZdGRZQis1TzQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTndLeUtqWkttZ2FwejBKRkNDZHZXRUN1M1cxREJ6S01ZRW4wOEcrWE96d3V4Q1U2TmJKZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidGWHNKakcwMVYvM3J3cVUxMU9SU2VpQU5ELzhNY2tVNElCRXhzVms3Z21HcGJBcWczL21DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0hCM0pQYmtTeWlxdXI0WUNtaG14ZTQrWkIyU1FUK3l3MXJkMk8vT3NRbCtmbE1LbC9UQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS2xGc0lSNEx1NDdnbnU4TEovajVoTHFHQ2lRTmVQQjlNUDZNa1lyNERRdTVyWFNZNWFLKycKICAgICAgICAgICAgICAgICAgICAgICAgYid3WTBDN3N4alpUck5OdWIva0JsNHdONndQTTMwL3RtS2h4M1Y3V2kvbzdzZHRkMXZqd3VOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1c4d1JUZ2RDZ3IvaU8vUHd6bkZCeTBhamNUcHNBbllkc3ArRUlwSXJWMkloYTl4SW1qVnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkZrMUlsbTV4WHF4RDQ5bUtuSjlXaXg1SWlKeTVyTXFtR3kzc2tST2o2eGtkbm9zb05wdicKICAgICAgICAgICAgICAgICAgICAgICAgYid1SUlLcEJQeTl3RkhRTXJWVmc5enJZY3g1dTlYTmV6NUVKZjlndUVrR0g2N1RmOUNZcE1iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BiQ3FIdkxvTndRRk5nd0FEbmQ5ZnlyQWE1NU9UOU4xbEwwS3lTTnBHeWthN3gyUjh4VDcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW9NWTdibW8rM0d4S09wMkNyOWVuM3luWktSZ0JXcWZ0cXFlQ1I1YTBDREpZUjhqSVFWVycKICAgICAgICAgICAgICAgICAgICAgICAgYidGbGhtLzdSSVk1OGdjdzcyZTBRZ2VZSWZpNDJWQWNONUVCdDRDMDBXU3d1MkFBaU1mMllOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JyRWdiVHk0SitOdFo2VEpLakFoVGtUWkNiSTN5TFRicVhSZXRCaFZIWkwyMVlwTTcxcHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInM3BySDROOXE2a0d5M29xeHZBUUowTHVrZnZrcTFRTHBIR25RR3FDeGVERDZsei9Xc2dMYycKICAgICAgICAgICAgICAgICAgICAgICAgYicvaFE1YUQvK1RFdFNmUHlGbHNUeTc2RVNzdkxrMytqdHprb2w1SFF6dldZamVhaEVJaDlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJzNING91YWRBR05SWFB6WFlBdC9jRm1BeEJHalliQjZ2Q3BuUkNVTjhVU0Nld1B4c05qMEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneTF0eFQ3d0FVMG9hOElCYUNDaDZDVDhadDRZZDFiVnFha3FsYVZscTlOV0RieUtVZndKdycKICAgICAgICAgICAgICAgICAgICAgICAgYidPWmNucno2OFBYOUhWQjE2T3B5K0MrZFJ1NjBKKzZHR1pBRWZFa1RKdlZHWWtWcVZVRkdLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1oxQXlvN3hVeVYwNXJ6T3VhV1UvV2VvaXlxWlFVQWJIWWt4SUlxUzkvZ2tMUENNOGNRVksnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXBZTUxVS3BobVRGc0xoQ043Zzh2dlBRZkhjVjNJZ0lMODd3UzJSelpwNmVtYWMwQUVDUycKICAgICAgICAgICAgICAgICAgICAgICAgYicyR01MZzhuL1dlYlo0bEJyL2Q3b1BBc3lKS3E2aWJHNTVNRC9keFRRa0tRNTJGU3BBNVFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0pMcXEwRFkxQUZ2dVkzdkZuZ0xZL2dDT0RkQXlVdVNUZGdjdTJJbDFSTnFkVm53MjNwSXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVdTRjBlSHRFTWhobGNialZzMEVkMU5SekJVdGNOZnB4QjdIcDVXNW1nRDB4bGtJWU0rUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLRGtOV1plUEc4cXBmYTdDRlJtamdpQWlEN3k2dGlLa1phamJDSkxGWXpROEVyL0tLU2tGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Y4b0YvZndtNXdSS0M1MUFmc0VHYkpYNHRFNzN5d29BRWNqblVVRHkxcEFZTlJSS2h6V1gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndVA0MmVTUkRzaVljSEN5TkM4SUtqeWxsakxwUnh6WnBvZDZUY3AvUlhtTGxQaXFVKzFHaCcKICAgICAgICAgICAgICAgICAgICAgICAgYiczRThDMWg4TER1Z2FTSjR6WTZPOUJNYldkR2E1RDVNOWtwQkl4bmlDdXYyR2E1bHNxanUrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hCbzRJb2RDWHZmVGw4R0l3UVhVYm1tQ1Z3YTZnQlhZcFF5TU5LV2VsdHcyS3FxcnpXKzknCiAgICAgICAgICAgICAgICAgICAgICAgIGInUDZ1NldCZ3U5am1IOExiUmhiYVFzalVudWZuRWlrQkRNUUgxMExlRnFEcVFGNzZuTzQ2QycKICAgICAgICAgICAgICAgICAgICAgICAgYicyaWVUT0ZLQ29uL01qRk5NQmhsVk5mbHFqTDVZdWZJZTBXQk1takVJTURFL2NZMGdra0luJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FWWGZYUUJUUXpBaFpkR1VYRytaUDVZQVhQNksvbjJyR2owMmJJNk1RR3o5VEtJTVNGTkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR3JNK1NXSXhRM1lXNW16Q0VTNEU2OUtEbkg0ZlRxTmlwKytiYWZZbFc5TkZMT05PWm1oSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzdHE4Yjg0V0ZCSFN1OTdLY056d0E2WlB4SWFSaTJFd0YxWXI0U2dIbjIwaVVOSW5WK20xJwogICAgICAgICAgICAgICAgICAgICAgICBiJ096dzMwVENuekF3bGhhOHRUYUFHdEhlcnNtTHJZTGdYQUc1ZldTaE55WHZoeEhPS09SUTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY0tPS1ViRGJQb1E0SWc1SFJzUldSQjc4eHA3dWRxRzl4N3dPcmg5VHJJTXJJL0VycndwWicKICAgICAgICAgICAgICAgICAgICAgICAgYidBQnR6OEVIUThCK1pyMHFTNSs1dTNhSUYyeGQvSmcwcGdwWHQ2S2pXVTdwTEhGekxQclNyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Njb2ozTE1pZ0tNVEgwekRUQUhwdHljcVhVNW5lN3dQdWEzMHZDUU5RbDZuNFgyNjFQVSsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncVYzY0pVS3dNSXBUWStOa1dMQ3QwREF5NGxPRy9ZRlRxVDJtdzRRWW5Lb3hPSVpyWTJLLycKICAgICAgICAgICAgICAgICAgICAgICAgYidCQ0FnV3kyam02Rkpwank1UUlwbm9lSjdVd1p1TlZIRFdGaCtnYVFndVA4SFlWMG9yU0wyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dQWmlGYjRBbitYQ1dZQlVnZGpZSCtMS2UzSFFmL1RNK0VmNFljOGxtTkVJazV4WE8vQ2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU056QkFjUlhhcjVDZGg2VG9pTGpOK0V5azl4c0JIMm9jS2pVQ2MrNmJKd0JCWTlUeEFtQScKICAgICAgICAgICAgICAgICAgICAgICAgYidoVnZVYktWWnk2UXVTRnp1NEU3eTZvYkpTTEJhMCtxMm5BNFBxa29Ed1JFQUxaSEZGblF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Z3TGpuWWNaVUdneFhKcXNhYmpnaDg3YVRHRHNrY3VWWjNOSVNydFBsU2J4WFRUbU12TEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWjBQSDhkZkNOZThWWXl2cnZlRUNVOUcwWmtwTWMzZ1BYQmF2a3JLYUJocmk5aDAyOVpKMCcKICAgICAgICAgICAgICAgICAgICAgICAgYidubVZ3TGx4aitFdmtPZG5IOGRTcHJQdkxSdGowZmJVc2hHMTRJVEUzT1hhRXRYZjZ4Z3hhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Q0LzdReGlEaURCQmZEMGZaTDNaT0wzRm5WTUhQT1dlb1ZFVmEvbU85RUNlcG1kRklTOVAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclUvcmNtV0x1UzFDRVhqRlJML1grdzU2S2dqSWFYVmFoT1d4VW9la3VSWmJjclBCU3BvSycKICAgICAgICAgICAgICAgICAgICAgICAgYiczYUpDcld0M1ZkZW9PMWQ1c1hCdUxZTHF0dER1WmhRcjJhdVp6dDhWd3E3eFprZG96QVRaJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JmMWUzZlJ0cEMzQlM4bHQxUm9TWklLdXQyVm0zQ1dQVnRFeE0vblhra3hxc1Z0OXBQR1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGIna3hvSHZSUUZLNGNZNmw1QzMremNpcDVVZXcyeE05R3JZMmNUSUFjdXI3SGxDb20rUy9HMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicxclZ2bjFlVHFhMmxuVXo5b016bm1PY25SWDlsKzUrUy9VbVlDSFJwQXlGYUpHa2NNaUJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lBa0xyRGdnZHp1K0RNN0tkckMrVytjRWhJeU54MWk0WkxoaTV4UkpKSklqVjcvSlg2OEonCiAgICAgICAgICAgICAgICAgICAgICAgIGInN0ViaXF3TE1KYmxFWC9IbnJPMWRVdkxPYUh5Y3ZqWHBqRE1uMENkMW1IRDZrcVRJZTdOTCcKICAgICAgICAgICAgICAgICAgICAgICAgYic5Z3IyK3Z6VmVTT1I2OUI2a0gzalZYYnRSRUxZbk52TjZaOURsREJrcTRIZ0VTVFlwQUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dXVElpSmhYUm1Ja3hKNHRCQUpyN2xhQ3BFanVreUIxQkx3MHpoRUYyQVVkVDlFY2ZWWFgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncEk1cFVJVmJCTVdCZndUc0FCQnVFWDRNV2JZc2ovOU1SR1RPQmcyS3NxTjA0TjZTMGRrZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic0TWUrMUUzQm5XeTZCNXl6endwVjdwTkFINlVZNmE2VlJSbjNBSGxCUk0wSFEyQm5Vb0lkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JzTFljMHhHUk1oSVkrczNQbDdTMHpYWitzSE5LOEE2aUlHZk1ya0VKTE43a1lDVWthWVonCiAgICAgICAgICAgICAgICAgICAgICAgIGInV1NnUytzbTlBbUlTb08rbVpDanIrVkVENThhZUFRS2VvUytXZ00wb0RKcS9aVjBCUndFZycKICAgICAgICAgICAgICAgICAgICAgICAgYidVVUlhUk9KV0lUR2lnZldyN1FvbHdnU3lDMzBFdG5SQU1OQ2FEMyt0UjhKV095eVltRW5KJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l3a2JGVGI0aUxnM3RVVFFBamhTT0pXSUFzdWhiV1NIVTI0TnNBdThjYXNFdWM2TXg0emUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSzNqZ0lWbll1S1ZTL25GREkwc2JtODMzenlZRmszWjlIZlNrYm5LSVpha0FBRmZKc3daNCcKICAgICAgICAgICAgICAgICAgICAgICAgYid6T1NvTUhVYmIyK2xFRTRLaFRBc2JPQVVGZzNheGNoR2RoUnVOUXgyRWxkYm1TRlh1Y3V4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VReVU0c3c0c0lUQzNBQXdpMXNzZDVkYmJxOFo5WVJOZHdCZVhLbkNha3hLMHdLckRXcWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUNMVktuMEVLL055bWQrVGoxQ01QQk83N1JsZnVTQmdsVmxTazZQQ05WZW9RTHNpL1VhUScKICAgICAgICAgICAgICAgICAgICAgICAgYic1Q0VnOXZqUVRjbWxzZklBRkExR1ZpZ2NnOHhTQ2RQSHJXQU9ySjgzT29zSlBGRVVGQVJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdFRUI0TE1ud1pwUEM3Z0Y1eWZncEFncUxpUkZaS2djRzUvaVhUaWRvTzlPWnlXY1QyUm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQmhiVDFzUXNGUVUxdHRzVDhiRnhnbVpkWnhPcWUwcDZaaGFNYXpGbVhXeVM3SmtBaVg0VScKICAgICAgICAgICAgICAgICAgICAgICAgYidzWHRJSndZQVZaOUJiaG96YVFNRTNJZ1RZVUJVVkU1ekF3RlU1eDUxTUtxNVF3Vk5SdytmJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdoK0NuUVc5UVZvZGlVeUxJNUhMUUVNNXM0cGhGSHpFa2l6cFkxMWdBQW9CRTlFUmhYS3gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbzJhUUJVU1Z5MjFwVWRvTElTalFTcENidFV2YWdIUkdFYnVPQXJaMXA4WlY3QTRGaHRGZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicydlUvL043dnhNK1FJMm5qVmpDTzBBZEJraFJFR2MvWlpVYXNCS3QrQnQ1QVVjMDlPUk5qJwogICAgICAgICAgICAgICAgICAgICAgICBiJzRtSGRoQUVIblNyWjQ4QVBWbUlISXI0VEN4Y0FzZnRPVE9tM014TXhLd3lOUTFNMXdLS0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZStuSzc4bURnMXIzbmdZVEVSYm5BeEZVek9ZekxhNWV5bmRLc3RnbmNiK2poRGJpdnVWeScKICAgICAgICAgICAgICAgICAgICAgICAgYidZSWxOUUc0ZUtZNW1Xek5oUUU3SmROZzdDcGIrOGloWVhHR2dKaDZ6NEd4bWhLdUtBZElXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHSEpHOXNDMm1QNklvL0pMd1RFMzFoYkVBak9RQlJkUnpHaCtJRXFIYXVpVmtZSFYxbDknCiAgICAgICAgICAgICAgICAgICAgICAgIGInL2JxY0wveDdXVzRiLzBibXMzaWkvWFVSU1hjbnJTVUQrRVduNzFNekdSYXpGTGtUMW9OaicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbm84bGRIZEtJckcwZGprbS9KV0J5d2VoaGlGcndlRytBNTZSdmFRNGVwb0prNk5GcWlDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2czNVYvcHpMYTRSR0Fja0V1QlpGRitZRWNzclZyajZibXNCdWpqeVhFeG5LdkFqcHNVdysnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTHBoOEFnREN3VGdVcmxNYkhmWWo1M2s4SExwVHpRUDRzeUIvbzluRHJsZW8rR0RXTEFxTScKICAgICAgICAgICAgICAgICAgICAgICAgYidiUUJNT3ZKU3ZBMENsUE9nY0ZmTGU1TThJK2NHSU9rcHhWREx0VW1CZTl3RmRqa0puOTRHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q3V1RDQnlMdVdDdllvaGFrSDNjODl5a1NRN0tVZkNsREVuNVM5eGgzMDJISTMrQ1hjNlUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZVVjMGhjMU9idlJpRWhzTW4zYmlDQlcvTVBRVlRoUTdqODhubWhVTXdmVGZzMlVySnc1MicKICAgICAgICAgICAgICAgICAgICAgICAgYidMdTdBRzdEL3lCV0dZY2dEZ1JydmFiY1Bpck9aWkExdnQrL2I3WU5MSllqYlozU2dBL0I3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NENjBrYStIc2Y5QzFNOHhuZThMSXlkSXdrMFBoYWhqTzBhaGFOMEVYcE1WdTg2UGVQeHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneFlPSjA1TnRZR1dZVzd2Tnh6aDZWU0JCWHg1RU50ekFIYmpxNkc3WTdTcS8wMUdEdWpoeScKICAgICAgICAgICAgICAgICAgICAgICAgYidDd3lGYVFXV3hrelFlaXFTWXFNak5WUTBUd2RvbXBRTmJUNUUyUkdkVEtQc2NENk1oNmcrJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdJckpkL2xtazd2K3hGZCs4V1YrTlBMWncvaE4wSUZwY0U0ekdENDZGRkNoSmczMVNKdXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWi9ZYW9QZU44NndWajV5RFczY203bmNURUpqZk9JTldTU2hndUM0dDdtWXpiN2REWHVMQicKICAgICAgICAgICAgICAgICAgICAgICAgYid0TjN1SGFsdWQrQmlsbGRpUXZQVDQ4QXFLeDBlVktjellBbFVTQjdEK1NjTldmbXQxcFcvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21JQ1VueitqZXFOYXJlTmFMYXBERVI0ajE3OVRRb3lPQWpWRW01QWhoM1ZEK1JuYjZpeVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInWStOZ0o5VVYxZmVsYm5rQWJoUlorYmJaUkEwL1NQMTBZWFhZOGxHQUZkWVF0TEVPWS8wNicKICAgICAgICAgICAgICAgICAgICAgICAgYid6U3BwOGFSUXVXVGpOT21Pa3JiVXRieWtQTVRLQ1ZrVDB5Y09UYnlsQmVqMmowRGtMd2hXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1A3SS8zdzJzTlNBYnNEa1hGZTNaWEhFb3Jqci9zM3YwL05vVi8zUGNjWWVIYU9xS2pBSFonCiAgICAgICAgICAgICAgICAgICAgICAgIGInVmY4YXpDMjcrdjVhT2gzYUpSVDUxdVhFVVBNMmJuVUVIU2ZzaUU3R2lFZmV1Yjd6dktpUicKICAgICAgICAgICAgICAgICAgICAgICAgYidEYi9oQVJtTnNPaStjK1NZWFkwTnNHWm1UVmg4amtVMWl6OHF3WnZtM2NJZ2NMUEplRE1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZVYklPL0ZveDlKdERQS1dBTjlXR3RtNFI4NHVDeWhyYXRnSGoreDRMMFJTR3VQSHpJUE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneExTZ29vWXdCTDkrUno3Zkc1WnQ1QVZlczdWOS9EVWtSQVRSWmpDRS80VkNDb3hRUERNZScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVXJ1c3pzUGIvMjdiU2xCdjVFRUJXLzJqNUU0aGtheTk1MGdxVHNQN29mRjdHR0h5c0tOJwogICAgICAgICAgICAgICAgICAgICAgICBiJzRMK1hCdFQ3YnlIM1hoaFBkazNtMWN4RFVFR052Q01GbTYzRXk4Skt2Q3kwRzExb3VwQWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXZEVVYyWmhWbGRxL2cyU2djWjd6b0dyeGxTOENGWWNya3J1Y3dpNXhDUC9PVVJjL1JEWScKICAgICAgICAgICAgICAgICAgICAgICAgYidUYmtxMmpZd09JQytDWDR5aHdoQkM1dk5WK0dNNDVValExdkJSYU9YTE9qbTlOc25BWFBRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s2ZEEvbGRUT2I5MkpWNDZSNDdNeXRRUUtDbFU0bDd5V1ZWL2F0ejQ4eTFJUzZHV0lnT3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbzBodEo0L0dnbkMrTnE1U1hZdm9rTVRISXdKOFFFMi95dC90WGowaG05SzhGbmQzSzdFYicKICAgICAgICAgICAgICAgICAgICAgICAgYidYQ3FkTmt1UHFKU3cybHZCM2FUZzFwa1hqOWxzYWlNUHlnTTJxT0N5U2VrM3VkNnhXQnJZJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q2TmdMQnNSZVF1eUk4UkQ4VUdzaHZ3dGYwR1ROZy9Jb09YNjcyMEhsbnBYQ1JsNzA5UXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInN0laYVVGTGlUSWwvSFprbzNCYlRSK0Q4cTJQWHBlTzAyUG9VOG5yN0lhKzIyL21YdzlkYScKICAgICAgICAgICAgICAgICAgICAgICAgYidCRVh3N3ZPamZEVnQzYzBUaFpkbldpLzh3OFAxZXUydGY0QldPejM4dnRmckhhS0cwMXJGJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBmcGxlaGM0dlZhdjlTUDk1N1NNR2QraHBEWGZjN3FNWEtYbzdTU1A4SkZGcUdldE1YVlAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInV01KNkg1SmR3Sm4zZi9KK2F2VzgvLzdoKys2UDNnOHQvUDlmcmY2UEtNTS9QM2VMMUU4dCcKICAgICAgICAgICAgICAgICAgICAgICAgYic4L0RIc3Zobnl0RXJYZlA3WTdkODhzM2hjUjQrLzlkVGdjZGd3cFlTc3pMNldBVmp6N0lWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0R0emxITEViVnZyb3NncndJYUNFM01OTWF6ODMreWpqQ081Mld4OWx3OXhjYm9CSHZMT20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInWG5HQUlRQXdrUE1xQzcyWjRudzU3SUVJY0U2cHJFNTU1WUV4VUFiemlsSUpzaFh1cldmLycKICAgICAgICAgICAgICAgICAgICAgICAgYidwalNjM0pYUm5NUndpcU5mVDRZRW1ZQ2d2MkU1ZnlrUmUwVU1wZ1JZVG9zRGtiU2o5dHhrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tYZzNZVWEzVjN3aEQ2TjFpZlI3dldlcTQzem5tTkhWRDZueHNRUU95TWtweXNiYWNjSFgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZEoydmlXVXRiOTFmSy9UU1JQdUF2UmszQ1RVSUR1ZVlvMjRRYzdPbTl5c25rS3dMVmI3UScKICAgICAgICAgICAgICAgICAgICAgICAgYidBcWhRaEZZbE80akpxTU5SZTN3NGcxd3NXYkNnazA3a1hwcUkxdzJiQkh1MjhQUUE0dDVFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZWQlV4UENnUnpLTFhzalpub1A5UjEzaUJqNnBwc0VHNzVPblo3TkpoM1BpblA1VU5BMDMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbUZyMjZLd29CUDVnUWJTeU1zRXlKQUt1RmtPSFQvdjVkdGpYT3pZVE1wL3FaalMzY2djaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicyY2pJUzlMNVZscERYNUZkcUZydXAxWHVHZm9UbXlHZHF6ZmtYbXEzUitTbTR6TWRiSll3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3h6dVNLS1F6SUEzNUdkUnFWVEVrMG9SU2xLMnkvTFN0MmxBU3cxTFNwVzQybUFabHJNbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXl0cVlGV3kvTm9JRmtQTXNtL2NsT3dsZUNNL0tMSVloSVVDZ2NJMzRQUFVCczMzYjZTRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzUWhsOFlBbG14cWVYd3RiQ0swZFNUSjFUKzFwdDNsMW5pMW43WGRWVjN3YnNZdTBHN0VUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0s2Sk42UWFSY3ZIMnVlYk5ycVBMVnJ3eUVwNUNHTTJLR2hlL3VVd216MFowU1ZGeHc4Yk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZlVkOGw0WDFtenMzR0NaRnZ5czZCVGI4bHpFMEhZNm81eTJWZHFHS1JxRnVMYk5FZ0pkeicKICAgICAgICAgICAgICAgICAgICAgICAgYid5MkMxN3I5OHh4eVlTTmdIUGpUeW04NHBQQjBENG8wTTlZaE0vS0hraGJHUmtab0ptYzRXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25BdkFKQWFwMVRSekVRVTl5c3RIb0hOVXhBeVJEVUViOWtaeEhtQnZoSm1zQlVIVnpNVGsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS21DdGZHVlpmMkV6aUV6ZTJCTm15RFFzSm1Belk2ODB5TEI5MTlvSTVrRi9VTnZlVnRTVScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZHBvZDhYQ2hHMUZCekhqS3RhUFJWeWFxMnRXWi9JWkJIeFZ3TFA0MlIxWk5xRkcwV1VpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BSWldsWkZETk94b0Jya0s5UjNRZVdmcFN1anZFV1FJbElNQk9raHhpZVM2M1d6VzNHSTMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2cvNzNrL3l2M3BzcXNnZ0F2aUE2dzNtZnkwakRqTW5wMXNpTWtVODdRUCtuWlIrdGdhdicKICAgICAgICAgICAgICAgICAgICAgICAgYidTc2lNRlVJSlplYjMrNjc5dG43cHdvcFBDVU81RmJxcnlFeUxEN09kSmdySlUvOGFMMExaJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hMTHM5N3Q4ejhNaVhZdCtWOHNmWFRveSsydytXSWdVbWcwQlNvcXBOcHg4L2l6d2ZwWWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2FZYzlYdnQ5ajBBNHN4RUpmemM0NlBrNFk1cG5MRGFwTjJlN0xFQ1orYlJ3YVRoWWJSVycKICAgICAgICAgICAgICAgICAgICAgICAgYidQdmZ2WXB2ZVFBZWoweHhNeEZtTmV1OEtWZW0rc04xbEZQU2NoVFduWWdUWlBDcm9tRzRZJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lIdFlJc2R5eFZheHFEem9OaXVzWW9zaUZvNEkwWjV3bmh2RGxJN1lnc1UwZm9PRTJUUnknCiAgICAgICAgICAgICAgICAgICAgICAgIGInM1F5R3Vxc0YwRmxWNFpiZW91aHRHNC9QYTRXeVBmNlB5OHIvY1JMY043YlJLZkxOblhNTycKICAgICAgICAgICAgICAgICAgICAgICAgYidZVnJ0a0srbHNqSGl3RWNveG1SaUNzSFZzNGlGZUUzSGY5Y01pMHBJTEkvWmwzRmhkanJZJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Y1amg4K2pyeUZNcFRhdmtFRTRLMEp4RGhaQXRKRllrNkVobTBSUHlFaHhvT3A1dTBEQ2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVzVlK21PRnJBNzE5c1FyMDhNNjNudW84bU5lTUM5aWc3SlZlUUU1ODAvS0YvS3Bkemh4cicKICAgICAgICAgICAgICAgICAgICAgICAgYicrWVV6OTVVajU2WktmbVA5MnQyeCtwVERJNEEyNE8vOFROeGh6aEw3WjFmT29IdGhYS1M2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tOc1lJVXJRWlQ0VTl4VlRFcE1PV1dVT3hYbTdIUlcyL1ovSTRJUU9BOU1mbmZIeDUrQ2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSWtmTytkU2RGTXZOaHZ3KzFEVXd5b05lOGJXcHVhRHVOZHV6UG9waklES2tubk9LOTVPMScKICAgICAgICAgICAgICAgICAgICAgICAgYidxTVYyR2M5aTlXRkdKeVhTWkl6Rm9GdXFHRXFSWTVIbFB6RXdFQlJGdVBDcFVMOURUSzNmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3c5eCtaQXVaKzF4Y2tCRTY4MVA3WGJkdSsyckd4NWxab3QzUHMvUkRPVXRUdWtNUG5JZ1EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUzhNZ1U0VHZDYmRqdU90blpxM1B3RVluQkJmZVUwVC9adk16YzhSaC83RG5wd1Z6THZ5RCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcXA5RnQ2UnlTQm44OHRXNkYwaloyU055U0MxODBKbzAvU1RMNGdWQjZ4SEVaL01pMWE0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JsczlhazJSVE9TRE1lWXNWWkY2ZWM4VWZzc2FkemhjRjBhV21Fd1JYcTdDaGV0SDF1V0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncDFBa0w4VXBjVlQzcURmTWh0Qi9mYWZyK0VnOVI2cmoyTnBuUkFLZ21zeTh3elo5VXdVSycKICAgICAgICAgICAgICAgICAgICAgICAgYidzODlsNjBMQ3hNYUhkc3ZLUHkrVG5OcDlZRkswQ1FqZEgvUjNibjQ2d0VDU2R2djFybkw3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3pjUVphNDVhbkFTTms2UEhqUmpadDV6cnZoWHZ4YzdkT21kMSt5a3RRaGYvVXEzbTFXWlYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOUVyQVJtR2kvcnBGc2ZZeGNjR253anh6d21uOGdZODA1M3lkblh2bDhMbnVUaWIwMFBtTScKICAgICAgICAgICAgICAgICAgICAgICAgYidhZnJVaUNhcTNYQlp1OW54b0xoUmhadmlLMDNBaEdxM050WWVWRzI5WXBOQThMVGxjaUh1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FQTEJlUTBYdXFNRnFPVythUG11ekJUSStNTk9CRGMvbyszREl0NlJyMW1XQVpKZHk2L20nCiAgICAgICAgICAgICAgICAgICAgICAgIGInN2hpK0l2VVZvTzJ4WlE3N3dpVXBPdkszNlA0bURiUHgwL0dSSEJxNVZ3bTFnb3dzWC9hQScKICAgICAgICAgICAgICAgICAgICAgICAgYid5cDdveUVxVUpLVW9pZW5vSG45Mm9GaS9kNlpKZWhQeTZSazFORXpjRCtWSVpQSVhUVGFwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1pxREdoTXYzUm1Ha2c1UzRZaTErbFRRUTFiaUpqTFVTY0d4SVN6NVpTTWNDY3ZGU1VYZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGc1dklzVmxieFFycEZSSUJxb25GNVdrQmRtZHh1WW5NZHJKcWdZcnh1V2lOSFVqWlNKVScKICAgICAgICAgICAgICAgICAgICAgICAgYid2OTJmMG4wdjViTzRPamxJS0RrMjRjOHBPVUR4TTVsZ09iUlpoMUVCbXllQms5UGRxVXJIJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29UMkdsTmgyc1VKMGJQWDM2NTFJZTFvUUNvNlg2a2tWaHU2VXdyOVdYL2xEN3oraVp2cEonCiAgICAgICAgICAgICAgICAgICAgICAgIGInVjllOXBodjVPUFZKRzNlUU1wcE5YQ1RCL3hrUnBGVVE5Q0pXVUlzazYwbUVFUnJuT0JnYScKICAgICAgICAgICAgICAgICAgICAgICAgYidFR2YrS3B4OEVkTEZGV1NReWN2aml4a2RZSlRjOW1iRDkvUlp5eVRIUEVzeEdTNThzUlFoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FTMGhMZEhZZGNVT1JZazh5UGZkNVZTRXBWdDM0RE1oVWpJcFVRUmNLVTg2ZmJkYm5GVTcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb0p1ZXZPSUlMdHRteUd4RjNWL3hoWGh1R1cxRFBkbzVNMkR2U2dIVEdvQkJVa3RtMms5bycKICAgICAgICAgICAgICAgICAgICAgICAgYicvNUc5cGg3amZTRm1VdkdaZnp6QTJCM2dGVTN6WHhYeEtWY3EvVVNsNzgxai92MmtteHVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ZyaEJWMzFsQVgxOThLbGNlT3FCWXo1TWpqSlc0ckZ4SVNldXZyOW1qUklRamsvNy8yRXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInM1VIcUsvVU82SHhSbjJ3Nm5WYUVhYmZiSzRIVkowLzUzNEgxaW83eHhZU2RuSFFxb2FGeCcKICAgICAgICAgICAgICAgICAgICAgICAgYidIdk9KMWxrMHV2WEgyRkR2cTZOb1pVTUp0dFRZakhJbFo2eDhZcDh1ekxhYUZydG9YdXlyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyt5cm8rNlp1eEY4M2pmaDN3Ym84bFlCcFczdUZJd003bEFReG40SjVITzkzRzl6VUw2aTQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYkd6TEUydFMraUJ1aDZsWTFXNTg1ZU5hS3pxUWRTd3U2Y3dXRzZlbDNoZVp4bUVjRVRHdScKICAgICAgICAgICAgICAgICAgICAgICAgYid6bzRBUDYrdjk2VmRESFQrQTUyNEFnaDh3VHB0dDQra29Lc0NSdUNEcEppbDduQVpkRHJRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dYMVQvTElxRnQydUFrTEVJK2ROT28vTVBhRExvT2M3SjJyTU9ReG9HY1IwQzhIbDFmTGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSGFRb0dDdnNKd1ByaWNLcHIwdENLWHBIQlh4UkNhMXhiZDdLZWQxc3hwWGJZUWVGRnBFcycKICAgICAgICAgICAgICAgICAgICAgICAgYidWd1NKYU5PaThMcU9acXBvdkM4aU01cG96RW1YTFRQaWt5QURuZWtsM1hjaDZYclQvL0FkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0cwcitrdzRqOFNXazRveUNkdXIxM25JOWhsK21LdDJrQ014VnUzcW1zaUUvOE5uR2xZeDEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTk0vOXk2MjVoZHZ1Q1Z1NGMxQ3NSYnVEdkNPTHVpZFVtWEFGc28xWDN5RWNld3M0cDhTdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicxSFhualNaRVlxeHJFQS9maW5lVGdpcGlORk40dFRLazJhdVZVdHMyUUdJWlFOc2Vyc3ZBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29FN2ZwL3MyRGxQeUVLNkNXK2JieThSaDAyRko4RGZXVnRmZzlIVDRjR3JkU0MrRWF3eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZjBxNjg0R1BYSmFXVlhBbHZnWEpGZ0RLQ3RjY0hIWldVYWJqVVppd1hhczhQUmdGdlVGMCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0QnhFUmZqWEtFQ3ZrdGd4NGNvcnVpc0xCZGJkQXJCRkkvYTV4NUVrWHVjWHo3WlEvQ0ZPJwogICAgICAgICAgICAgICAgICAgICAgICBiJzc4MCtoNnIvL3pnczQ4Vmp0cDBmM0pGbG9uK1VEak51OVpOdldldW53VnhNYWw2dlV4bGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNVBXMUt4QmF1ODAxYTlkU25IUGR0MkswNXlUcFc5UTFjMmN6dnlrWlZqZkptREp6bFV3dScKICAgICAgICAgICAgICAgICAgICAgICAgYidJM3Q3ek1UUXM3dzB3aFUwNlkra0diay9vUU8ra1I5QnFHTFA3SkJ4NllSN1JNWmZSRkxjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RiS3RPUGFKUFlEMXBmQ0hmQ056NGIwYU5TR1FMdjkrUWZQbW56VFE5UXQ5bGczMkdWVTcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWhDWFYvTHN2WEtRelVaRWdVQWtFL3FpclU1K2dDTE4vbk4yY0F0bG9KZ3dNVSt1T0ZNaycKICAgICAgICAgICAgICAgICAgICAgICAgYidkclQ0ck13cE9ZUEFRd3FuNXZrakQ2aUovLzJGM0FHMkszWEdObUkvNVA2K05ZOHdMbXR2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RjaXpUMzREc3A4T3FDOUFtN3NtNjR4Z2ExYkVFOGMrTzNIS2p0WHZqS0NMblNzSlp3SmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInNmZhdW5aTklPNXRyNTU2M21OMmdSYmgxRFdMeUt0Nkl6MXF5ZkNFakFMMUFYTjdkdVZJQicKICAgICAgICAgICAgICAgICAgICAgICAgYidpcGkxYUpIbDk2RmFZVCtpYXlQSTFMQmxkbXI0WUZTUzA0Z1BzejA2UkVzeWhRL2YvekdMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29xUnV2eHNWWWZ2R1hsY2N0Sy9kQmFnZjIzcDJyRG1hM0Y2MFRJa09QME5ocDN1SmxEbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1BIVzlNVzZrWVhzS1dueDRES0pvZ1dWZk1TNlBxZnorRWR4TnlSbk9jMmlOb28vT2ZEQycKICAgICAgICAgICAgICAgICAgICAgICAgYidJQ1paREhRUDZKQkVZUjd4VU5ydGc2aUtvZmtGYzhxeFlMdVJta1hNQlQ2eTJiRHUveVRJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NoMkRoaXRHdTRaR2h4OFI3djdLbC9ISjAvako2eDJzaTRSMzZFNHprUDVld3ZkaUh6VFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2dNcWxkaCtyZWtDaEwrVStPK2VwT01sRk1XNGMva0puWnpQTkYvNFBSU25mRk1GR1ZPTScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZHYxQVp1NG9ERGpOYTlINGJzV3FZV1lYU0JRcGNneGx5YmdWMy9qQjFtU0IxSWNhSzl3JwogICAgICAgICAgICAgICAgICAgICAgICBiJzJkYnN6ZVlvZjZwdHFESmRXazJyZ0lFSHp2LzVYLy9iQVZ4OVRhNlRzSENkZkxLNXZuR2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInR01XTXgycjlLRlpSRFBmZEpmUWUzN3BDMy9HOWpOUWVHaXlXQkZ2N0x4MDhHRkZscjJpaicKICAgICAgICAgICAgICAgICAgICAgICAgYidldzNvcnloTVNTRElmQkZGWS8vSEhuUmpJN245dnF4ZDZVVFh3VnF2TmFuUEZXZHY1RXBqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FVb0xONlQvVS9TRHJQc2F6U3VWbDVEeURaOHRGUmdYZ3UrTWxqZnhxSHNUZll1aGVmVzgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNzMrU3JiNXM5VHo2ZFIxSk5nNitxYmE4ZE1SSk5OMjRWNFFoMHNQbUpWeStFOHFXUldFdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidXZzB3ZUpURWFySFVzbVdBQTdJVHVtRFRrUWxmVmRTVEZ1UDRodW40b1RhVDQ0TVZWamRjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NNcGZQYjdjWXVmcUM1cmR1WlpXci9YcGxrQ1RCSHdnQU9XYnFCcUh3aGppZEptMzdJcHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3c2Rk14UWxKbGJCK1NWdDZiVEZtZUlKeHpmWUI1UXV5ZzJvS0o1d3JrV1hUeHZRWVlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidZMHJKRStwYzhtMkJoWWZlc1k1Umh5bThWbHhjWG9GVnN5bjd1Wkxrek95aVFmNXRoZmI3JwogICAgICAgICAgICAgICAgICAgICAgICBiJzFKRVpuVytzN3VMeW5lL3lWanFoVG14bDQrb2pMQUdUYXM5ZVdYcHBjMlZZZ3ZXamIyc1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVM5MWt3c1ZMdG02cDVZazRuNUJhNzJxZTA5QWZCSUFveHdmWVVSYngvbU9iOWw1a2xWWScKICAgICAgICAgICAgICAgICAgICAgICAgYidCa2hZNE5kcnVqUkk3dDdYYXM1NTFEL0tuaGg4TlFWRngvcStSUmRPOENSMG5Ibk9PYk5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NPblRGVi9XTVFWVnArSnRielRkR2xZTDBvWm9ZcDlTMkZSWXlVWm5YVXc2MkpYNlNYQWgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndm1BaTY5MXltemN6SklMMC9MeHl4ajA5RVV1M3ZIZXFhaThpcDNWei9vMUxLT0FBWExwVScKICAgICAgICAgICAgICAgICAgICAgICAgYidOK1pEaDJ5KzJUdDVSbkdkMUgycnl0NEVPS243dHZoSzNNZlduQ0lTbUFtTEZLTmxhVk92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1lyRkxQZDdjT1dVS1dNR2hOM29tUkRNN0NxQjY0bCtrT2JERUxVTXpiU0l5NjBpUm1vUCsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVWZCUnhOMk05WUFnSFVZZXlOZ3N4VEN2UEFQa1BLZjdBa1JTSTBrUVFXcUpJU3FKWVZMeicKICAgICAgICAgICAgICAgICAgICAgICAgYidKY1U4QWFPQVhweDRkQ0NCVGU0Yy8yREpKZDV1RzMvQXFyYXM1bFRCTE03TkZkQ1E0bmlYJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0VnRsWFRsRUJjeDdBam9jaXliTjZpV0xpTGl2Q3ByYW9wYXRCY2pMRlIxZXduZGtERGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndjBGQXg3dmpITHdaY2lRZTA5RnZDaU4vNEV0bC9HK0NXeUhMTW9XQ0svNzdJcks2Y01ZbicKICAgICAgICAgICAgICAgICAgICAgICAgYidLK09mcG5nTDhVYzNzNWcvQTVIVFBZMTAyeGo5dlNXaXYxOHZ6OStadnpBaDZLVUp5ZG55JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1R5aWhKNWh4NTYzcFJJdnFZb2Zic2RoN3dzd3Qyb0wvb291MmZ3NkJ0UDN5TDJpVkllem0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInR3BGZ0g4WHkzeERMZ21vV0NTVTFaN2xvaG01cFlnOW1YLzRiVXQ1NWthQUQ0L3VXMWJNTycKICAgICAgICAgICAgICAgICAgICAgICAgYidISmVWWUYydVFoeWtKcEhSZmZNbVJXWldmbWI4U3krMS8wYTd4ZElvVzB2TE5VVjZZbHdmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RYMG1INm9JYk44MHRYVWZYYXlsbUZaakQ1UXRVdjZETnE3SE1ONyszWlBsZ2pXWE5RQkwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYzd2ekdLaVN2WEJsYS92RWl0SkxpaWN0MTEzUzViZDA1WHlNcGFFcjJJdGgvMUIveCtHNScKICAgICAgICAgICAgICAgICAgICAgICAgYidjVXpSbHBRNEtKTDduSWwxZXJVYXJzblI1VjZsOHJmemlGZXQwQk9OKzZWYVFacmJIOWkzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3loUHRrUXJyV1YyRS8raEkvYnJYeHJPcXQ5UDB5YjdHRFVDZjhwYTJiNlZxaDhicTc1VVgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWZOZnlDbGZtVXllL0pKOVl6S3BmNE5tOXpFRHRUUktCeFRMTjEydVc5N3pmcVdlL0t0dycKICAgICAgICAgICAgICAgICAgICAgICAgYidaZVBoZVB3M0l5ak9TMU8xNWlqTXRTVi9NMlgyUlZPdlBwdzRmL0l0RTViR3dRejhDYjVFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NNNHNHM05sVHZTVzdWcVlYbFduSFY4RUcycldGT2xNdEEzWkx1ZE14alZXVUo3SU12Y08nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRHYvREZNVkl3cEszb1RyN0xTdFkrWThTa3M2enRnUzRzOVZzYmRwc2hUV0I4QU9KQ211WScKICAgICAgICAgICAgICAgICAgICAgICAgYidDTjNHemFUbzdiR29ieE1LK2FNTjkrOXk1WDdWMlBoWEQ3Y1JrSmk5bXRuaGEzMmVtQzIxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZYeUx2Rm1vVXRWbjhjMDI2cTAwRFJ2cjQ5KzJHOWRpSnMwQk1WRnZ3ZDZ1L3JjTk5MVmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSSs3UndqWDlXYTdxMkdyNTUvaU1EUFF1UDd6NGNISVpaRkp2WmZFbkJjcy92eEhkTGRKTScKICAgICAgICAgICAgICAgICAgICAgICAgYic1KzMyUGsveVBCMHZrMmhvZmp4Yk5RQXo4UGY4SVEvemRydHRmcjF3UGg2YUpBVmNDUlhzJwogICAgICAgICAgICAgICAgICAgICAgICBiJys0RHhvbjdBNklaVjBnZXJCekNmdUo3NUs1bjB3Y0UvRGcvL1J5dFBsOWtvT3NPdUJaNzQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUhFYTJEdXE1N0h5dnZJdDF2LzR2d05UZjhscmRBQUEnLAogICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLm1pbi5qcy5neicsCiAgICAgICAgICAgICAnSXNUZXh0JzogMCwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ0g0c0lBQUFBQUFBQUNvMTkrM0xidU5Mbi8rY3BaTzRaSFRDQ2FHbHU1L3NvTTZvaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaWFac2VNY081bEp4dXRLMFJJbE1hWkFEUWxKZGl4VjdkUHNnKzJUN0s4YjRFMlcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWjdkcUpnSkFFTVNsMGYzckMrREpVbzEwbktwV0pwVFU3c01remNRcXpGcHgwQnZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1I5cExJalhWczBIYzZiZ1BWSjRGK2lxK0htUmVwSmJ6S0F0dmtpaW9aemFiZzc3TScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2RkdxSnZGMGFaNGY5S1N6Q3BObDVNVDRUcnN0TW0rZHhkbytjK1g1emRkb3BMMXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTklsVjlENUxGMUdtNzlHZHpMdU43bVhtYnJlVG9wZS9hdXFtak4wSDNXNmp5OTRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MzV3E3eGNST2k5akxzUFRKNXQweXZxT2ZDZzY0Ui8wdCs3Mkg0ZlBEdjdSZXRhNicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYQ1R4T1BLKzVwVDVQY3B5K203TGIvM285YjBmcWV3MEhrVXFqNmpzN08wSEtubVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTHU2emVEclRmdXY3M3ZmZnQ5NkYrRWcraTF1dmwxL3hDVlE1L0FkTkhybytVSUdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hiblVRVEVtNFQ0NFN6U1g2eXdlYVdkQUZWZUJJeFpaTk1IWHUxazBYbzZpY1hlZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVbTIvWmZLdUkzOEpmcFNaQ242U1dmRHc2dUxreFllVFk3OHZ6ODQvdnFQVTkvTHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOGVtSi93TUtmbi83N2hmL0YzbjU2dUw4OUpUU21aTEhGeTkrK1lYU1A4dmprOHNQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YrZWY4YzYvdDROeXBvK0ZjaCtVWGYrZ1Z5MUJXcXhBRnVsbHBsb3ZzaXk4cjliQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5eFBNanpjS2s4UldyRjY5b0RidGE4cTdpZFhZQ3hlTGhCYm1TaTJUNUpyb1poUnEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna1lvd200S2tsTTVsMzNWclRmQjhiV21PRmtFZTZRL3hQRXFYdXVyMnJQYUpMUHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dlWDZoWXJuSVQxOG5ZWHpDTStyMXBhRzZHMTk2bjQ2YWVrZ0NGU3RqcXFhUEJnaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczVzR2aFpNeWdUa1NyVkZub3NCTVE1enpyN3dMTHNSU09rVWpqaXRmbVJKYVpUVkYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGxLbVlLa01rWTRkdHhyRnFENVJtSmhtaitiMFZHZjNaWTFXckhJZHFoRjZqeTJSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JsV1VIYWNqbmovYUF1RXkwYi9IMFhxeldXUEswN1hydmZsd2RucVNSRlJoaS9rZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxV1lOZTZINjBuMnRIelJ6UStWZnFldnErZFRNSDFYendEbE9RclNrYS9ON1U1L2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnY5SWVlaEFkSGMrYWRTNmJhd0M5dlF5bjVXRWNZK3FycXlOL29YUVVsa09RTjh2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzl4SFJhN3V0dlZFUzV2bHBuSU5SRFoxd1BIWjhKNHZtNlNweXJtbnhheDgrTXg5KycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnWjlYK014UWV6azJ2eFpPeTNGOUxjR2JxcnFucHU2VXZrNmRpOVQ0MVN4T3hrekcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUxkVzlaeDUwTU51NTRoT2RDRGl6UWF6dFFnelRQNjdkQndOTkhVYUt3Z1c5VExDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFYjhlcjJmSTlXWW9Ua1RJVlo2bnAvUjRrWDVaWlNBR3RNTVRYdHpVK1NXVzdEVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwS1ZwUndWcWlHM3NqV2dBNklmclg0R2wyMDB3Vk40a1RuU1VpWHJuN1ZQYms2M3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMTFaazB1eWVIcHJQWFBXdWZXb3J5N1dsTlo0dzNpOG5nZVhRNFBCNVJmZHJ6RzRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZhK3RVTU1UTElxWFJTdXd3VWk0UG1Vck9xdjN6dm55aFJuUWx5L09BYlpLdXgwTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEVUtWemVVT2xjaktYalpaek9OV3NZQnJFZGNXa0VkNHBhK0RHUCtnV1ZkbVZkTmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWY5L3Q2eW9aYlhUTXU4dWFqbFFob05pdk14NVRPRllQR3dsOHBReFJUNEtzSERtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZlNU9YSFVuVjBTbVRJS2JEVTFiZ3hESG9CWWR0V2lHNnRQemZnL1pNc1hIamJlWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYTTJHZXFIQnpXNldPakw3cXRiV1c3eWtJYm9mbHRUR2tOYTFPVjVUZ1Y3emR6OHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2lwdE5vNERwcGNOMzNOMTBCR1lmZlU1TFMrWmo2Sm00N05mQzlta2duSEJBRWRaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZPcklVaURhTHdrZEpNYTcvc3gvNi9KWENEK2NDcUsvT3IvNVVyUVpUMFJFZE9IYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCcWFSZnBYT0YralArRkxmSnpRSldJekJDRlUyRyt5dW5BcHBlUnluVTVlQ2laMEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRnWngyQTU0YjNUMktaanc4eDR6Q2haUmUxMkxTTmMydVlUakM4WER3dmFIa3BmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pySTBTZnlEWG4wMnZ1M3cxV2xqQ21zVlY4ME5yT2h6SlJjbG1heEQ4S2ZHSys4YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaHd0djB3aHliQWtyNUlZL2JuQTNoYTE2aCtFZXN3UStUc1ZJMnptTElreHk5aGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMjdNNlJ3THpFU3BhdDQ3UHo5Nkg0Qk1aODlZOGVwMmxjMHNrbUdZZDNlbkRtWjRuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2p1dmRwT1A3V211dkxVLzA3RlFlRzRFcFhNbE1DTXVZTGdoQmh0UFF3RFZweXQ3TycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic1OUU0Qm1rMUh0WWFYdXlaVlFDUzdMN2cxbzBKbmU0eVVXTFFqZW92d003QkFNR3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncTdjK1ZSSU04cXBmYTIrdUdpdWtBWlF1ZFRoZlZEWCtxRlY0WllTN0dxcU9zN2lEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hIU1lUZCtyd01rWkR6dHlFampqVUlkZHAzT3ZLbzU5WTd1TnpYR2dYRDNMMG5XTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdU1reXpCQTU0cHFkNXpybHRNUm1qYTFhL0RTNXdDU2ErYk5ZeVhYeXFiRE8zbG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMDVNa1RUTjVhM09qS0U3a1I1TU9iMnJpNGxMdFlOR1BRblcxZTFUamhDZTJDdkVpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJytuQWFmQ1laZzhVTjFvcFRCVC9JaHVrUnJkR1I5dE9qZ0ZPQnJocjZxL2lVMFlLZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdVd6UUVGR0xLUyt1S2UxeFJDOUkrVjJoVHFxbzR0enk3QUwxckt6VTNSQUxCZU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQW5MQitTNTNKRmdLN1FsWjYrQ0x4b0lmOVh0RHA0ZGFQbFhsT2YraWdvY2F3UDlHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NKcktSd0drZjFrY2t4U2cyZHFWQXd5M21weGExZkRTWGptbmdyS0tCM3liMFNBQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDL0JQLzlwSURIZHJldnhBTU1xdnl3aTVsQkhvaXBPTjhuSU5DTnlkMEpZbE5oVUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOUpKK3FXUUtzYUVzKzJnOHRsRE5OdTBYZFhZZkw5RlJOTERidUNoZnc1T3ljT25LJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VRTldjV1hvYkNsVEhocWs5ZU1ocFk4R1pFbHpGSXllUmwwSEI0Sm1EY2dHVzRpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEaWxDa1ZmZlV3cWdMd1d4WHYxQW1aUkZ6OVdQMTJCVHhBNjRKeVJqQ0JUNmU2ZlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVW02bHErQXpSaEY2dFFTZm0vTWtETE9BZG5XdEJEMS91Rm5lUUgzT0lYYmtPSUtNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NQd1k4bHhrajRRdnYrRFUzZ1lmQU9TTmRiTkJ0SFBRcDIybHZLTFA1bEZHWUF2ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnUGFVM2xmRHdMenRKenVlQUd5UFl6Rnl0MXVtL3BlQk00ZUlnckIyNUJ0S1F4K1EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneDhxa1VIYUc1QWpBNjlhUjc1RU1XZFE2OGkzU3NTcHlGOGl0NGp6R3FCMzVDcGxaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BCNUh5cEcvQnRBeEpsbVV6eHo1VytBc0YyQ1YxT3BYUlEveStCdnF2eXZUZVBDQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPQ3NMYlVmK1hpVHBRUWcyYThZSkRSK1ZWTGlLalhEeHkvNi9wZzR1SVlPQUhId0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSHo0MWlzSmxqZy8rZ2JJay9IYWZwT0hZcDMvbzNjLzBZUXp5SS8zT25HcmovNmZRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VXSm9COHBqV2VqZExITi9aekVMelJMYTlKUWhGZFltSUdZeXFBczY4enFXSTVTWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidad2ZrU2tMZ1JEYTVIMHNNYUFkY213MFlTMVludjZheFlzYlNaSVJXTDlRU2NNc3onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkFmQlpWTVFqVXp3NldUaVg0ak1NMXVRQ0NxYXg5cHY3S3lTd2dqd3lSMkR3N1lPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ04vNVNSdU1zUlFqeGdlQVlVK0dwZEMxSFFRK3lFYVFiQnIxcU5uTmhaT0tFZjBhQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidIbjRXQXRDdG03cUhHcC93KzRRMlk5Q243QjhGSTBJYW1NZzBpR2c2MisxT0ozd2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWkNYVVREQzd5MkFtOHJvdERJVVA5T0c2RmdMQTNXNlB5QlNRN0pnOXdLaFFXU3dEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzlMZGt1cmtPcythOFFGOFlGeDJCa0JxT25tbS94Ni8ycGUyQnpLSjFnN081RDZiZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOQk4yVUZ2Sk5PZ24wblRHSDB2Z1Y3OHAwOVJXeHZsN3F0ZG9yQUIyMjlwWTgwcUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVm9PaTgvc2I5Qjh6ME5hTklKb2lrV3lZQVdqL0JRREsycEV2SWFJNnptazAwV0FMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25MNGdReDd3T0tVL0xoekpoY2ZwbW5ZNTN0UDZ4cEZKOExDT3gzcm1Yem16aU90ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5d1J0SUk4dENQR2MyVUpqRmJ4eWJsSU5Qb2NIVkF2bGR5aTd4KzhuL0g3RzcyZjgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnNJdjkrcVVXOUxvankyNE1LMG85UFo2eXdiQ1A4RktVbUpDLzBTUHdodTJxamd5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JnL0lZa0EwK1pzSzRvNUR5QjNWZ0JkK04vbGxSdkRha2YvaGJNN0FrcGlDNG53UycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicza1JnUjM5V0dYQ2tHekNYZjNKSndldVVwbHlhRWM1bkFzTmtjUkgxQ0Z0OWxNVUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVXh4emNjS3NNK00wdGo3YVN6a2RZa2Jpa1NPWE9yajZVLzZUZFNFeXg0NnArK2d4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VvVys0T1A0SXI1d2plRVJsb1NPTHlPTnBCeHhNem9MaVdsUDdMZHlEQy9rZEc1dycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhNjZEVUhlY2JuZVVwQXI1eE9TL2ZMRjZEV0NESEpzTzBWeGpzbFpWenBFekhhejQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZFZJUEhMa29zZ29haFNPblhCWHdIekxDakhtdWd5azNqMEo4N2Q1VXlOSXBXSC91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBJT2JFRis4TVgxUHAxTmF4YlhwTU1vMXladThXd2ljTzgxWjgrMWJrekZmdmpTWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVaHFkbUR5eGVUSXd5bE9UWnpXeEc2Tmo1NllBMGk0RHZNYklYbURldFVKRCtBcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUmd0NENkV3VtY0srb0xwT2w2TVo4NGdXWkErMktlK0NiOFVUa3B6bWdaV214WU5JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pWdWNNSnZmMUZrdVdrYStjdk5ucUdzWDZEMlN3UHZZTm0rUm1rQk0xYVRTaFJhcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6QWl5bWYwZllULytSNlRRMVFFdFU5QUFmb2k1ZzBNWml6TFljT3FSWG83RkptNmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSTV1bHFjYWVUYjJVQ1RPWDR5RHg0dnhkS1ZybENnVkdhSityTXd4R3pxaEcvNytVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1hDQlJyYStjSXN2OWZrMFRLK2RCNkIzSFdjU2RCWjdNMHdRdjN3ZmZqSzMzSGl2aicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5aHZPS2pDZ2RkRHRIMkcrQTJpdHFPQTVuVVRYekw2M0ZwRXJkTldvWFRuVW9zVmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0EwTnVScWxkMmtxczRZUHRGU0s0cUV5dmZYaU1lbDBOYkU2ZU10OWt0QThacWJPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0p5bldRKzFuYmdjU1VOSmpiRU5sVW4vSzZSQ2JGMHhNa1hMb3ltbTcvUjdsdW1sZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkQjhpc2pmVnlrNktJUkhpSEVTRVRqRTQ1bGRTeE1FcE5HYkExaFZOaDJhcjVndE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2N5bTc0SUxqQ0ZSV0hPVUl4RVAzeXYvTFRydEVnSFVaQVprTEZyTnhWdGR5a3cwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BUQ1QrVTZFbnJYLzVCNnpDMUxjM3BGSWpJTzVNRHlackwwQU1zZ2EzazM1WWhydicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNUE5YOGJWN0ZOd0NDMUNxM2I2alZHYkxGS1cyWkRJSURpQUJ4Y0VwR1duV2tLTWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGcrQUFycDI5WXZNMURXS2FWeGdha1lkeGlpbk5QakVHSFNJLzVIMUl6Y1AveW4xJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NOc3ZKcHhmTkNYb2Exek0yNlV1NXUyU2RWS2FwZ3ZsdjdMVEJJRmVBRGpEVmV4VScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0UFVsbGdQY3NFazlkblZjTkRyR0dBMXR1SkxhQjUvSXlCWFI3WnY4cmMwVHdkUXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNVJVVmMxTWxOUWFzclNRZWMrSkxUTXd5QjFaRXFXYXBmQjQ4Y0gwL2svelJ0NXpSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0p1TXZaY213L1R2SStWZlVpTCtXaklycitHR05VUzFCOEVHT2Y4Q3FEWnZwUUQvTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwRkZMem9zaHljMUZxQ0R4ZkdlYXBjdUZZNTVwTFdmRm9PMGV1ZGxzcW0xeVNvSlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWHFFdHJLNXhqMTI3bU9nSjdXaXJRVnlJRVJRS25uOHV2bzN1RGUra0I1L3R3b2lyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1l3VVlMbisvbGllVS9VVkpFT2FLQU5RYmVlbnUxWGZZbWFvS1FBMkMrNFRtWDJoWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwbVpjYXROankzamtmWDBBb0NIb3BNemkvQlBKTlI3cGcxOEVpUGR1czhFN2hKVXcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneVgvRWVoWS9BdXJGY3BLNUJhb1p0alRtL0NEeEREQnN0dzk0TDc3WFpGTDZqSGVLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vlb3ExeVdqeXJhZ2lITmU5MWM2bUdDZFlpZzMyU3BNaklENHFvT0hSWmpuSUZnZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicySE1VTHZCR1JCWk9mdndPank4WDRTaUNOUFhCejZUQlNHK1VaUFQwRWpPN0FPa1EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnZOVnplcnhRZGV0SkVGaDkySlA4enV5aUVPdjVrNzlBbGxVTEJ0LzhiWHBKU2xVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VMZDA4SnBnUUo2TkFFT2hhcUgybGRPaHNtdlpRdW9UcGN5TG55Rm5xWWZPQ1EzUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNZUwxb3k0OElOQWFvMitSZUNoZEdENTUvT1FaR1JlcmljOUlTVEg3YWhsa2hxdUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMjZUZURaU3kyd1c0dWdiUGVOaENNNEc4TXk3ak0vWVljMm5NR3Bwc21ub20xZ2diJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YvUlVjNWFZdGRZQis1TzROd0t5S2paS21nYXB6MEpGQ0NkdldFQ3UzVzFEQnpLTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidZRW4wOEcrWE96d3V4Q1U2TmJKZEZYc0pqRzAxVi8zcndxVTExT1JTZWlBTkQvOE0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2tVNElCRXhzVms3Z21HcGJBcWczL21DSEIzSlBia1N5aXF1cjRZQ21obXhlNCtaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IyU1FUK3l3MXJkMk8vT3NRbCtmbE1LbC9UQUdLbEZzSVI0THU0N2dudThMSi9qNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoTHFHQ2lRTmVQQjlNUDZNa1lyNERRdTVyWFNZNWFLK3dZMEM3c3hqWlRyTk51Yi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna0JsNHdONndQTTMwL3RtS2h4M1Y3V2kvbzdzZHRkMXZqd3VOVzh3UlRnZENnci9pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ08vUHd6bkZCeTBhamNUcHNBbllkc3ArRUlwSXJWMkloYTl4SW1qVnI2RmsxSWxtNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4WHF4RDQ5bUtuSjlXaXg1SWlKeTVyTXFtR3kzc2tST2o2eGtkbm9zb05wdnVJSUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEJQeTl3RkhRTXJWVmc5enJZY3g1dTlYTmV6NUVKZjlndUVrR0g2N1RmOUNZcE1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BiQ3FIdkxvTndRRk5nd0FEbmQ5ZnlyQWE1NU9UOU4xbEwwS3lTTnBHeWthN3gyUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic4eFQ3SW9NWTdibW8rM0d4S09wMkNyOWVuM3luWktSZ0JXcWZ0cXFlQ1I1YTBDREonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWVI4aklRVldGbGhtLzdSSVk1OGdjdzcyZTBRZ2VZSWZpNDJWQWNONUVCdDRDMDBXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N3dTJBQWlNZjJZTkJyRWdiVHk0SitOdFo2VEpLakFoVGtUWkNiSTN5TFRicVhSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0QmhWSFpMMjFZcE03MXB4M3BySDROOXE2a0d5M29xeHZBUUowTHVrZnZrcTFRTHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSEduUUdxQ3hlREQ2bHovV3NnTGMvaFE1YUQvK1RFdFNmUHlGbHNUeTc2RVNzdkxrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMranR6a29sNUhRenZXWWplYWhFSWg5bzNING91YWRBR05SWFB6WFlBdC9jRm1BeCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCR2pZYkI2dkNwblJDVU44VVNDZXdQeHNOajBDeTF0eFQ3d0FVMG9hOElCYUNDaDYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ1Q4WnQ0WWQxYlZxYWtxbGFWbHE5TldEYnlLVWZ3SndPWmNucno2OFBYOUhWQjE2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09weStDK2RSdTYwSis2R0daQUVmRWtUSnZWR1lrVnFWVUZHS1oxQXlvN3hVeVYwNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyek91YVdVL1dlb2l5cVpRVUFiSFlreElJcVM5L2drTFBDTThjUVZLdXBZTUxVS3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaG1URnNMaENON2c4dnZQUWZIY1YzSWdJTDg3d1MyUnpacDZlbWFjMEFFQ1MyR01MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2c4bi9XZWJaNGxCci9kN29QQXN5SktxNmliRzU1TUQvZHhUUWtLUTUyRlNwQTVRbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKTHFxMERZMUFGdnVZM3ZGbmdMWS9nQ09EZEF5VXVTVGRnY3UySWwxUk5xZFZudzInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInM3BJdkVXU0YwZUh0RU1oaGxjYmpWczBFZDFOUnpCVXRjTmZweEI3SHA1VzVtZ0QwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hsa0lZTStQS0RrTldaZVBHOHFwZmE3Q0ZSbWpnaUFpRDd5NnRpS2taYWpiQ0pMRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidZelE4RXIvS0tTa0Z2OG9GL2Z3bTV3UktDNTFBZnNFR2JKWDR0RTczeXdvQUVjam4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVVEeTFwQVlOUlJLaHpXWHVQNDJlU1JEc2lZY0hDeU5DOElLanlsbGpMcFJ4elpwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29kNlRjcC9SWG1MbFBpcVUrMUdoM0U4QzFoOExEdWdhU0o0elk2TzlCTWJXZEdhNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidENU05a3BCSXhuaUN1djJHYTVsc3FqdStoQm80SW9kQ1h2ZlRsOEdJd1FYVWJtbUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVndhNmdCWFlwUXlNTktXZWx0dzJLcXFyelcrOVA2dTZXQmd1OWptSDhMYlJoYmFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NqVW51Zm5FaWtCRE1RSDEwTGVGcURxUUY3Nm5PNDZDMmllVE9GS0Nvbi9NakZOTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCaGxWTmZscWpMNVl1ZkllMFdCTW1qRUlNREUvY1kwZ2trSW5xVlhmWFFCVFF6QWgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWmRHVVhHK1pQNVlBWFA2Sy9uMnJHajAyYkk2TVFHejlUS0lNU0ZOREdyTStTV0l4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1EzWVc1bXpDRVM0RTY5S0RuSDRmVHFOaXArK2JhZllsVzlORkxPTk9abWhIc3RxOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiODRXRkJIU3U5N0tjTnp3QTZaUHhJYVJpMkV3RjFZcjRTZ0huMjBpVU5JblYrbTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT3p3MzBUQ256QXdsaGE4dFRhQUd0SGVyc21McllMZ1hBRzVmV1NoTnlYdmh4SE9LJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09SUTBjS09LVWJEYlBvUTRJZzVIUnNSV1JCNzh4cDd1ZHFHOXg3d09yaDlUcklNcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJL0VycndwWkFCdHo4RUhROEIrWnIwcVM1KzV1M2FJRjJ4ZC9KZzBwZ3BYdDZLalcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVTdwTEhGekxQclNyY2NvajNMTWlnS01USDB6RFRBSHB0eWNxWFU1bmU3d1B1YTMwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZDUU5RbDZuNFgyNjFQVStxVjNjSlVLd01JcFRZK05rV0xDdDBEQXk0bE9HL1lGVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxVDJtdzRRWW5Lb3hPSVpyWTJLL0JDQWdXeTJqbTZGSnBqeTVRSXBub2VKN1V3WnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlZIRFdGaCtnYVFndVA4SFlWMG9yU0wyR1BaaUZiNEFuK1hDV1lCVWdkallIK0xLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UzSFFmL1RNK0VmNFljOGxtTkVJazV4WE8vQ2RTTnpCQWNSWGFyNUNkaDZUb2lMaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOK0V5azl4c0JIMm9jS2pVQ2MrNmJKd0JCWTlUeEFtQWhWdlViS1ZaeTZRdVNGenUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNEU3eTZvYkpTTEJhMCtxMm5BNFBxa29Ed1JFQUxaSEZGblF0RndMam5ZY1pVR2d4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1hKcXNhYmpnaDg3YVRHRHNrY3VWWjNOSVNydFBsU2J4WFRUbU12TEZaMFBIOGRmQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOZThWWXl2cnZlRUNVOUcwWmtwTWMzZ1BYQmF2a3JLYUJocmk5aDAyOVpKMG5tVncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGx4aitFdmtPZG5IOGRTcHJQdkxSdGowZmJVc2hHMTRJVEUzT1hhRXRYZjZ4Z3hhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Q0LzdReGlEaURCQmZEMGZaTDNaT0wzRm5WTUhQT1dlb1ZFVmEvbU85RUNlcG1kRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJUzlQclUvcmNtV0x1UzFDRVhqRlJML1grdzU2S2dqSWFYVmFoT1d4VW9la3VSWmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JQQlNwb0szYUpDcld0M1ZkZW9PMWQ1c1hCdUxZTHF0dER1WmhRcjJhdVp6dDhWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dxN3haa2RvekFUWnJmMWUzZlJ0cEMzQlM4bHQxUm9TWklLdXQyVm0zQ1dQVnRFeCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNL25Ya2t4cXNWdDlwUEdWa3hvSHZSUUZLNGNZNmw1QzMremNpcDVVZXcyeE05R3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWTJjVElBY3VyN0hsQ29tK1MvRzAxclZ2bjFlVHFhMmxuVXo5b016bm1PY25SWDlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJys1K1MvVW1ZQ0hScEF5RmFKR2tjTWlCZWlBa0xyRGdnZHp1K0RNN0tkckMrVytjRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoSXlOeDFpNFpMaGk1eFJKSkpJalY3L0pYNjhKN0ViaXF3TE1KYmxFWC9IbnJPMWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVXZMT2FIeWN2alhwakRNbjBDZDFtSEQ2a3FUSWU3Tkw5Z3IyK3Z6VmVTT1I2OUI2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tIM2pWWGJ0UkVMWW5Odk42WjlEbERCa3E0SGdFU1RZcEFBQ0dXVElpSmhYUm1JaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4SjR0QkFKcjdsYUNwRWp1a3lCMUJMdzB6aEVGMkFVZFQ5RWNmVlhYcEk1cFVJVmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQk1XQmZ3VHNBQkJ1RVg0TVdiWXNqLzlNUkdUT0JnMktzcU4wNE42UzBka2Q0TWUrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzFFM0JuV3k2QjV5enp3cFY3cE5BSDZVWTZhNlZSUm4zQUhsQlJNMEhRMkJuVW9JZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyc0xZYzB4R1JNaElZK3MzUGw3UzB6WForc0hOSzhBNmlJR2ZNcmtFSkxON2tZQ1UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2FZWldTZ1Mrc205QW1JU29PK21aQ2pyK1ZFRDU4YWVBUUtlb1MrV2dNMG9ESnEvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1pWMEJSd0VnVVVJYVJPSldJVEdpZ2ZXcjdRb2x3Z1N5QzMwRXRuUkFNTkNhRDMrdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSOEpXT3l5WW1Fbkppd2tiRlRiNGlMZzN0VVRRQWpoU09KV0lBc3VoYldTSFUyNE4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc0F1OGNhc0V1YzZNeDR6ZUszamdJVm5ZdUtWUy9uRkRJMHNibTgzM3p5WUZrM1o5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0hmU2tibktJWmFrQUFGZkpzd1o0ek9Tb01IVWJiMitsRUU0S2hUQXNiT0FVRmczYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4Y2hHZGhSdU5ReDJFbGRibVNGWHVjdXhVUXlVNHN3NHNJVEMzQUF3aTFzc2Q1ZGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnE4WjlZUk5kd0JlWEtuQ2FreEswd0tyRFdxZ2lDTFZLbjBFSy9OeW1kK1RqMUNNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BCTzc3UmxmdVNCZ2xWbFNrNlBDTlZlb1FMc2kvVWFRNUNFZzl2alFUY21sc2ZJQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGQTFHVmlnY2c4eFNDZFBIcldBT3JKODNPb3NKUEZFVUZBUmE3RUVCNExNbndacFAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQzdnRjV5ZmdwQWdxTGlSRlpLZ2NHNS9pWFRpZG9POU9aeVdjVDJSb0JoYlQxc1FzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZRVTF0dHNUOGJGeGdtWmRaeE9xZTBwNlpoYU1hekZtWFd5UzdKa0FpWDRVc1h0SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKd1lBVlo5QmJob3phUU1FM0lnVFlVQlVWRTV6QXdGVTV4NTFNS3E1UXdWTlJ3K2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN2grQ25RVzlRVm9kaVV5TEk1SExRRU01czRwaEZIekVraXpwWTExZ0FBb0JFOUVSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hYS3hvMmFRQlVTVnkyMXBVZG9MSVNqUVNwQ2J0VXZhZ0hSR0VidU9BcloxcDhaVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic3QTRGaHRGZDJ2VS8vTjd2eE0rUUkybmpWakNPMEFkQmtoUkVHYy9aWlVhc0JLdCsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQnQ1QVVjMDlPUk5qNG1IZGhBRUhuU3JaNDhBUFZtSUhJcjRUQ3hjQXNmdE9UT20zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ014TXhLd3lOUTFNMXdLS0dlK25LNzhtRGcxcjNuZ1lURVJibkF4RlV6T1l6TGE1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bmRLc3RnbmNiK2poRGJpdnVWeVlJbE5RRzRlS1k1bVd6TmhRRTdKZE5nN0NwYisnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOGloWVhHR2dKaDZ6NEd4bWhLdUtBZElXQUdISkc5c0MybVA2SW8vSkx3VEUzMWhiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBak9RQlJkUnpHaCtJRXFIYXVpVmtZSFYxbDkvYnFjTC94N1dXNGIvMGJtczNpaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvWFVSU1hjbnJTVUQrRVduNzFNekdSYXpGTGtUMW9OamlubzhsZEhkS0lyRzBkamsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbS9KV0J5d2VoaGlGcndlRytBNTZSdmFRNGVwb0prNk5GcWlDZzM1Vi9wekxhNFJHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Fja0V1QlpGRitZRWNzclZyajZibXNCdWpqeVhFeG5LdkFqcHNVdytMcGg4QWdEQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3VGdVcmxNYkhmWWo1M2s4SExwVHpRUDRzeUIvbzluRHJsZW8rR0RXTEFxTWJRQk0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT3ZKU3ZBMENsUE9nY0ZmTGU1TThJK2NHSU9rcHhWREx0VW1CZTl3RmRqa0puOTRHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q3V1RDQnlMdVdDdllvaGFrSDNjODl5a1NRN0tVZkNsREVuNVM5eGgzMDJISTMrQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYYzZVZVVjMGhjMU9idlJpRWhzTW4zYmlDQlcvTVBRVlRoUTdqODhubWhVTXdmVGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInczJVckp3NTJMdTdBRzdEL3lCV0dZY2dEZ1JydmFiY1Bpck9aWkExdnQrL2I3WU5MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0pZamJaM1NnQS9CN1NENjBrYStIc2Y5QzFNOHhuZThMSXlkSXdrMFBoYWhqTzBhaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhTjBFWHBNVnU4NlBlUHh1eFlPSjA1TnRZR1dZVzd2Tnh6aDZWU0JCWHg1RU50ekEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSGJqcTZHN1k3U3EvMDFHRHVqaHlDd3lGYVFXV3hrelFlaXFTWXFNak5WUTBUd2RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wUU5iVDVFMlJHZFRLUHNjRDZNaDZnKzdJckpkL2xtazd2K3hGZCs4V1YrTlBMWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3L2hOMElGcGNFNHpHRDQ2RkZDaEpnMzFTSnVwWi9ZYW9QZU44NndWajV5RFczY20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN25jVEVKamZPSU5XU1NoZ3VDNHQ3bVl6YjdkRFh1TEJ0TjN1SGFsdWQrQmlsbGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1F2UFQ0OEFxS3gwZVZLY3pZQWxVU0I3RCtTY05XZm10MXBXL21JQ1VueitqZXFOYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZU5hTGFwREVSNGoxNzlUUW95T0FqVkVtNUFoaDNWRCtSbmI2aXlSWStOZ0o5VVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMWZlbGJua0FiaFJaK2JiWlJBMC9TUDEwWVhYWThsR0FGZFlRdExFT1kvMDZ6U3BwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzhhUlF1V1RqTk9tT2tyYlV0YnlrUE1US0NWa1QweWNPVGJ5bEJlajJqMERrTHdoVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQN0kvM3cyc05TQWJzRGtYRmUzWlhIRW9yanIvczN2MC9Ob1YvM1BjY1llSGFPcUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInakFIWlZmOGF6QzI3K3Y1YU9oM2FKUlQ1MXVYRVVQTTJiblVFSFNmc2lFN0dpRWZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ViN3p2S2lSRGIvaEFSbU5zT2krYytTWVhZME5zR1ptVFZoOGprVTFpejhxd1p2bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczY0lnY0xQSmVETWlmVWJJTy9Gb3g5SnREUEtXQU45V0d0bTRSODR1Q3locmF0Z0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInait4NEwwUlNHdVBIeklQT3hMU2dvb1l3Qkw5K1J6N2ZHNVp0NUFWZXM3VjkvRFVrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JBVFJaakNFLzRWQ0NveFFQRE1lQVVydXN6c1BiLzI3YlNsQnY1RUVCVy8yajVFNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoa2F5OTUwZ3FUc1A3b2ZGN0dHSHlzS040TCtYQnRUN2J5SDNYaGhQZGszbTFjeEQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVUVHTnZDTUZtNjNFeThKS3ZDeTBHMTFvdXBBZ3V2RFVWMlpoVmxkcS9nMlNnY1o3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3pvR3J4bFM4Q0ZZY3JrcnVjd2k1eENQL09VUmMvUkRZVGJrcTJqWXdPSUMrQ1g0eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidod2hCQzV2TlYrR000NVVqUTF2QlJhT1hMT2ptOU5zbkFYUFFrNmRBL2xkVE9iOTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSlY0NlI0N015dFFRS0NsVTRsN3lXVlYvYXR6NDh5MUlTNkdXSWdPcG8waHRKNC9HJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2duQytOcTVTWFl2b2tNVEhJd0o4UUUyL3l0L3RYajBobTlLOEZuZDNLN0ViWENxZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOa3VQcUpTdzJsdkIzYVRnMXBrWGo5bHNhaU1QeWdNMnFPQ3lTZWszdWQ2eFdCclknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDZOZ0xCc1JlUXV5SThSRDhVR3Nodnd0ZjBHVE5nL0lvT1g2NzIwSGxucFhDUmw3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA5UXc3SVphVUZMaVRJbC9IWmtvM0JiVFIrRDhxMlBYcGVPMDJQb1U4bnI3SWErMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyL21YdzlkYUJFWHc3dk9qZkRWdDNjMFRoWmRuV2kvOHc4UDFldTJ0ZjRCV096MzgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndnRmckhhS0cwMXJGMGZwbGVoYzR2VmF2OVNQOTU3U01HZCtocERYZmM3cU1YS1hvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdTU1A4SkZGcUdldE1YVlBXTUo2SDVKZHdKbjNmL0orYXZXOC8vN2grKzZQM2c4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvUDlmcmY2UEtNTS9QM2VMMUU4dDgvREhzdmhueXRFclhmUDdZN2Q4OHMzaGNSNCsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLzlkVGdjZGd3cFlTc3pMNldBVmp6N0lWRHR6bEhMRWJWdnJvc2dyd0lhQ0UzTU5NJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F6ODMreWpqQ081Mld4OWx3OXhjYm9CSHZMT21YbkdBSVFBd2tQTXFDNzJaNG53NScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic3SUVJY0U2cHJFNTU1WUV4VUFiemlsSUpzaFh1cldmL3BqU2MzSlhSbk1Sd2lxTmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVDRZRW1ZQ2d2MkU1ZnlrUmUwVU1wZ1JZVG9zRGtiU2o5dHhra1hnM1lVYTNWM3doJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Q2TjFpZlI3dldlcTQzem5tTkhWRDZueHNRUU95TWtweXNiYWNjSFhkSjJ2aVdVdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiOTFmSy9UU1JQdUF2UmszQ1RVSUR1ZVlvMjRRYzdPbTl5c25rS3dMVmI3UUFxaFEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEZZbE80akpxTU5SZTN3NGcxd3NXYkNnazA3a1hwcUkxdzJiQkh1MjhQUUE0dDVFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZWQlV4UENnUnpLTFhzalpub1A5UjEzaUJqNnBwc0VHNzVPblo3TkpoM1BpblA1VScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOQTAzbUZyMjZLd29CUDVnUWJTeU1zRXlKQUt1RmtPSFQvdjVkdGpYT3pZVE1wL3EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWmpTM2NnY2gyY2pJUzlMNVZscERYNUZkcUZydXAxWHVHZm9UbXlHZHF6ZmtYbXEzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1IrU200ek1kYkpZd3h6dVNLS1F6SUEzNUdkUnFWVEVrMG9SU2xLMnkvTFN0MmxBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3MUxTcFc0Mm1BWmxyTWx1YXl0cVlGV3kvTm9JRmtQTXNtL2NsT3dsZUNNL0tMSVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaElVQ2djSTM0UFBVQnMzM2I2U0RzUWhsOFlBbG14cWVYd3RiQ0swZFNUSjFUKzFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QzbDFuaTFuN1hkVlYzd2JzWXUwRzdFVEs2Sk42UWFSY3ZIMnVlYk5ycVBMVnJ3eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFcDVDR00yS0doZS91VXdtejBaMFNWRnh3OGJPZlVkOGw0WDFtenMzR0NaRnZ5czYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQlRiOGx6RTBIWTZvNXkyVmRxR0tScUZ1TGJORWdKZHp5MkMxN3I5OHh4eVlTTmdIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BqVHltODRwUEIwRDRvME05WWhNL0tIa2hiR1JrWm9KbWM0V25BdkFKQWFwMVRSeicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFUVU5eXN0SG9ITlV4QXlSRFVFYjlrWnhIbUJ2aEptc0JVSFZ6TVRrS21DdGZHVlonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZjJFemlFemUyQk5teURRc0ptQXpZNjgweUxCOTE5b0k1a0YvVU52ZVZ0U1VjZHBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q4WENoRzFGQnpIakt0YVBSVnlhcTJ0V1ovSVpCSHhWd0xQNDJSMVpOcUZHMFdVaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUlpXbFpGRE5PeG9CcmtLOVIzUWVXZnBTdWp2RVdRSWxJTUJPa2h4aWVTNjNXelcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInM0dJM2NnLzczay95djNwc3FzZ2dBdmlBNnczbWZ5MGpEak1ucDFzaU1rVTg3UVArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25aUit0Z2F2U3NpTUZVSUpaZWIzKzY3OXRuN3B3b3BQQ1VPNUZicXJ5RXlMRDdPZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKZ3JKVS84YUwwTFpoTExzOTd0OHo4TWlYWXQrVjhzZlhUb3krMncrV0lnVW1nMEInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU29xcE5weDgvaXp3ZnBZZm9hWWM5WHZ0OWowQTRzeEVKZnpjNDZQazRZNXBuTERhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BOMmU3TEVDWitiUndhVGhZYlJXUHZmdllwdmVRQWVqMHh4TXhGbU5ldThLVmVtKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTjFsRlBTY2hUV25ZZ1RaUENyb21HNFlJSHRZSXNkeXhWYXhxRHpvTml1c1lvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRm80STBaNXduaHZEbEk3WWdzVTBmb09FMlRSeTNReUd1cXNGMEZsVjRaYmVvdWh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0c0L1BhNFd5UGY2UHk4ci9jUkxjTjdiUktmTE5uWE1PWVZydGtLK2xzakhpd0VjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4bVJpQ3NIVnM0aUZlRTNIZjljTWkwcElMSS9abDNGaGRqcllmNWpoOCtqcnlGTXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVGF2a0VFNEswSnhEaFpBdEpGWWs2RWhtMFJQeUVoeG9PcDV1MERDYVc1ZSttT0ZyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E3MTlzUXIwOE02M251bzhtTmVNQzlpZzdKVmVRRTU4MC9LRi9LcGR6aHhyK1lVeicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic5NVVqNTZaS2ZtUDkydDJ4K3BUREk0QTI0Ty84VE54aHpoTDdaMWZPb0h0aFhLUzYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS05zWUlVclFaVDRVOXhWVEVwTU9XV1VPeFhtN0hSVzIvWi9JNElRT0E5TWZuZkh4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzUrQ2NJa2ZPK2RTZEZNdk5odncrMURVd3lvTmU4YldwdWFEdU5kdXpQb3BqSURLaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidubk9LOTVPMXFNVjJHYzlpOVdGR0p5WFNaSXpGb0Z1cUdFcVJZNUhsUHpFd0VCUkYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndVBDcFVMOURUSzNmdzl4K1pBdVorMXhja0JFNjgxUDdYYmR1KzJyR3g1bFpvdDNQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MvUkRPVXRUdWtNUG5JZ1FTOE1nVTRUdkNiZGp1T3RuWnEzUHdFWW5CQmZlVTBULycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidadk16YzhSaC83RG5wd1Z6THZ5RG9xcDlGdDZSeVNCbjg4dFc2RjBqWjJTTnlTQzEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInODBKbzAvU1RMNGdWQjZ4SEVaL01pMWE0UmxzOWFrMlJUT1NETWVZc1ZaRjZlYzhVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Zzc2FkemhjRjBhV21Fd1JYcTdDaGV0SDF1V0hwMUFrTDhVcGNWVDNxRGZNaHRCLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWZyK0VnOVI2cmoyTnBuUkFLZ21zeTh3elo5VXdVS3M4OWw2MExDeE1hSGRzdksnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUHkrVG5OcDlZRkswQ1FqZEgvUjNibjQ2d0VDU2R2djFybkw3emNRWmE0NWFuQVNOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2s2UEhqUmpadDV6cnZoWHZ4YzdkT21kMSt5a3RRaGYvVXEzbTFXWlY5RXJBUm1HaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvcnBGc2ZZeGNjR253anh6d21uOGdZODA1M3lkblh2bDhMbnVUaWIwMFBtTWFmclUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaUNhcTNYQlp1OW54b0xoUmhadmlLMDNBaEdxM050WWVWRzI5WXBOQThMVGxjaUh1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FQTEJlUTBYdXFNRnFPVythUG11ekJUSStNTk9CRGMvbyszREl0NlJyMW1XQVpKZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5Ni9tN2hpK0l2VVZvTzJ4WlE3N3dpVXBPdkszNlA0bURiUHgwL0dSSEJxNVZ3bTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ293c1gvYUF5cDdveUVxVUpLVW9pZW5vSG45Mm9GaS9kNlpKZWhQeTZSazFORXpjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QrVklaUElYVFRhcFpxREdoTXYzUm1Ha2c1UzRZaTErbFRRUTFiaUpqTFVTY0d4SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTejVaU01jQ2N2RlNVWGd0dGc1dklzVmxieFFycEZSSUJxb25GNVdrQmRtZHh1WW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWRySnFnWXJ4dVdpTkhValpTSlV2OTJmMG4wdjViTzRPamxJS0RrMjRjOHBPVUR4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ001bGdPYlJaaDFFQm15ZUJrOVBkcVVySG9UMkdsTmgyc1VKMGJQWDM2NTFJZTFvUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbzZYNmtrVmh1NlV3cjlXWC9sRDd6K2ladnBKVjllOXBodjVPUFZKRzNlUU1wcE4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWENUQi94a1JwRlVROUNKV1VJc2s2MG1FRVJybk9CZ2FFR2YrS3B4OEVkTEZGV1NRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ljdmppeGtkWUpUYzltYkQ5L1JaeXlUSFBFc3hHUzU4c1JRaHFTMGhMZEhZZGNVTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSWWs4eVBmZDVWU0VwVnQzNERNaFVqSXBVUVJjS1U4NmZiZGJuRlU3b0p1ZXZPSUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTHR0bXlHeEYzVi94aFhodUdXMURQZG81TTJEdlNnSFRHb0JCVWt0bTJrOW8vNUc5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BoN2pmU0ZtVXZHWmZ6ekEyQjNnRlUzelh4WHhLVmNxL1VTbDc4MWovdjJrbXh1aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGcmhCVjMxbEFYMTk4S2xjZU9xQll6NU1qakpXNHJGeElTZXV2cjltalJJUWprLzcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLzJFdTNVSHFLL1VPNkh4Um4ydzZuVmFFYWJmYks0SFZKMC81MzRIMWlvN3h4WVNkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25IUXFvYUZ4SHZPSjFsazB1dlhIMkZEdnE2Tm9aVU1KdHRUWWpISWxaNng4WXA4dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6TGFhRnJ0b1h1eXIreXJvKzZadXhGODNqZmgzd2JvOGxZQnBXM3VGSXdNN2xBUXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjRKNUhPOTNHOXpVTDZpNGJHekxFMnRTK2lCdWg2bFkxVzU4NWVOYUt6cVFkU3d1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzZjd1dHNmVsM2hlWnhtRWNFVEd1em80QVA2K3Y5NlZkREhUK0E1MjRBZ2g4d1RwdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0NCtrb0tzQ1J1Q0RwSmlsN25BWmREclFXWDFUL0xJcUZ0MnVBa0xFSStkTk9vL00nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGFETG9PYzdKMnJNT1F4b0djUjBDOEhsMWZMYUhhUW9HQ3ZzSndQcmljS3ByMHRDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tYcEhCWHhSQ2ExeGJkN0tlZDFzeHBYYllRZUZGcEVzVndTSmFOT2k4THFPWnFwbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2QzhpTTVwb3pFbVhMVFBpa3lBRG5la2wzWGNoNlhyVC8vQWRHMHIra3c0ajhTV2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNG95Q2R1cjEzbkk5aGwrbUt0MmtDTXhWdTNxbXNpRS84Tm5HbFl4MU5NLzl5NjI1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hkdnVDVnU0YzFDc1JidUR2Q09MdWlkVW1YQUZzbzFYM3lFY2V3czRwOFN0MUhYbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqU1pFWXF4ckVBL2ZpbmVUZ2lwaU5GTjR0VEtrMmF1VlV0czJRR0laUU5zZXJzdkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb0U3ZnAvczJEbFB5RUs2Q1crYmJ5OFJoMDJGSjhEZldWdGZnOUhUNGNHcmRTQytFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F3eXBmMHE2ODRHUFhKYVdWWEFsdmdYSkZnREtDdGNjSEhaV1VhYmpVWml3WGFzOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUmdGdlVGMHRCeEVSZmpYS0VDdmt0Z3g0Y29ydWlzTEJkYmRBckJGSS9hNXg1RWsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWHVjWHo3WlEvQ0ZPNzgwK2g2ci8vemdzNDhWanRwMGYzSkZsb24rVURqTnU5Wk52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dldW53VnhNYWw2dlV4bGg1UFcxS3hCYXU4MDFhOWRTbkhQZHQySzA1eVRwVzlRMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjMmN6dnlrWlZqZkptREp6bFV3dUkzdDd6TVRRczd3MHdoVTA2WStrR2JrL29RTysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna1I5QnFHTFA3SkJ4NllSN1JNWmZSRkxjVGJLdE9QYUpQWUQxcGZDSGZDTno0YjBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05TR1FMdjkrUWZQbW56VFE5UXQ5bGczMkdWVTdlaENYVi9Mc3ZYS1F6VVpFZ1VBaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFL3FpclU1K2dDTE4vbk4yY0F0bG9KZ3dNVSt1T0ZNa2RyVDRyTXdwT1lQQVF3cW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNXZrakQ2aUovLzJGM0FHMkszWEdObUkvNVA2K05ZOHdMbXR2VGNpelQzNERzcDhPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3FDOUFtN3NtNjR4Z2ExYkVFOGMrTzNIS2p0WHZqS0NMblNzSlp3Smk2ZmF1blpOSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPNXRyNTU2M21OMmdSYmgxRFdMeUt0Nkl6MXF5ZkNFakFMMUFYTjdkdVZJQmlwaTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUpIbDk2RmFZVCtpYXlQSTFMQmxkbXI0WUZTUzA0Z1BzejA2UkVzeWhRL2YvekdMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29xUnV2eHNWWWZ2R1hsY2N0Sy9kQmFnZjIzcDJyRG1hM0Y2MFRJa09QME5ocDN1SicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsRG1wT1BIVzlNVzZrWVhzS1dueDRES0pvZ1dWZk1TNlBxZnorRWR4TnlSbk9jMmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTm9vL09mRENJQ1paREhRUDZKQkVZUjd4VU5ydGc2aUtvZmtGYzhxeFlMdVJta1hNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JUNnkyYkR1L3lUSXNoMkRoaXRHdTRaR2h4OFI3djdLbC9ISjAvako2eDJzaTRSMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2RTR6a1A1ZXd2ZGlIelRQU2dNcWxkaCtyZWtDaEwrVStPK2VwT01sRk1XNGMva0onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblp6UE5GLzRQUlNuZkZNRkdWT01zZHYxQVp1NG9ERGpOYTlINGJzV3FZV1lYU0JRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BjZ3hseWJnVjMvakIxbVNCMUljYUs5dzJkYnN6ZVlvZjZwdHFESmRXazJyZ0lFSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6di81WC8vYkFWeDlUYTZUc0hDZGZMSzV2bkdrR01XTXgycjlLRlpSRFBmZEpmUWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMzdwQzMvRzlqTlFlR2l5V0JGdjdMeDA4R0ZGbHIyaWpldzNvcnloTVNTRElmQkZGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1kvL0hIblJqSTduOXZxeGQ2VVRYd1Zxdk5hblBGV2R2NUVwakFVb0xONlQvVS9TRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyUHNhelN1Vmw1RHlEWjh0RlJnWGd1K01samZ4cUhzVGZZdWhlZlc4NzMrU3JiNXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOVR6NmRSMUpOZzYrcWJhOGRNUkpOTjI0VjRRaDBzUG1KVnkrRThxV1JXRXRXZzB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VKVEVhckhVc21XQUE3SVR1bURUa1FsZlZkU1RGdVA0aHVuNG9UYVQ0NE1WVmpkYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjTXBmUGI3Y1l1ZnFDNXJkdVpaV3IvWHBsa0NUQkh3Z0FPV2JxQnFId2hqaWRKbTMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN0lweGN3NkZNeFFsSmxiQitTVnQ2YlRGbWVJSnh6ZllCNVF1eWcyb0tKNXdya1dYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1R4dlFZWXNwWTBySkUrcGM4bTJCaFlmZXNZNVJoeW04Vmx4Y1hvRlZzeW43dVpMaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6T3lpUWY1dGhmYjcxSkVablcrczd1THluZS95VmpxaFRteGw0K29qTEFHVGFzOWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV1hwcGMyVllndldqYjJzUlVTOTFrd3NWTHRtNnA1WWs0bjVCYTcycWUwOUFmQklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ294d2ZZVVJieC9tT2I5bDVrbFZZQmtoWTROZHJ1alJJN3Q3WGFzNTUxRC9LbmhoOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOUVZGeC9xK1JSZE84Q1IwbkhuT09iTmRDT25URlYvV01RVlZwK0p0YnpUZEdsWUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMG9ab1lwOVMyRlJZeVVablhVdzYySlg2U1hBaHZtQWk2OTF5bXpjekpJTDAvTHh5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hqMDlFVXUzdkhlcWFpOGlwM1Z6L28xTEtPQUFYTHBVTitaRGgyeSsyVHQ1Um5HZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxSDJyeXQ0RU9Lbjd0dmhLM01mV25DSVNtQW1MRktObGFWT3ZZckZMUGQ3Y09XVUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV01HaE4zb21SRE03Q3FCNjRsK2tPYkRFTFVNemJTSXk2MGlSbW9QK1VmQlJ4TjJNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzlZQWdIVVlleU5nc3hUQ3ZQQVBrUEtmN0FrUlNJMGtRUVdxSklTcUpZVkx6SmNVOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBYU9BWHB4NGRDQ0JUZTRjLzJESkpkNXVHMy9BcXJhczVsVEJMTTdORmRDUTRuaVgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RWdGxYVGxFQmN4N0Fqb2NpeWJONmlXTGlMaXZDcHJhb3BhdEJjakxGUjFld25kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tERGd2MEZBeDd2akhMd1pjaVFlMDlGdkNpTi80RXRsL0crQ1d5SExNb1dDSy83NycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJcks2Y01ZbksrT2ZwbmdMOFVjM3M1Zy9BNUhUUFkxMDJ4ajl2U1dpdjE4dno5K1onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndnpBaDZLVUp5ZG55VHlpaEo1aHg1NjNwUkl2cVlvZmJzZGg3d3N3dDJvTC9vb3UyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z3NkJ0UDN5TDJpVkllem1HcEZnSDhYeTN4RExnbW9XQ1NVMVo3bG9obTVwWWc5bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYLzRiVXQ1NWthQUQ0L3VXMWJNT0hKZVZZRjJ1UWh5a0pwSFJmZk1tUldaV2ZtYjgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3krMS8wYTd4ZElvVzB2TE5VVjZZbHdmdFgwbUg2b0liTjgwdFhVZlhheWxtRlpqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Q1UXRVdjZETnE3SE1ONyszWlBsZ2pXWE5RQkxjN3Z6R0tpU3ZYQmxhL3ZFaXRKTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpaWN0MTEzUzViZDA1WHlNcGFFcjJJdGgvMUIveCtHNWNVelJscFE0S0pMN25JbDEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJVYXJzblI1VjZsOHJmemlGZXQwQk9OKzZWYVFacmJIOWkzeWhQdGtRcnJXVjJFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8raEkvYnJYeHJPcXQ5UDB5YjdHRFVDZjhwYTJiNlZxaDhicTc1VVh1Zk5meUNsZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtVXllL0pKOVl6S3BmNE5tOXpFRHRUUktCeFRMTjEydVc5N3pmcVdlL0t0d1plUGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVB3M0l5ak9TMU8xNWlqTXRTVi9NMlgyUlZPdlBwdzRmL0l0RTViR3dRejhDYjVFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NNNHNHM05sVHZTVzdWcVlYbFduSFY4RUcycldGT2xNdEEzWkx1ZE14alZXVUo3SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNdmNPRHYvREZNVkl3cEszb1RyN0xTdFkrWThTa3M2enRnUzRzOVZzYmRwc2hUV0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOEFPSkNtdVlDTjNHemFUbzdiR29ieE1LK2FNTjkrOXk1WDdWMlBoWEQ3Y1JrSmk5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ210bmhhMzJlbUMyMWZYeUx2Rm1vVXRWbjhjMDI2cTAwRFJ2cjQ5KzJHOWRpSnMwQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNVkZ2d2Q2dS9yY05OTFZsSSs3UndqWDlXYTdxMkdyNTUvaU1EUFF1UDd6NGNISVonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWkZKdlpmRW5CY3MvdnhIZExkSk01KzMyUGsveVBCMHZrMmhvZmp4Yk5RQXo4UGY4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lRL3pkcnR0ZnIxd1BoNmFKQVZjQ1JYcys0RHhvbjdBNklaVjBnZXJCekNmdUo3NScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLNW4wd2NFL0RnLy9SeXRQbDlrb09zT3VCWjc0ZUhFYTJEdXE1N0h5dnZJdDF2LzQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndndOVGY4bHJkQUFBJywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS5taW4uanMuZ3onLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDAsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzM6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ2Z1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpJwogICAgICAgICAgICAgICAgICAgICAgICBiJzsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9QJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1BybycKICAgICAgICAgICAgICAgICAgICAgICAgYidwcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsgd3JpdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlOiBmYWxzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qIVxuICogU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5qc1xuICogVmVyc2lvbiAgOiA0LjEuNFxuICogTGljZW5zZSAgOiBNSVRcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb3B5cmlnaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhXG4gKi9cbnZhciBNRURJQV9QUicKICAgICAgICAgICAgICAgICAgICAgICAgYidFRkVSU19SRURVQ0VEX01PVElPTiA9ICIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VjZSkiO1xudmFyIENSRUFURUQgPSAxO1xudmFyIE1PVU5URUQgPSAyO1xudmFyIElETCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFID0gMztcbnZhciBNT1ZJTkcgPSA0O1xudmFyIFNDUk9MTElORyA9IDU7XG52YXIgRFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUdHSU5HID0gNjtcbnZhciBERVNUUk9ZRUQgPSA3O1xudmFyIFNUQVRFUyA9IHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NSRUFURUQ6IENSRUFURUQsXG4gIE1PVU5URUQ6IE1PVU5URUQsXG4gIElETEU6IElEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xFLFxuICBNT1ZJTkc6IE1PVklORyxcbiAgU0NST0xMSU5HOiBTQ1JPTExJTkcsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidEUkFHR0lORzogRFJBR0dJTkcsXG4gIERFU1RST1lFRDogREVTVFJPWUVEXG59O1xuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZW1wdHkoYXJyYXkpIHtcbiAgYXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHNsaWNlKGFycmF5TGlrZSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gQXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnByb3RvdHlwZS5zbGljZS5jYWxsKGFycmF5TGlrZSwgc3RhcnQsIGVuZCk7XG59XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBhcHBseShmdW5jKSB7XG4gIHJldHVybiBmdW5jLmJpbmQuYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmMsIFtudWxsXS5jb25jYXQoc2xpY2UoYXJndW1lbnRzLCAxKSkpO1xufVxuXG52JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIG5leHRUaWNrID0gc2V0VGltZW91dDtcblxudmFyIG5vb3AgPSBmdW5jdGlvbiBuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29vcCgpIHt9O1xuXG5mdW5jdGlvbiByYWYoZnVuYykge1xuICByZXR1cm4gcmVxdWVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbmltYXRpb25GcmFtZShmdW5jKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHR5cGUsIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gdHlwZTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGlzT2JqZWN0KHN1YmplY3QpIHtcbiAgcmV0dXJuICFpc051bGwoc3ViamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpICYmIHR5cGVPZigib2JqZWN0Iiwgc3ViamVjdCk7XG59XG5cbnZhciBpc0FycmF5ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEFycmF5LmlzQXJyYXk7XG52YXIgaXNGdW5jdGlvbiA9IGFwcGx5KHR5cGVPZiwgImZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiIpO1xudmFyIGlzU3RyaW5nID0gYXBwbHkodHlwZU9mLCAic3RyaW5nIik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGlzVW5kZWZpbmVkID0gYXBwbHkodHlwZU9mLCAidW5kZWZpbmVkIik7XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBpc051bGwoc3ViamVjdCkge1xuICByZXR1cm4gc3ViamVjdCA9PT0gbnVsbDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQoc3ViamVjdCkge1xuICB0cnkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gc3ViamVjdCBpbnN0YW5jZW9mIChzdWJqZWN0Lm93bmVyRG9jdW1lbnQuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZmF1bHRWaWV3IHx8IHdpbmRvdykuSFRNTEVsZW1lbnQ7XG4gIH0gY2F0Y2ggKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkodmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbmZ1bmN0aW9uIGZvckVhY2godmFsdWVzLCBpdGVyYXRlZSkge1xuICB0b0FycicKICAgICAgICAgICAgICAgICAgICAgICAgYidheSh2YWx1ZXMpLmZvckVhY2goaXRlcmF0ZWUpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMoYXJyYXksIHZhbHVlKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKHZhbHVlKSA+IC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMTtcbn1cblxuZnVuY3Rpb24gcHVzaChhcnJheSwgaXRlbXMpIHtcbiAgYXJyYXkucHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuYXBwbHkoYXJyYXksIHRvQXJyYXkoaXRlbXMpKTtcbiAgcmV0dXJuIGFycmF5O1xufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBhZGQpIHtcbiAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIChlbG0pIHtcbiAgICBmb3JFYWNoKGNsYXNzZXMsIGZ1bmN0aW9uIChuYW1lKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgZWxtLmNsYXNzTGlzdFthZGQgPyAiYWRkIiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiAicmVtb3ZlIl0obmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGFkZENsYXNzKGVsbSwgY2xhc3Nlcykge1xuICB0b2dnbGVDbGFzcyhlbG0sIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1N0cmluZyhjbGFzc2VzKSA/IGNsYXNzZXMuc3BsaXQoIiAiKSA6IGNsYXNzZXMsIHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VhY2goY2hpbGRyZW4sIHBhcmVudC5hcHBlbmRDaGlsZC5iaW5kKHBhcmVudCkpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gYmVmb3JlKG5vZGVzLCByZWYpIHtcbiAgZm9yRWFjaChub2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyIHBhcmVudCA9IChyZWYgfHwgbm9kZSkuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmVudE5vZGU7XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuaW5zZScKICAgICAgICAgICAgICAgICAgICAgICAgYidydEJlZm9yZShub2RlLCByZWYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjaGVzKGVsbSwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQoZWxtKSAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKGVsbVsibXNNYXRjaGVzU2VsZWN0b3IiXSB8fCBlbG0ubWF0Y2hlcykuY2FsbChlbG0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKHBhcmVudCwgc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSB7XG4gIHZhciBjaGlsZHJlbjIgPSBwYXJlbnQgPyBzbGljZShwYXJlbnQuY2hpbGRyZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduKSA6IFtdO1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbjIuZmlsdGVyKGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyhjaGlsZCwgc2VsZWN0b3IpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfSkgOiBjaGlsZHJlbjI7XG59XG5cbmZ1bmN0aW9uIGNoaWxkKHBhcmVudCwgc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcmVuKHBhcmVudCwgc2VsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9yKVswXSA6IHBhcmVudC5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxudmFyIG93bktlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lzID0gT2JqZWN0LmtleXM7XG5cbmZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlZSwgcmlnaHQpIHtcbiAgaWYgKG9iamVjdCkge1xuICAgIChyaWdodCA/IG93bktlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lzKG9iamVjdCkucmV2ZXJzZSgpIDogb3duS2V5cyhvYmplY3QpKS5mb3JFYWNoKGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAoa2V5KSB7XG4gICAgICBrZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZXJhdGVlKG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3Rba2V5XSwga2V5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG5mdW5jdGlvbiBhc3NpZ24ob2JqZWN0KSB7XG4gIHNsaWNlKGFyZ3VtZW50cywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEpLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGZvck93bihzb3VyY2UsIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgb2JqZWN0W2tleV0gPSBzb3VyY2Vba2V5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ107XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gbWVyZ2Uob2JqZWN0KSB7XG4gIHNsaWNlKGFyZ3VtZW50cywgMSkuZm9yRWFjaChmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gKHNvdXJjZSkge1xuICAgIGZvck93bihzb3VyY2UsIGZ1bmN0aW9uICh2YWx1ZSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tleSkge1xuICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rba2V5XSA9IHZhbHVlLnNsaWNlKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSBtZXJnZSh7fSwgaXNPYmplY3Qob2JqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdFtrZXldKSA/IG9iamVjdFtrZXldIDoge30sIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5cykge1xuICBmb3JFYWNoKGtleXMgfHwgb3duS2V5cyhvYmplY3QpLCBmdW5jdGlvbiAoaycKICAgICAgICAgICAgICAgICAgICAgICAgYidleSkge1xuICAgIGRlbGV0ZSBvYmplY3Rba2V5XTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW1vdmVBdHRyaWJ1dGUoZWxtcywgYXR0cnMpIHtcbiAgZm9yRWFjaChlbG1zLCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKGVsbSkge1xuICAgIGZvckVhY2goYXR0cnMsIGZ1bmN0aW9uIChhdHRyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgZWxtICYmIGVsbS5yZW1vdmVBdHRyaWJ1dGUoYXR0cik7XG4gICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmlidXRlKGVsbXMsIGF0dHJzLCB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUpIHtcbiAgaWYgKGlzT2JqZWN0KGF0dHJzKSkge1xuICAgIGZvck93bihhdHRycywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uICh2YWx1ZTIsIG5hbWUpIHtcbiAgICAgIHNldEF0dHJpYnV0ZShlbG1zLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmFtZSwgdmFsdWUyKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBmb3JFYWNoKGVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21zLCBmdW5jdGlvbiAoZWxtKSB7XG4gICAgICBpc051bGwodmFsdWUpIHx8IHZhbHVlID09JwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gIiIgPyByZW1vdmVBdHRyaWJ1dGUoZWxtLCBhdHRycykgOiBlbG0uc2V0QXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShhdHRycywgU3RyaW5nKHZhbHVlKSk7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNyZWF0ZSh0YWcsIGF0dHJzLCBwYXJlbnQpIHtcbiAgdmFyIGVsbSA9IGRvY3VtZW50LmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGVFbGVtZW50KHRhZyk7XG5cbiAgaWYgKGF0dHJzKSB7XG4gICAgaXNTdHJpbmcoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHJzKSA/IGFkZENsYXNzKGVsbSwgYXR0cnMpIDogc2V0QXR0cmlidXRlKGVsbSwgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJzKTtcbiAgfVxuXG4gIHBhcmVudCAmJiBhcHBlbmQocGFyZW50LCBlbG0pO1xuICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGVsbTtcbn1cblxuZnVuY3Rpb24gc3R5bGUoZWxtLCBwcm9wLCB2YWx1ZSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiBnZXRDb21wdXRlZFN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZShlbG0pW3Byb3BdO1xuICB9XG5cbiAgaWYgKCFpc051bGwodmFsdWUpKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVsbS5zdHlsZVtwcm9wXSA9ICIiICsgdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc3BsYXkoZWxtLCBkaXNwbGF5Mikge1xuICBzdHlsZShlbG0sICJkaXNwbGF5IiwgZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXkyKTtcbn1cblxuZnVuY3Rpb24gZm9jdXMoZWxtKSB7XG4gIGVsbVsic2V0QWN0aXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJdICYmIGVsbVsic2V0QWN0aXZlIl0oKSB8fCBlbG0uZm9jdXMoe1xuICAgIHByZXZlbnRTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nyb2xsOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRBdHRyaWJ1dGUoZWxtLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cikge1xuICByZXR1cm4gZWxtLmdldEF0dHJpYnV0ZShhdHRyKTtcbn1cblxuZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGhhc0NsYXNzKGVsbSwgY2xhc3NOYW1lKSB7XG4gIHJldHVybiBlbG0gJiYgZWxtLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gcmVjdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xufVxuXG5mdW5jdGlvbiByZW1vdmUobm9kZXMpIHtcbiAgZm9yRWFjaChub2RlcywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIChub2RlKSB7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0pO1xufVxuXG5mdW5jdGlvbiBwYXJzZUh0bWwoaHRtbCkge1xuICByZXR1cm4gY2hpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkKG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgInRleHQvaHRtbCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKS5ib2R5KTtcbn1cblxuZnVuY3Rpb24gcHJldmVudChlLCBzdG9wUHJvcGFnYXRpb24pJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gIGUucHJldmVudERlZmF1bHQoKTtcblxuICBpZiAoc3RvcFByb3BhZ2F0aW9uKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5zdG9wSW1tZWRpYXRlUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3BhZ2F0aW9uKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXVlcnkocGFyZW50LCBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IpIHtcbiAgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IpO1xufVxuXG5mdW5jdGlvbiBxdWVyeUFsbChwYXJlbnQsIHNlbGVjdG9yKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gc2VsZWN0b3IgPyBzbGljZShwYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IpKSA6IFtdO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDbGFzcyhlbG0sIGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzKSB7XG4gIHRvZ2dsZUNsYXNzKGVsbSwgY2xhc3NlcywgZmFsc2UpO1xufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdGltZU9mKGUpIHtcbiAgcmV0dXJuIGUudGltZVN0YW1wO1xufVxuXG5mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gdW5pdCh2YWx1ZSkge1xuICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogdmFsdWUgPyB2YWx1ZSArICJweCIgOiAiIjtcbn1cblxudmFyIFBST0pFQ1RfQ09ERScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSAic3BsaWRlIjtcbnZhciBEQVRBX0FUVFJJQlVURSA9ICJkYXRhLSIgKyBQUk9KRUNUXycKICAgICAgICAgICAgICAgICAgICAgICAgYidDT0RFO1xuXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcigiWyIgKyBQUk9KRUNUX0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0RFICsgIl0gIiArIChtZXNzYWdlIHx8ICIiKSk7XG4gIH1cbn1cblxudmFyIG1pbiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidNYXRoLm1pbixcbiAgICBtYXggPSBNYXRoLm1heCxcbiAgICBmbG9vciA9IE1hdGguZicKICAgICAgICAgICAgICAgICAgICAgICAgYidsb29yLFxuICAgIGNlaWwgPSBNYXRoLmNlaWwsXG4gICAgYWJzID0gTWF0aC5hYnM7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBhcHByb3hpbWF0ZWx5RXF1YWwoeCwgeSwgZXBzaWxvbikge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGFicyh4IC0geSkgPCBlcHNpbG9uO1xufVxuXG5mdW5jdGlvbiBiZXR3ZWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhudW1iZXIsIHgsIHksIGV4Y2x1c2l2ZSkge1xuICB2YXIgbWluaW11bSA9IG1pbih4LCB5JwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIHZhciBtYXhpbXVtID0gbWF4KHgsIHkpO1xuICByZXR1cm4gZXhjbHVzaXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA/IG1pbmltdW0gPCBudW1iZXIgJiYgbnVtYmVyIDwgbWF4aW11bSA6IG1pbmltdW0gPD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciAmJiBudW1iZXIgPD0gbWF4aW11bTtcbn1cblxuZnVuY3Rpb24gY2xhbXAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciwgeCwgeSkge1xuICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtYXhpbXVtID0gbWF4KHgsIHkpO1xuICByZXR1cm4gbWluKG1heChtaW5pbXVtLCBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyKSwgbWF4aW11bSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4gKygnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCA+IDApIC0gKyh4IDwgMCk7XG59XG5cbmZ1bmN0aW9uIGNhbWVsVG9LZWJhYihzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdChzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnLCByZXBsYWNlbWVudHMpIHtcbiAgZm9yRWFjaChyZXBsYWNlbWVudHMsIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYicocmVwbGFjZW1lbnQpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZSgiJXMiLCAiIicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKyByZXBsYWNlbWVudCk7XG4gIH0pO1xuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gcGFkKG51bWJlcikge1xuICByZXR1cm4gbnVtYmVyIDwgMTAgPyAiMCIgKyBudW1iZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIDogIiIgKyBudW1iZXI7XG59XG5cbnZhciBpZHMgPSB7fTtcblxuZnVuY3Rpb24gdW5pcScKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZUlkKHByZWZpeCkge1xuICByZXR1cm4gIiIgKyBwcmVmaXggKyBwYWQoaWRzW3ByZWZpeCcKICAgICAgICAgICAgICAgICAgICAgICAgYiddID0gKGlkc1twcmVmaXhdIHx8IDApICsgMSk7XG59XG5cbmZ1bmN0aW9uIEV2ZW50QmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlcigpIHtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldHMsIGV2ZW50cywgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgICBmb3JFYWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KHRhcmdldHMsIGV2ZW50cywgZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIG5hbWVzcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UpIHtcbiAgICAgIHZhciBpc0V2ZW50VGFyZ2V0ID0gKCJhZGRFdmVudExpc3RlbmVyIiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gdGFyZ2V0KTtcbiAgICAgIHZhciByZW1vdmVyID0gaXNFdmVudFRhcmdldCA/IHRhcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRhcmdldCwgZXZlbnQsIGNhbGxiYWNrLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucykgOiB0YXJnZXRbInJlbW92ZUxpc3RlbmVyIl0uYmluZCh0YXJnZXQsIGNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsYmFjayk7XG4gICAgICBpc0V2ZW50VGFyZ2V0ID8gdGFyZ2V0LmFkZEV2ZW50TGlzdGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyKGV2ZW50LCBjYWxsYmFjaywgb3B0aW9ucykgOiB0YXJnZXRbImFkZExpc3RlbmVyIl0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGNhbGxiYWNrKTtcbiAgICAgIGxpc3RlbmVycy5wdXNoKFt0YXJnZXQsIGV2ZW50LCBuYW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNwYWNlLCBjYWxsYmFjaywgcmVtb3Zlcl0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIHVuYmluZCh0YXJnZXRzLCBldmVudHMsIGNhbGxiYWNrKSB7XG4gICAgZm9yRWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudCh0YXJnZXRzLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwYWNlKSB7XG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAobGlzdGVuZXIpIHtcbiAgICAgICAgaWYgKGxpc3RlbmVyWzBdID09PSB0YXJnZXQgJiYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3RlbmVyWzFdID09PSBldmVudCAmJiBsaXN0ZW5lclsyXSA9PT0gbmFtZXNwYWNlICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiAoIWNhbGxiYWNrIHx8IGxpc3RlbmVyWzNdID09PSBjYWxsYmFjaykpIHtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbGlzdGVuZXJbNF0oKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICB9KTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICBmdW5jdGlvbiBkaXNwYXRjaCh0YXJnZXQsIHR5cGUsIGRldGFpbCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZTtcbiAgICB2YXIgYnViYmxlcyA9IHRydWU7XG5cbiAgICBpZiAodHlwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VvZiBDdXN0b21FdmVudCA9PT0gImZ1bmN0aW9uIikge1xuICAgICAgZSA9IG5ldyBDdXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tRXZlbnQodHlwZSwge1xuICAgICAgICBidWJibGVzOiBidWJibGVzLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZGV0YWlsOiBkZXRhaWxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO1xuICAgICAgZS5pbml0QycKICAgICAgICAgICAgICAgICAgICAgICAgYid1c3RvbUV2ZW50KHR5cGUsIGJ1YmJsZXMsIGZhbHNlLCBkZXRhaWwpO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChlKTtcbiAgICByZXR1cm4gZTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBmb3JFYWNoRXZlbnQodGFyZ2V0cywgZXZlbnRzLCBpdGVyYXRlZSkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBmb3JFYWNoKHRhcmdldHMsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0YXJnZXQgJiYgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uIChldmVudHMyKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBldmVudHMyLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROUykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBldmVudE5TLnNwbGl0KCIuIik7XG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGl0ZXJhdGVlKHRhcmdldCwgZnJhZ21lbnRbMF0sIGZyYWdtZW50WzFdKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRhdGFbNF0oKTtcbiAgICB9KTtcbiAgICBlbXB0eShsaXN0ZW5lcnMpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHJldHVybiB7XG4gICAgYmluZDogYmluZCxcbiAgICB1bmJpbmQ6IHVuYmluZCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3lcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG59XG5cbnZhciBFVkVOVF9NT1VOVEVEID0gIm1vdW50ZWQiO1xudmFyIEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FEWSA9ICJyZWFkeSI7XG52YXIgRVZFTlRfTU9WRSA9ICJtb3ZlIjtcbnZhciBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfTU9WRUQgPSAibW92ZWQiO1xudmFyIEVWRU5UX0NMSUNLID0gImNsaWNrIjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgRVZFTlRfQUNUSVZFID0gImFjdGl2ZSI7XG52YXIgRVZFTlRfSU5BQ1RJVkUgPSAiaW5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aXZlIjtcbnZhciBFVkVOVF9WSVNJQkxFID0gInZpc2libGUiO1xudmFyIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19ISURERU4gPSAiaGlkZGVuIjtcbnZhciBFVkVOVF9SRUZSRVNIID0gInJlZnJlc2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbnZhciBFVkVOVF9VUERBVEVEID0gInVwZGF0ZWQiO1xudmFyIEVWRU5UX1JFU0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInWkUgPSAicmVzaXplIjtcbnZhciBFVkVOVF9SRVNJWkVEID0gInJlc2l6ZWQiO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBFVkVOVF9EUkFHID0gImRyYWciO1xudmFyIEVWRU5UX0RSQUdHSU5HID0gImRyYWdnaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyI7XG52YXIgRVZFTlRfRFJBR0dFRCA9ICJkcmFnZ2VkIjtcbnZhciBFVkVOVF9TQ1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0xMID0gInNjcm9sbCI7XG52YXIgRVZFTlRfU0NST0xMRUQgPSAic2Nyb2xsZWQiOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbnZhciBFVkVOVF9PVkVSRkxPVyA9ICJvdmVyZmxvdyI7XG52YXIgRVZFTlRfREVTVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidST1kgPSAiZGVzdHJveSI7XG52YXIgRVZFTlRfQVJST1dTX01PVU5URUQgPSAiYXJyb3dzOicKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudGVkIjtcbnZhciBFVkVOVF9BUlJPV1NfVVBEQVRFRCA9ICJhcnJvd3M6dXBkYXRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCA9ICJwYWdpbmF0aW9uOm1vdW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkIjtcbnZhciBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQgPSAicGFnaW5hdGlvbjp1cGRhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCI7XG52YXIgRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gIm5hdmlnYXRpb246bW91bicKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWQiO1xudmFyIEVWRU5UX0FVVE9QTEFZX1BMQVkgPSAiYXV0b3BsYXk6cGxheSI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcgPSAiYXV0b3BsYXk6cGxheWluZyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEVWRU5UX0FVVE9QTEFZX1BBVVNFID0gImF1dG9wbGF5OnBhdXNlIjtcbnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgRVZFTlRfTEFaWUxPQURfTE9BREVEID0gImxhenlsb2FkOmxvYWRlZCI7XG52YXIgRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1NMSURFX0tFWURPV04gPSAic2siO1xudmFyIEVWRU5UX1NISUZURUQgPSAicycKICAgICAgICAgICAgICAgICAgICAgICAgYidoIjtcbnZhciBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9ICJlaSI7XG5cbmZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBFdmVudEludGVyZmFjZShTcGxpZGUyKSB7XG4gIHZhciBidXMgPSBTcGxpZGUyID8gU3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIuZXZlbnQuYnVzIDogZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgdmFyIGJpbmRlciA9IEV2ZW50QmluZGVyKCk7XG5cbiAgZnVuY3Rpb24gb24oZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cywgY2FsbGJhY2spIHtcbiAgICBiaW5kZXIuYmluZChidXMsIHRvQXJyYXkoZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncykuam9pbigiICIpLCBmdW5jdGlvbiAoZSkge1xuICAgICAgY2FsbGJhY2suYXBwbHkoY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGxiYWNrLCBpc0FycmF5KGUuZGV0YWlsKSA/IGUuZGV0YWlsIDogW10pO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICBiaW5kZXIuZGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhdGNoKGJ1cywgZXZlbnQsIHNsaWNlKGFyZ3VtZW50cywgMSkpO1xuICB9XG5cbiAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChTcGxpZGUyKSB7XG4gICAgU3BsaWRlMi5ldmVudC5vbihFVkVOVF9ERVNUUk9ZLCBiaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyLmRlc3Ryb3kpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2lnbihiaW5kZXIsIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgYnVzOiBidXMsXG4gICAgb246IG9uLFxuICAgIG9mZjogYXBwbHkoYmluZGVyLnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JpbmQsIGJ1cyksXG4gICAgZW1pdDogZW1pdFxuICB9KTtcbn1cblxuZnVuY3Rpb24gUmVxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Vlc3RJbnRlcnZhbChpbnRlcnZhbCwgb25JbnRlcnZhbCwgb25VcGRhdGUsIGxpbWl0KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICB2YXIgbm93ID0gRGF0ZS5ub3c7XG4gIHZhciBzdGFydFRpbWU7XG4gIHZhciByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSA9IDA7XG4gIHZhciBpZDtcbiAgdmFyIHBhdXNlZCA9IHRydWU7XG4gIHZhciBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQgPSAwO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBpZiAoIXBhdXNlZCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIHJhdGUgPSBpbnRlcnZhbCA/IG1pbigobm93KCkgLSBzdGFydFRpbWUpIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGludGVydmFsLCAxKSA6IDE7XG4gICAgICBvblVwZGF0ZSAmJiBvblVwZGF0ZShyYXRlKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICAgIGlmIChyYXRlID49IDEpIHtcbiAgICAgICAgb25JbnRlcnZhbCgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgc3RhcnRUaW1lID0gbm93KCk7XG5cbiAgICAgICAgaWYgKGxpbWl0ICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgYicrK2NvdW50ID49IGxpbWl0KSB7XG4gICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlkID0gcmFmKHVwZGF0ZSk7XG4gICAgfVxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0KHJlc3VtZSkge1xuICAgIHJlc3VtZSB8fCBjYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VsKCk7XG4gICAgc3RhcnRUaW1lID0gbm93KCkgLSAocmVzdW1lID8gcmF0ZSAqIGludGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnZhbCA6IDApO1xuICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgIGlkID0gcmFmKHVwZGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcGF1c2VkID0gdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiByZXdpbmQoKSB7XG4gICAgc3RhcnRUaW1lID0gbm93JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIHJhdGUgPSAwO1xuXG4gICAgaWYgKG9uVXBkYXRlKSB7XG4gICAgICBvblUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGUocmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZCAmJiBjYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICAgcmF0ZSA9IDA7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlkID0gMDtcbiAgICBwYXVzZWQgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gcycKICAgICAgICAgICAgICAgICAgICAgICAgYidldCh0aW1lKSB7XG4gICAgaW50ZXJ2YWwgPSB0aW1lO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzUGF1c2VkKCkge1xuICAgIHJldHVybiBwYXVzZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBzdGFydDogc3RhcnQsXG4gICAgcmV3aW5kOiByZXdpbmQsXG4gICAgcGF1c2U6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXVzZSxcbiAgICBjYW5jZWw6IGNhbmNlbCxcbiAgICBzZXQ6IHNldCxcbiAgICBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidQYXVzZWQ6IGlzUGF1c2VkXG4gIH07XG59XG5cbmZ1bmN0aW9uIFN0YXRlKGluaXRpYWxTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhdGUpIHtcbiAgdmFyIHN0YXRlID0gaW5pdGlhbFN0YXRlO1xuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQodmFsdWUpIHtcbiAgICBzdGF0ZSA9IHZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKHN0YXRlcykge1xuICAgIHJldHVybiBpbmNsdWRlcyh0b0FycmF5KHN0YXRlcyksIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNldDogc2V0LFxuICAgIGlzOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNcbiAgfTtcbn1cblxuZnVuY3Rpb24gVGhyb3R0bGUoZnVuYywgZHVyYXRpb24pIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiB8fCAwLCBmdW5jLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVsbCwgMSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaW50ZXJ2YWwuaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzUGF1c2VkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01lZGlhKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBzdGF0ZSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGUyLnN0YXRlO1xuICB2YXIgYnJlYWtwb2ludHMgPSBvcHRpb25zLmJyZWFrcG9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cyB8fCB7fTtcbiAgdmFyIHJlZHVjZWRNb3Rpb24gPSBvcHRpb25zLnJlZHVjZWRNb3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHx8IHt9O1xuICB2YXIgYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcbiAgdmFyIHF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgdmFyIGlzTWluICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IG9wdGlvbnMubWVkaWFRdWVyeSA9PT0gIm1pbiI7XG4gICAgb3duS2V5cyhicmVha3BvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMpLnNvcnQoZnVuY3Rpb24gKG4sIG0pIHtcbiAgICAgIHJldHVybiBpc01pbiA/ICtuICcKICAgICAgICAgICAgICAgICAgICAgICAgYictICttIDogK20gLSArbjtcbiAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICByZWdpc3RlcihicmVha3BvaW50c1trZXldLCAiKCIgKyAoaXNNaW4gPyAibWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIgOiAibWF4IikgKyAiLXdpZHRoOiIgKyBrZXkgKyAicHgpIik7XG4gICAgfSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJlZ2lzdGVyKHJlZHVjZWRNb3Rpb24sIE1FRElBX1BSRUZFUlNfUkVEVUNFRF9NT1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU9OKTtcbiAgICB1cGRhdGUoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koY29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXRlbHkpIHtcbiAgICBpZiAoY29tcGxldGVseSkge1xuICAgICAgYmluZGVyLmRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXIob3B0aW9uczIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBxdWVyeSkge1xuICAgIHZhciBxdWVyeUxpc3QgPSBtYXRjaE1lZGlhKHF1ZXJ5KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYmluZGVyLmJpbmQocXVlcnlMaXN0LCAiY2hhbmdlIiwgdXBkYXRlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcXVlcmllcy5wdXNoKFtvcHRpb25zMiwgcXVlcnlMaXN0XSk7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdXBkYXRlKCkge1xuICAgIHZhciBkZXN0cm95ZWQgPSBzdGF0ZS5pcyhERVNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPWUVEKTtcbiAgICB2YXIgZGlyZWN0aW9uID0gb3B0aW9ucy5kaXJlY3Rpb247XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBtZXJnZWQgPSBxdWVyaWVzLnJlZHVjZShmdW5jdGlvbiAobWVyZ2VkMiwgZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ5KSB7XG4gICAgICByZXR1cm4gbWVyZ2UobWVyZ2VkMiwgZW50cnlbMV0ubWF0Y2hlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPyBlbnRyeVswXSA6IHt9KTtcbiAgICB9LCB7fSk7XG4gICAgb21pdChvcHRpb25zKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgc2V0KG1lcmdlZCk7XG5cbiAgICBpZiAob3B0aW9ucy5kZXN0cm95KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgU3BsaWRlMi5kZXN0cm95KG9wdGlvbnMuZGVzdHJveSA9PT0gImNvbXBsZXRlbHkiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfSBlbHNlIGlmIChkZXN0cm95ZWQpIHtcbiAgICAgIGRlc3Ryb3kodHJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgICAgU3BsaWRlMi5tb3VudCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWN0aW9uICE9PSBvcHRpb25zLmRpcmVjdGlvbiAmJiBTcGxpZGUyLnJlZnJlc2goKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVkdWNlKGVuYWJsZSkge1xuICAgIGlmIChtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hNZWRpYShNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OKS5tYXRjaGVzKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgZW5hYmxlID8gbWVyZ2Uob3B0aW9ucywgcmVkdWNlZE1vdGlvbikgOiBvbWl0KG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLCBvd25LZXlzKHJlZHVjZWRNb3Rpb24pKTtcbiAgICB9XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gc2V0KG9wdHMsIGJhc2UsIG5vdGlmeSkge1xuICAgIG1lcmdlKG9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRzKTtcbiAgICBiYXNlICYmIG1lcmdlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducyksIG9wdHMpO1xuXG4gICAgaWYgKG5vdGlmeSB8fCAhc3RhdGUuaXMoQ1JFQVRFRCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpKSB7XG4gICAgICBTcGxpZGUyLmVtaXQoRVZFTlRfVVBEQVRFRCwgb3B0aW9ucyk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2V0dXA6IHNldHVwLFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0cm95OiBkZXN0cm95LFxuICAgIHJlZHVjZTogcmVkdWNlLFxuICAgIHNldDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NldFxuICB9O1xufVxuXG52YXIgQVJST1cgPSAiQXJyb3ciO1xudmFyIEFSUk9XX0xFRlQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gQVJST1cgKyAiTGVmdCI7XG52YXIgQVJST1dfUklHSFQgPSBBUlJPVyArICJSaWdodCI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIEFSUk9XX1VQID0gQVJST1cgKyAiVXAiO1xudmFyIEFSUk9XX0RPV04gPSBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1cgKyAiRG93biI7XG52YXIgTFRSID0gImx0ciI7XG52YXIgUlRMID0gInJ0bCI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIFRUQiA9ICJ0dGIiO1xudmFyIE9SSUVOVEFUSU9OX01BUCA9IHtcbiAgd2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoOiBbImhlaWdodCJdLFxuICBsZWZ0OiBbInRvcCIsICJyaWdodCJdLFxuICByaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IFsiYm90dG9tIiwgImxlZnQiXSxcbiAgeDogWyJ5Il0sXG4gIFg6IFsiWSJdLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWTogWyJYIl0sXG4gIEFycm93TGVmdDogW0FSUk9XX1VQLCBBUlJPV19SSUdIVF0sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBBcnJvd1JpZ2h0OiBbQVJST1dfRE9XTiwgQVJST1dfTEVGVF1cbn07XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBEaXJlY3Rpb24oU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHJlc29sdmUocHJvcCwgYXhpc09ubHksIGRpcmVjdGlvbikge1xuICAgIGRpcmVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gPSBkaXJlY3Rpb24gfHwgb3B0aW9ucy5kaXJlY3Rpb247XG4gICAgdmFyIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGRpcmVjdGlvbiA9PT0gUlRMICYmICFheGlzT25seSA/IDEgOiBkaXJlY3Rpb24gPT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBUVEIgPyAwIDogLTE7XG4gICAgcmV0dXJuIE9SSUVOVEFUSU9OX01BUFtwcm9wXSAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1JJRU5UQVRJT05fTUFQW3Byb3BdW2luZGV4XSB8fCBwcm9wLnJlcGxhY2UoL3dpZHRofCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWZ0fHJpZ2h0L2ksIGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0KSB7XG4gICAgICB2YXIgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlcGxhY2VtZW50ID0gT1JJRU5UQVRJT05fTUFQW21hdGNoLnRvTG93ZXJDYXNlKCldW2luJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleF0gfHwgbWF0Y2g7XG4gICAgICByZXR1cm4gb2Zmc2V0ID4gMCA/IHJlcGxhY2VtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcGxhY2VtZW50LnNsaWNlKDEpIDogcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxhY2VtZW50O1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb3JpZW50KHZhbHVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHJldHVybiB2YWx1ZSAqIChvcHRpb25zLmRpcmVjdGlvbiA9PT0gUlRMID8gMScKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiAtMSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJlc29sdmU6IHJlc29sdmUsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9yaWVudDogb3JpZW50XG4gIH07XG59XG5cbnZhciBST0xFID0gInJvbGUiO1xudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUQUJfSU5ERVggPSAidGFiaW5kZXgiO1xudmFyIERJU0FCTEVEID0gImRpc2FibGVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgQVJJQV9QUkVGSVggPSAiYXJpYS0iO1xudmFyIEFSSUFfQ09OVFJPTFMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gQVJJQV9QUkVGSVggKyAiY29udHJvbHMiO1xudmFyIEFSSUFfQ1VSUkVOVCA9IEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BSRUZJWCArICJjdXJyZW50IjtcbnZhciBBUklBX1NFTEVDVEVEID0gQVJJQV9QUkVGSVggJwogICAgICAgICAgICAgICAgICAgICAgICBiJysgInNlbGVjdGVkIjtcbnZhciBBUklBX0xBQkVMID0gQVJJQV9QUkVGSVggKyAibGFiZWwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBBUklBX0xBQkVMTEVEQlkgPSBBUklBX1BSRUZJWCArICJsYWJlbGxlZGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSI7XG52YXIgQVJJQV9ISURERU4gPSBBUklBX1BSRUZJWCArICJoaWRkZW4iO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBBUklBX09SSUVOVEFUSU9OID0gQVJJQV9QUkVGSVggKyAib3JpZW50YXRpb24iO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBBUklBX1JPTEVERVNDUklQVElPTiA9IEFSSUFfUFJFRklYICsgInJvbGVkZXNjcmlwdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24iO1xudmFyIEFSSUFfTElWRSA9IEFSSUFfUFJFRklYICsgImxpdmUiO1xudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX0JVU1kgPSBBUklBX1BSRUZJWCArICJidXN5IjtcbnZhciBBUklBX0FUT01JQyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX1BSRUZJWCArICJhdG9taWMiO1xudmFyIEFMTF9BVFRSSUJVVEVTID0gW1JPTEUsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUQUJfSU5ERVgsIERJU0FCTEVELCBBUklBX0NPTlRST0xTLCBBUklBX0NVUlJFTlQsIEFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX0xBQkVMLCBBUklBX0xBQkVMTEVEQlksIEFSSUFfSElEREVOLCBBUklBX09SSUVOVEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVElPTiwgQVJJQV9ST0xFREVTQ1JJUFRJT05dO1xudmFyIENMQVNTX1BSRUZJWCA9IFBST0onCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUNUX0NPREUgKyAiX18iO1xudmFyIFNUQVRVU19DTEFTU19QUkVGSVggPSAiaXMtIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG52YXIgQ0xBU1NfUk9PVCA9IFBST0pFQ1RfQ09ERTtcbnZhciBDTEFTU19UUkFDSycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBDTEFTU19QUkVGSVggKyAidHJhY2siO1xudmFyIENMQVNTX0xJU1QgPSBDTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgYidFRklYICsgImxpc3QiO1xudmFyIENMQVNTX1NMSURFID0gQ0xBU1NfUFJFRklYICsgInNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSI7XG52YXIgQ0xBU1NfQ0xPTkUgPSBDTEFTU19TTElERSArICItLWNsb25lIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgQ0xBU1NfQ09OVEFJTkVSID0gQ0xBU1NfU0xJREUgKyAiX19jb250YWluZXIiO1xudicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBDTEFTU19BUlJPV1MgPSBDTEFTU19QUkVGSVggKyAiYXJyb3dzIjtcbnZhciBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgYidfQVJST1cgPSBDTEFTU19QUkVGSVggKyAiYXJyb3ciO1xudmFyIENMQVNTX0FSUk9XX1BSRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWID0gQ0xBU1NfQVJST1cgKyAiLS1wcmV2IjtcbnZhciBDTEFTU19BUlJPV19ORVhUID0gQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX0FSUk9XICsgIi0tbmV4dCI7XG52YXIgQ0xBU1NfUEFHSU5BVElPTiA9IENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgYidQUkVGSVggKyAicGFnaW5hdGlvbiI7XG52YXIgQ0xBU1NfUEFHSU5BVElPTl9QQUdFID0gQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1BBR0lOQVRJT04gKyAiX19wYWdlIjtcbnZhciBDTEFTU19QUk9HUkVTUyA9IENMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUkVGSVggKyAicHJvZ3Jlc3MiO1xudmFyIENMQVNTX1BST0dSRVNTX0JBUiA9IENMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUk9HUkVTUyArICJfX2JhciI7XG52YXIgQ0xBU1NfVE9HR0xFID0gQ0xBU1NfUFJFRicKICAgICAgICAgICAgICAgICAgICAgICAgYidJWCArICJ0b2dnbGUiO1xudmFyIENMQVNTX1RPR0dMRV9QTEFZID0gQ0xBU1NfVE9HR0xFICcKICAgICAgICAgICAgICAgICAgICAgICAgYicrICJfX3BsYXkiO1xudmFyIENMQVNTX1RPR0dMRV9QQVVTRSA9IENMQVNTX1RPR0dMRSArICcKICAgICAgICAgICAgICAgICAgICAgICAgYiciX19wYXVzZSI7XG52YXIgQ0xBU1NfU1BJTk5FUiA9IENMQVNTX1BSRUZJWCArICJzcGlubicKICAgICAgICAgICAgICAgICAgICAgICAgYidlciI7XG52YXIgQ0xBU1NfU1IgPSBDTEFTU19QUkVGSVggKyAic3IiO1xudmFyIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19JTklUSUFMSVpFRCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiaW5pdGlhbGl6ZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBDTEFTU19BQ1RJVkUgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImFjdGl2ZSI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIENMQVNTX1BSRVYgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgInByZXYiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBDTEFTU19ORVhUID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJuZXh0IjtcbnZhciBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfVklTSUJMRSA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAidmlzaWJsZSI7XG52YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMQVNTX0xPQURJTkcgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImxvYWRpbmciO1xudmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19GT0NVU19JTiA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiZm9jdXMtaW4iO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBDTEFTU19PVkVSRkxPVyA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAib3ZlcmZsb3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbnZhciBTVEFUVVNfQ0xBU1NFUyA9IFtDTEFTU19BQ1RJVkUsIENMQVNTX1ZJU0lCTEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBDTEFTU19QUkVWLCBDTEFTU19ORVhULCBDTEFTU19MT0FESU5HLCBDTEFTU19GT0NVUycKICAgICAgICAgICAgICAgICAgICAgICAgYidfSU4sIENMQVNTX09WRVJGTE9XXTtcbnZhciBDTEFTU0VTID0ge1xuICBzbGlkZTogQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1NMSURFLFxuICBjbG9uZTogQ0xBU1NfQ0xPTkUsXG4gIGFycm93czogQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX0FSUk9XUyxcbiAgYXJyb3c6IENMQVNTX0FSUk9XLFxuICBwcmV2OiBDTEFTU19BUicKICAgICAgICAgICAgICAgICAgICAgICAgYidST1dfUFJFVixcbiAgbmV4dDogQ0xBU1NfQVJST1dfTkVYVCxcbiAgcGFnaW5hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYic6IENMQVNTX1BBR0lOQVRJT04sXG4gIHBhZ2U6IENMQVNTX1BBR0lOQVRJT05fUEFHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsXG4gIHNwaW5uZXI6IENMQVNTX1NQSU5ORVJcbn07XG5cbmZ1bmN0aW9uIGNsb3Nlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGZyb20sIHNlbGVjdG9yKSB7XG4gIGlmIChpc0Z1bmN0aW9uKGZyb20uY2xvc2VzdCkpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmV0dXJuIGZyb20uY2xvc2VzdChzZWxlY3Rvcik7XG4gIH1cblxuICB2YXIgZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbSA9IGZyb207XG5cbiAgd2hpbGUgKGVsbSAmJiBlbG0ubm9kZVR5cGUgPT09IDEpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgaWYgKG1hdGNoZXMoZWxtLCBzZWxlY3RvcikpIHtcbiAgICAgIGJyZWFrOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG5cbiAgICBlbG0gPSBlbG0ucGFyZW50RWxlbWVudDtcbiAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gZWxtO1xufVxuXG52YXIgRlJJQ1RJT04gPSA1O1xudmFyIExPR19JTlRFUlZBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0wgPSAyMDA7XG52YXIgUE9JTlRFUl9ET1dOX0VWRU5UUyA9ICJ0b3VjaHN0YXJ0IG1vdXNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rvd24iO1xudmFyIFBPSU5URVJfTU9WRV9FVkVOVFMgPSAidG91Y2htb3ZlIG1vdXNlbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiO1xudmFyIFBPSU5URVJfVVBfRVZFTlRTID0gInRvdWNoZW5kIHRvdWNoY2FuY2VsIG1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzZXVwIGNsaWNrIjtcblxuZnVuY3Rpb24gRWxlbWVudHMoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UgPSBFdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZS5vbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlLmJpbmQ7XG5cbiAgdmFyIHJvb3QgPSBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlMi5yb290O1xuICB2YXIgaTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgdmFyIGVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50cyA9IHt9O1xuICB2YXIgc2xpZGVzID0gW107XG4gIHZhciByb290Q2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgPSBbXTtcbiAgdmFyIHRyYWNrQ2xhc3NlcyA9IFtdO1xuICB2YXIgdHJhY2s7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgbGlzdDtcbiAgdmFyIGlzVXNpbmdLZXk7XG5cbiAgZnVuY3Rpb24gc2V0dXAoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIGNvbGxlY3QoKTtcbiAgICBpbml0KCk7XG4gICAgdXBkYXRlKCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3kpO1xuICAgIG9uKEVWRU5UX1JFRlJFU0gsIHNldHVwKTtcbiAgICBvbihFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfVVBEQVRFRCwgdXBkYXRlKTtcbiAgICBiaW5kKGRvY3VtZW50LCBQT0lOVEVSX0RPVycKICAgICAgICAgICAgICAgICAgICAgICAgYidOX0VWRU5UUyArICIga2V5ZG93biIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpc1VzaW5nSycKICAgICAgICAgICAgICAgICAgICAgICAgYidleSA9IGUudHlwZSA9PT0gImtleWRvd24iO1xuICAgIH0sIHtcbiAgICAgIGNhcHR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYidlOiB0cnVlXG4gICAgfSk7XG4gICAgYmluZChyb290LCAiZm9jdXNpbiIsIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAoKSB7XG4gICAgICB0b2dnbGVDbGFzcyhyb290LCBDTEFTU19GT0NVU19JTiwgISFpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidVc2luZ0tleSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KGNvbXBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0ZWx5KSB7XG4gICAgdmFyIGF0dHJzID0gQUxMX0FUVFJJQlVURVMuY29uY2F0KCJzdHlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiKTtcbiAgICBlbXB0eShzbGlkZXMpO1xuICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290Q2xhc3Nlcyk7XG4gICAgcmVtb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3NlcyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHJlbW92ZUF0dHJpYnV0ZShbdHJhY2ssIGxpc3RdLCBhdHRycyk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlbW92ZUF0dHJpYnV0ZShyb290LCBjb21wbGV0ZWx5ID8gYXR0cnMgOiBbInN0eWxlIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIEFSSUFfUk9MRURFU0NSSVBUSU9OXSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvb3RDbGFzc2VzKTtcbiAgICByZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3Nlcyk7XG4gICAgcm9vdENsYXNzZXMgPSBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xhc3NlcyhDTEFTU19ST09UKTtcbiAgICB0cmFja0NsYXNzZXMgPSBnZXRDbGFzc2VzKEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19UUkFDSyk7XG4gICAgYWRkQ2xhc3Mocm9vdCwgcm9vdENsYXNzZXMpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBhZGRDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICBzZXRBdHRyaWJ1dGUocm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QsIEFSSUFfTEFCRUwsIG9wdGlvbnMubGFiZWwpO1xuICAgIHNldEF0dHJpYnV0ZShyb28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgQVJJQV9MQUJFTExFREJZLCBvcHRpb25zLmxhYmVsbGVkYnkpO1xuICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGNvbGxlY3QoKSB7XG4gICAgdHJhY2sgPSBmaW5kKCIuIiArIENMQVNTX1RSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDSyk7XG4gICAgbGlzdCA9IGNoaWxkKHRyYWNrLCAiLiIgKyBDTEFTU19MSVNUKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYXNzZXJ0KHRyYWNrICYmIGxpc3QsICJBIHRyYWNrL2xpc3QgZWxlbWVudCBpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWlzc2luZy4iKTtcbiAgICBwdXNoKHNsaWRlcywgY2hpbGRyZW4obGlzdCwgIi4iICsgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1NMSURFICsgIjpub3QoLiIgKyBDTEFTU19DTE9ORSArICIpIikpO1xuICAgIGZvck8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd24oe1xuICAgICAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gICAgICBwYWdpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgICAgIHByZXY6IENMQVNTX0FSUk9XX1BSRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWLFxuICAgICAgbmV4dDogQ0xBU1NfQVJST1dfTkVYVCxcbiAgICAgIGJhcjogQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BST0dSRVNTX0JBUixcbiAgICAgIHRvZ2dsZTogQ0xBU1NfVE9HR0xFXG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGZ1bmN0aW9uIChjbGFzc05hbWUsIGtleSkge1xuICAgICAgZWxlbWVudHNba2V5XSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmaW5kKCIuIiArIGNsYXNzTmFtZSk7XG4gICAgfSk7XG4gICAgYXNzaWduKGVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cywge1xuICAgICAgcm9vdDogcm9vdCxcbiAgICAgIHRyYWNrOiB0cmFjayxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBsaXN0OiBsaXN0LFxuICAgICAgc2xpZGVzOiBzbGlkZXNcbiAgICB9KTtcbiAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBpZCA9IHJvb3QuaWQgfHwgdW5pcXVlSWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFBST0pFQ1RfQ09ERSk7XG4gICAgdmFyIHJvbGUgPSBvcHRpb25zLnJvbGU7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJvb3QuaWQgPSBpZDtcbiAgICB0cmFjay5pZCA9IHRyYWNrLmlkIHx8IGlkICsgIi10cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2siO1xuICAgIGxpc3QuaWQgPSBsaXN0LmlkIHx8IGlkICsgIi1saXN0IjtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIWdldEF0dHJpYnV0ZShyb290LCBST0xFKSAmJiByb290LnRhZ05hbWUgIT09ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0VDVElPTiIgJiYgcm9sZSkge1xuICAgICAgc2V0QXR0cmlidXRlKHJvb3QsIFJPTEUsIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlKTtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9ST0xFREVTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NSSVBUSU9OLCBpMThuLmNhcm91c2VsKTtcbiAgICBzZXRBdHRyaWJ1dGUobGlzdCwgUk9MJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsICJwcmVzZW50YXRpb24iKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmQoc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSB7XG4gICAgdmFyIGVsbSA9IHF1ZXJ5KHJvb3QsIHNlbGVjdG9yKTtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGVsbSAmJiBjbG9zZXN0KGVsbSwgIi4iICsgQ0xBU1NfUk9PVCkgPT09IHJvb3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8gZWxtIDogdm9pZCAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NlcyhiYXNlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHJldHVybiBbYmFzZSArICItLSIgKyBvcHRpb25zLnR5cGUsIGJhc2UgKyAiLScKICAgICAgICAgICAgICAgICAgICAgICAgYictIiArIG9wdGlvbnMuZGlyZWN0aW9uLCBvcHRpb25zLmRyYWcgJiYgYmFzZSArICItLWRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZ2FibGUiLCBvcHRpb25zLmlzTmF2aWdhdGlvbiAmJiBiYXNlICsgIi0tbmF2IiwgYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgPT09IENMQVNTX1JPT1QgJiYgQ0xBU1NfQUNUSVZFXTtcbiAgfVxuXG4gIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gYXNzaWduKGVsZW1lbnRzLCB7XG4gICAgc2V0dXA6IHNldHVwLFxuICAgIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveVxuICB9KTtcbn1cblxudmFyIFNMSURFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJzbGlkZSI7XG52YXIgTE9PUCA9ICJsb29wIjtcbnZhciBGQURFID0gImZhZGUiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuZnVuY3Rpb24gU2xpZGUkMShTcGxpZGUyLCBpbmRleCwgc2xpZGVJbmRleCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlKSB7XG4gIHZhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIG9uID0gZXZlbnQub24sXG4gICAgICBlbWl0ID0gZXZlbnQuZW1pdCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiaW5kID0gZXZlbnQuYmluZDtcbiAgdmFyIENvbXBvbmVudHMgPSBTcGxpZGUyLkNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzLFxuICAgICAgcm9vdCA9IFNwbGlkZTIucm9vdCxcbiAgICAgIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zID0gU3BsaWRlMi5vcHRpb25zO1xuICB2YXIgaXNOYXZpZ2F0aW9uID0gb3B0aW9ucy5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NOYXZpZ2F0aW9uLFxuICAgICAgdXBkYXRlT25Nb3ZlID0gb3B0aW9ucy51cGRhdGVPbk1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlLFxuICAgICAgaTE4biA9IG9wdGlvbnMuaTE4bixcbiAgICAgIHBhZ2luYXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gb3B0aW9ucy5wYWdpbmF0aW9uLFxuICAgICAgc2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlRm9jdXM7XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gIHZhciBzdHlsZXMgPSBnZXRBdHRyaWJ1dGUoc2xpZGUsICJzdHlsZSIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGxhYmVsID0gZ2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0xBQkVMKTtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0Nsb25lID0gc2xpZGVJbmRleCA+IC0xO1xuICB2YXIgY29udGFpbmVyID0gY2hpbGQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlLCAiLiIgKyBDTEFTU19DT05UQUlORVIpO1xuICB2YXIgZGVzdHJveWVkO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpZiAoIWlzQ2xvbmUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZS5pZCA9IHJvb3QuaWQgKyAiLXNsaWRlIiArIHBhZChpbmRleCArIDEpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgcGFnaW5hdGlvbiA/ICJ0YWJwYW5lbCIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogImdyb3VwIik7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lQVElPTiwgaTE4bi5zbGlkZSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBQkVMLCBsYWJlbCB8fCBmb3JtYXQoaTE4bi5zbGlkZUxhYmVsLCBbaW5kZXggKyAxLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5sZW5ndGhdKSk7XG4gICAgfVxuXG4gICAgbGlzdGVuKCk7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gbGlzdGVuKCkge1xuICAgIGJpbmQoc2xpZGUsICJjbGljayIsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBseShlbWl0LCBFVkVOVF9DTElDSywgc2VsZikpO1xuICAgIGJpbmQoc2xpZGUsICJrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5ZG93biIsIGFwcGx5KGVtaXQsIEVWRU5UX1NMSURFX0tFWURPV04sIHNlbGYpKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb24oW0VWRU5UX01PVkVELCBFVkVOVF9TSElGVEVELCBFVkVOVF9TQ1JPTExFRF0sIHVwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RhdGUpO1xuICAgIG9uKEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgaW5pdE5hdmlnYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKTtcblxuICAgIGlmICh1cGRhdGVPbk1vdmUpIHtcbiAgICAgIG9uKEVWRU5UX01PVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFLCBvbk1vdmUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGRlc3Ryb3llZCA9IHRydWU7XG4gICAgZXZlbnQuZGVzdHJveSgpO1xuICAgIHJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVDbGFzcyhzbGlkZSwgU1RBVFVTX0NMQVNTRVMpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoc2xpZGUsIEFMTF9BVFRSSUJVVEVTKTtcbiAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsICJzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUiLCBzdHlsZXMpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCwgbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhYmVsIHx8ICIiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXROYXZpZ2F0aW9uKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgY29udHJvbHMgPSBTcGxpZGUyLnNwbGlkZXMubWFwKGZ1bmN0aW9uICh0YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0KSB7XG4gICAgICB2YXIgU2xpZGUyID0gdGFyZ2V0LnNwbGlkZS5Db21wb25lbnRzLlMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMuZ2V0QXQoaW5kZXgpO1xuICAgICAgcmV0dXJuIFNsaWRlMiA/IFNsaWRlMi5zbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUuaWQgOiAiIjtcbiAgICB9KS5qb2luKCIgIik7XG4gICAgc2V0QXR0cmlidXRlKHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSwgQVJJQV9MQUJFTCwgZm9ybWF0KGkxOG4uc2xpZGVYLCAoaXNDbG9uZSA/IHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZUluZGV4IDogaW5kZXgpICsgMSkpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ09OVFJPTFMsIGNvbnRyb2xzKTtcbiAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIFJPTEUsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZUZvY3VzID8gImJ1dHRvbiIgOiAiIik7XG4gICAgc2xpZGVGb2N1cyAmJiByZW1vdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlQXR0cmlidXRlKHNsaWRlLCBBUklBX1JPTEVERVNDUklQVElPTik7XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gb25Nb3ZlKCkge1xuICAgIGlmICghZGVzdHJveWVkKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIWRlc3Ryb3llZCkge1xuICAgICAgdmFyIGN1cnIgPSBTcGxpZGUyLmluZGV4OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHVwZGF0ZUFjdGl2aXR5KCk7XG4gICAgICB1cGRhdGVWaXNpYmlsaXR5KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIENMQVNTX1BSRVYsIGluZGV4ID09PSBjdScKICAgICAgICAgICAgICAgICAgICAgICAgYidyciAtIDEpO1xuICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIENMQVNTX05FWFQsIGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0gY3VyciArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0eSgpIHtcbiAgICB2YXIgYWN0aXZlID0gaXNBY3RpdmUoKTtcblxuICAgIGlmIChhYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aXZlICE9PSBoYXNDbGFzcyhzbGlkZSwgQ0xBU1NfQUNUSVZFKSkge1xuICAgICAgdG9nZycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZUNsYXNzKHNsaWRlLCBDTEFTU19BQ1RJVkUsIGFjdGl2ZSk7XG4gICAgICBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHNsaWRlLCBBUklBX0NVUlJFTlQsIGlzTmF2aWdhdGlvbiAmJiBhY3RpdmUgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIiKTtcbiAgICAgIGVtaXQoYWN0aXZlID8gRVZFTlRfQUNUSVZFIDogRVZFTlRfSU5BQ1RJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFLCBzZWxmKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVWaXNpYmlsaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpIHtcbiAgICB2YXIgdmlzaWJsZSA9IGlzVmlzaWJsZSgpO1xuICAgIHZhciBoaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVuID0gIXZpc2libGUgJiYgKCFpc0FjdGl2ZSgpIHx8IGlzQ2xvbmUpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICghU3BsaWRlMi5zdGF0ZS5pcyhbTU9WSU5HLCBTQ1JPTExJTkddKSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9ISURERU4sIGhpZGRlbiB8fCAiIik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIHNldEF0dHJpYnV0ZShxdWVyeUFsbChzbGlkZSwgb3B0aW9ucy5mb2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXNhYmxlTm9kZXMgfHwgIiIpLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogIiIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIGlmIChzbGlkZUZvY3VzKSB7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogMCk7XG4gICAgfVxuXG4gICAgaWYgKHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNpYmxlICE9PSBoYXNDbGFzcyhzbGlkZSwgQ0xBU1NfVklTSUJMRSkpIHtcbiAgICAgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfVklTSUJMRSwgdmlzaWJsZSk7XG4gICAgICBlbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCh2aXNpYmxlID8gRVZFTlRfVklTSUJMRSA6IEVWRU5UX0hJRERFTiwgc2VsZik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGlmICghdmlzaWJsZSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT0gc2xpZGUpIHtcbiAgICAgIHZhciBTbGlkZTIgPSBDb21wb25lbnRzLlNsaWRlcy5nZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXQoU3BsaWRlMi5pbmRleCk7XG4gICAgICBTbGlkZTIgJiYgZm9jdXMoU2xpZGUyLnNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGUkMShwcm9wLCB2YWx1ZSwgdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZUNvbnRhaW5lcikge1xuICAgIHN0eWxlKHVzZUNvbnRhaW5lciAmJiBjb250YWluZXIgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IHNsaWRlLCBwcm9wLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0FjdGl2ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIGN1cnIgPSBTcGxpZGUyLmluZGV4O1xuICAgIHJldHVybiBjdXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInciA9PT0gaW5kZXggfHwgb3B0aW9ucy5jbG9uZVN0YXR1cyAmJiBjdXJyID09PSBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVmlzaWJsZSgpIHtcbiAgICBpZiAoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIuaXMoRkFERSkpIHtcbiAgICAgIHJldHVybiBpc0FjdGl2ZSgpO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgdHJhY2tSZWN0ID0gcmVjdChDb21wb25lbnRzLkVsZW1lbnRzLnRyYWNrKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdmFyIHNsaWRlUmVjdCA9IHJlY3Qoc2xpZGUpO1xuICAgIHZhciBsZWZ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHJlc29sdmUoImxlZnQiLCB0cnVlKTtcbiAgICB2YXIgcmlnaHQgPSByZXNvbHZlKCJyaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQiLCB0cnVlKTtcbiAgICByZXR1cm4gZmxvb3IodHJhY2tSZWN0W2xlZnRdKSA8PSBjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbChzbGlkZVJlY3RbbGVmdF0pICYmIGZsb29yKHNsaWRlUmVjdFtyaWdodF0pIDw9IGNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsKHRyYWNrUmVjdFtyaWdodF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNXaXRoaW4oZicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb20sIGRpc3RhbmNlKSB7XG4gICAgdmFyIGRpZmYgPSBhYnMoZnJvbSAtIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICBpZiAoIWlzQ2xvbmUgJiYgKG9wdGlvbnMucmV3aW5kIHx8IFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLmlzKExPT1ApKSkge1xuICAgICAgZGlmZiA9IG1pbihkaWZmLCBTcGxpZGUyLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ggLSBkaWZmKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlmZiA8PSBkaXN0YW5jZTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICB2YXIgc2VsZiA9IHtcbiAgICBpbmRleDogaW5kZXgsXG4gICAgc2xpZGVJbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXg6IHNsaWRlSW5kZXgsXG4gICAgc2xpZGU6IHNsaWRlLFxuICAgIGNvbnRhaW5lcicKICAgICAgICAgICAgICAgICAgICAgICAgYic6IGNvbnRhaW5lcixcbiAgICBpc0Nsb25lOiBpc0Nsb25lLFxuICAgIG1vdW50OiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc3R5bGU6IHN0eWxlJDEsXG4gICAgaXNXaXRoaW46IGlzV2l0aGluXG4gIH07XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gc2VsZjtcbn1cblxuZnVuY3Rpb24gU2xpZGVzKFNwbGlkZTIsIENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMiA9IEV2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlMi5vbixcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMi5lbWl0LFxuICAgICAgYmluZCA9IF9FdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRJbnRlcmZhY2UyLmJpbmQ7XG5cbiAgdmFyIF9Db21wb25lbnRzMiRFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBDb21wb25lbnRzMi5FbGVtZW50cyxcbiAgICAgIHNsaWRlcyA9IF9Db21wb25lbnRzMicKICAgICAgICAgICAgICAgICAgICAgICAgYickRWxlbWVudHMuc2xpZGVzLFxuICAgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicubGlzdDtcbiAgdmFyIFNsaWRlczIgPSBbXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaW5pdCgpO1xuICAgIG9uKEVWRU5UX1JFRlJFU0gsIGRlc3Ryb3kpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbihFVkVOVF9SRUZSRVNILCBpbml0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZSwgaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICByZWdpc3RlcihzbGlkZSwgaW5kZXgsIC0xKTtcbiAgICB9KTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgU2xpZGUyLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgICBlbXB0eShTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVzMik7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgZm9yRWFjaCQxJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICBTbGlkZTIudXBkYXRlKCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXIoc2xpZGUsIGluZGV4LCBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleCkge1xuICAgIHZhciBvYmplY3QgPSBTbGlkZSQxKFNwbGlkZTIsIGluZGV4LCBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVJbmRleCwgc2xpZGUpO1xuICAgIG9iamVjdC5tb3VudCgpO1xuICAgIFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicyLnB1c2gob2JqZWN0KTtcbiAgICBTbGlkZXMyLnNvcnQoZnVuY3Rpb24gKFNsaWRlMSwgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMikge1xuICAgICAgcmV0dXJuIFNsaWRlMS5pbmRleCAtIFNsaWRlMi5pbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3g7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXQoZXhjbHVkZUNsb25lcykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gZXhjbHVkZUNsb25lcyA/IGZpbHRlcihmdW5jdGlvbiAoU2xpZGUyKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgcmV0dXJuICFTbGlkZTIuaXNDbG9uZTtcbiAgICB9KSA6IFNsaWRlczInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SW4ocGFnZSkge1xuICAgIHZhciBDb250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXI7XG4gICAgdmFyIGluZGV4ID0gQ29udHJvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXIudG9JbmRleChwYWdlKTtcbiAgICB2YXIgbWF4ID0gQ29udHJvbGxlci5oYXNGb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYicoKSA/IDEgOiBvcHRpb25zLnBlclBhZ2U7XG4gICAgcmV0dXJuIGZpbHRlcihmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKFNsaWRlMikge1xuICAgICAgcmV0dXJuIGJldHdlZW4oU2xpZGUyLmluZGV4LCBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGluZGV4ICsgbWF4IC0gMSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoaW5kZXgpIHtcbiAgICByZXR1cm4gZmlsdGVyKGluZGV4KVswXTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBhZGQoaXRlbXMsIGluZGV4KSB7XG4gICAgZm9yRWFjaChpdGVtcywgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIChzbGlkZSkge1xuICAgICAgaWYgKGlzU3RyaW5nKHNsaWRlKSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc2xpZGUgPSBwYXJzZUh0bWwoc2xpZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzSFRNTEVsZW1lbnQoc2xpZGUpKSB7XG4gICAgICAgIHZhciByZWYgPSBzbGlkZXNbaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4XTtcbiAgICAgICAgcmVmID8gYmVmb3JlKHNsaWRlLCByZWYpIDogYXBwZW5kKGxpc3QsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGlkZSk7XG4gICAgICAgIGFkZENsYXNzKHNsaWRlLCBvcHRpb25zLmNsYXNzZXMuc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlKTtcbiAgICAgICAgb2JzZXJ2ZUltYWdlcyhzbGlkZSwgYXBwbHkoZW1pdCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFU0laRSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGVtaXQoRVZFTlRfUkVGUkVTSCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlJDEobWF0Y2hlcikge1xuICAgIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoZmlsdGVyKG1hdGNoZXIpLm1hcChmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIFNsaWRlMi5zbGlkZTtcbiAgICB9KSk7XG4gICAgZW1pdChFVkVOVF9SRUZSRVNIJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JFYWNoJDEoaXRlcmF0ZWUsIGV4Y2x1ZGVDbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVzKSB7XG4gICAgZ2V0KGV4Y2x1ZGVDbG9uZXMpLmZvckVhY2goaXRlcmF0ZWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbHRlcihtYXRjaGVyKSB7XG4gICAgcmV0dXJuIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMyLmZpbHRlcihpc0Z1bmN0aW9uKG1hdGNoZXIpID8gbWF0Y2hlciA6IGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAoU2xpZGUyKSB7XG4gICAgICByZXR1cm4gaXNTdHJpbmcobWF0Y2hlcikgPyBtYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyhTbGlkZTIuc2xpZGUsIG1hdGNoZXIpIDogaW5jbHVkZXModG9BcnJheShtYXRjaGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksIFNsaWRlMi5pbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvcCwgdmFsdWUsIHVzZUNvbnRhaW5lcikge1xuICAgIGZvckVhY2gkMShmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFNsaWRlMikge1xuICAgICAgU2xpZGUyLnN0eWxlKHByb3AsIHZhbHVlLCB1c2VDb250YWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9ic2VydmVJbWFnZXMoZWxtLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FsbGJhY2spIHtcbiAgICB2YXIgaW1hZ2VzID0gcXVlcnlBbGwoZWxtLCAiaW1nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIpO1xuICAgIHZhciBsZW5ndGggPSBpbWFnZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidndGgpIHtcbiAgICAgIGltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGJpbmQoaW1nLCAibG9hZCBlcnJvciIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCEgLS1sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGVuZ3RoKGV4Y2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWRlQ2xvbmVzKSB7XG4gICAgcmV0dXJuIGV4Y2x1ZGVDbG9uZXMgPyBzbGlkZXMubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCA6IFNsaWRlczIubGVuZ3RoO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFbm91Z2goKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJldHVybiBTbGlkZXMyLmxlbmd0aCA+IG9wdGlvbnMucGVyUGFnZTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSxcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICByZWdpc3RlcjogcmVnaXN0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIGdldDogZ2V0LFxuICAgIGdldEluOiBnZXRJbixcbiAgICBnZXRBdDogZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0LFxuICAgIGFkZDogYWRkLFxuICAgIHJlbW92ZTogcmVtb3ZlJDEsXG4gICAgZm9yRScKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2g6IGZvckVhY2gkMSxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICBzdHlsZTogcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlLFxuICAgIGdldExlbmd0aDogZ2V0TGVuZ3RoLFxuICAgIGlzRW5vdWdoOiBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidFbm91Z2hcbiAgfTtcbn1cblxuZnVuY3Rpb24gTGF5b3V0KFNwbGlkZTIsIENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMyA9IEV2ZW50SW50ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlMy5vbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMy5iaW5kLFxuICAgICAgZW1pdCA9IF9FdmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UzLmVtaXQ7XG5cbiAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXM7XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzMiA9IENvbXBvbmVudHMyLkVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnJvb3QsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdHJhY2sgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnRyYWNrLFxuICAgICAgbGlzdCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBfQ29tcG9uZW50czIkRWxlbWVudHMyLmxpc3Q7XG4gIHZhciBnZXRBdCA9IFNsaWRlcy5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXQsXG4gICAgICBzdHlsZVNsaWRlcyA9IFNsaWRlcy5zdHlsZTtcbiAgdmFyIHZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0aWNhbDtcbiAgdmFyIHJvb3RSZWN0O1xuICB2YXIgb3ZlcmZsb3c7XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgICBiaW5kKHdpbmRvdywgInJlc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInemUgbG9hZCIsIFRocm90dGxlKGFwcGx5KGVtaXQsIEVWRU5UX1JFU0laRSkpKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCBpbml0KTtcbiAgICBvbihFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfUkVTSVpFLCByZXNpemUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmVydGljYWwgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gVFRCO1xuICAgIHN0eWxlKHJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LCAibWF4V2lkdGgiLCB1bml0KG9wdGlvbnMud2lkdGgpKTtcbiAgICBzdHlsZSh0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJlc29sdmUoInBhZGRpbmdMZWZ0IiksIGNzc1BhZGRpbmcoZmFsc2UpKTtcbiAgICBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUodHJhY2ssIHJlc29sdmUoInBhZGRpbmdSaWdodCIpLCBjc3NQYWRkaW5nKHRydWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgcmVzaXplKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplKGZvcmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgIHZhciBuZXdSZWN0ID0gcmVjdChyb290KTtcblxuICAgIGlmIChmb3JjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgfHwgcm9vdFJlY3Qud2lkdGggIT09IG5ld1JlY3Qud2lkdGggfHwgcm9vdFJlY3QuaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCAhPT0gbmV3UmVjdC5oZWlnaHQpIHtcbiAgICAgIHN0eWxlKHRyYWNrLCAiaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCIsIGNzc1RyYWNrSGVpZ2h0KCkpO1xuICAgICAgc3R5bGVTbGlkZXMocmVzb2x2ZSgibWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmdpblJpZ2h0IiksIHVuaXQob3B0aW9ucy5nYXApKTtcbiAgICAgIHN0eWxlU2xpZGVzKCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInd2lkdGgiLCBjc3NTbGlkZVdpZHRoKCkpO1xuICAgICAgc3R5bGVTbGlkZXMoImhlaWdodCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBjc3NTbGlkZUhlaWdodCgpLCB0cnVlKTtcbiAgICAgIHJvb3RSZWN0ID0gbmV3UmVjdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0KEVWRU5UX1JFU0laRUQpO1xuXG4gICAgICBpZiAob3ZlcmZsb3cgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyE9PSAob3ZlcmZsb3cgPSBpc092ZXJmbG93KCkpKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhyb290LCBDTEFTU19PVkVSRkxPVywgb3ZlcmZsb3cpO1xuICAgICAgICBlbWl0KEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19PVkVSRkxPVywgb3ZlcmZsb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjc3NQYWRkaW5nKHJpZ2h0KSB7XG4gICAgdmFyIHBhZGRpbmcgPSBvcHRpb25zLnBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RkaW5nO1xuICAgIHZhciBwcm9wID0gcmVzb2x2ZShyaWdodCA/ICJyaWdodCIgOiAibGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiKTtcbiAgICByZXR1cm4gcGFkZGluZyAmJiB1bml0KHBhZGRpbmdbcHJvcF0gfHwgKGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09iamVjdChwYWRkaW5nKSA/IDAgOiBwYWRkaW5nKSkgfHwgIjBweCI7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gY3NzVHJhY2tIZWlnaHQoKSB7XG4gICAgdmFyIGhlaWdodCA9ICIiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgaGVpZ2h0ID0gY3NzSGVpZ2h0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgYXNzZXJ0KGhlaWdodCwgImhlaWdodCBvciBoZWlnaHRSYXRpbyBpcyBtaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzc2luZy4iKTtcbiAgICAgIGhlaWdodCA9ICJjYWxjKCIgKyBoZWlnaHQgKyAiIC0gIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NQYWRkaW5nKGZhbHNlKSArICIgLSAiICsgY3NzUGFkZGluZyh0cnVlKSArICIpIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc0hlaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQoKSB7XG4gICAgcmV0dXJuIHVuaXQob3B0aW9ucy5oZWlnaHQgfHwgcmVjdChsaXN0KScKICAgICAgICAgICAgICAgICAgICAgICAgYicud2lkdGggKiBvcHRpb25zLmhlaWdodFJhdGlvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NTbGlkZVdpZHRoKCkge1xuICAgIHJldHVybiBvcHRpb25zLmF1dG9XaWR0aCA/IG51bGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDogdW5pdChvcHRpb25zLmZpeGVkV2lkdGgpIHx8ICh2ZXJ0aWNhbCA/ICIiIDogY3NzUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlU2l6ZSgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlSGVpZ2h0KCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gdW5pdChvcHRpb25zLmZpeGVkSGVpZ2h0KSB8fCAodmVydGljYWwgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5hdXRvSGVpZ2h0ID8gbnVsbCA6IGNzc1NsaWRlU2l6ZSgpIDogY3NzSGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodCgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlU2l6ZSgpIHtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCA9IHVuaXQob3B0aW9ucy5nYXApO1xuICAgIHJldHVybiAiY2FsYygoMTAwJSIgKyAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCAmJiAiICsgIiArIGdhcCkgKyAiKS8iICsgKG9wdGlvbnMucGVyUGFnZSB8fCAxKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyAoZ2FwICYmICIgLSAiICsgZ2FwKSArICIpIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0U2l6ZSgpIHtcbiAgICByZXR1cm4gcmVjdChsaXN0KVtyZXNvbHZlKCJ3aWR0aCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKV07XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZVNpemUoaW5kZXgsIHdpdGhvdXRHYXApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIFNsaWRlID0gZ2V0QXQoaW5kZXggfHwgMCk7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZSA/IHJlY3QoU2xpZGUuc2xpZGUpW3Jlc29sdmUoIndpZHRoIildICsgKHdpdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0R2FwID8gMCA6IGdldEdhcCgpKSA6IDA7XG4gIH1cblxuICBmdW5jdGlvbiB0b3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xTaXplKGluZGV4LCB3aXRob3V0R2FwKSB7XG4gICAgdmFyIFNsaWRlID0gZ2V0QXQoaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4KTtcblxuICAgIGlmIChTbGlkZSkge1xuICAgICAgdmFyIHJpZ2h0ID0gcmVjdChTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUuc2xpZGUpW3Jlc29sdmUoInJpZ2h0IildO1xuICAgICAgdmFyIGxlZnQgPSByZWN0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0KVtyZXNvbHZlKCJsZWZ0IildO1xuICAgICAgcmV0dXJuIGFicyhyaWdodCAtIGxlZicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KSArICh3aXRob3V0R2FwID8gMCA6IGdldEdhcCgpKTtcbiAgICB9XG5cbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZXJTaXplKHdpdGhvdXRHYXApIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIHRvdGFsU2l6ZShTcGxpZGUyLmxlbmd0aCAtIDEpIC0gdG90YWxTaXplJwogICAgICAgICAgICAgICAgICAgICAgICBiJygwKSArIHNsaWRlU2l6ZSgwLCB3aXRob3V0R2FwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRHYXAoKSB7XG4gICAgdmFyIFNsaWRlID0gZ2V0QXQoMCk7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZSAmJiBwYXJzZUZsb2F0KHN0eWxlKFNsaWRlLnNsaWRlLCByZXNvbHZlKCJtYXJnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luUmlnaHQiKSkpIHx8IDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQYWRkaW5nKHJpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlKHRyYWNrLCByZXNvbHZlKCJwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZGluZyIgKyAocmlnaHQgPyAiUmlnaHQiIDogIkxlZnQiKSkpKSB8fCAwO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIGlzT3ZlcmZsb3coKSB7XG4gICAgcmV0dXJuIFNwbGlkZTIuaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzKEZBREUpIHx8IHNsaWRlclNpemUodHJ1ZSkgPiBsaXN0U2l6ZSgpO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIHJlc2l6ZTogcmVzaXplLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsaXN0U2l6ZTogbGlzdFNpemUsXG4gICAgc2xpZGVTaXplOiBzbGlkZVNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIHNsaWRlclNpemU6IHNsaWRlclNpemUsXG4gICAgdG90YWxTaXplOiB0b3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxTaXplLFxuICAgIGdldFBhZGRpbmc6IGdldFBhZGRpbmcsXG4gICAgaXNPdmVyZmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3c6IGlzT3ZlcmZsb3dcbiAgfTtcbn1cblxudmFyIE1VTFRJUExJRVIgPSAyO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gQ2xvbmVzKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgdmFyIG9uID0gZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm9uO1xuICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtZW50cyxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG4gIHZhciByZXNvbHZlID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICB2YXIgY2xvbmVzID0gW107XG4gIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgY2xvbmVDb3VudDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBvbihFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUkVGUkVTSCwgcmVtb3VudCk7XG4gICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NJWkVdLCBvYnNlcnZlKTtcblxuICAgIGlmIChjbG9uZUNvdW50ID0gY29tcHV0ZUNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZUNvdW50KCkpIHtcbiAgICAgIGdlbmVyYXRlKGNsb25lQ291bnQpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyLkxheW91dC5yZXNpemUodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHJlbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICAgIG1vdW50KCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICByZW1vdmUoY2xvbmVzKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1wdHkoY2xvbmVzKTtcbiAgICBldmVudC5kZXN0cm95KCk7XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gb2JzZXJ2ZSgpIHtcbiAgICB2YXIgY291bnQgPSBjb21wdXRlQ2xvbmVDb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcblxuICAgIGlmIChjbG9uZUNvdW50ICE9PSBjb3VudCkge1xuICAgICAgaWYgKGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZUNvdW50IDwgY291bnQgfHwgIWNvdW50KSB7XG4gICAgICAgIGV2ZW50LmVtaXQoRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFRlJFU0gpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmF0ZShjb3VudCkge1xuICAgIHZhciBzbGlkZXMgPSBTbGlkZXMuZ2V0KCkuc2xpY2UoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIGxlbmd0aCA9IHNsaWRlcy5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgd2hpbGUgKHNsaWRlcy5sZW5ndGggPCBjb3VudCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcHVzaChzbGlkZXMsIHNsaWRlcyk7XG4gICAgICB9XG5cbiAgICAgIHB1c2goc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcy5zbGljZSgtY291bnQpLCBzbGlkZXMuc2xpY2UoMCwgY291bnQpKS5mb3JFYWNoKGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAoU2xpZGUsIGluZGV4KSB7XG4gICAgICAgIHZhciBpc0hlYWQgPSBpbmRleCA8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb3VudDtcbiAgICAgICAgdmFyIGNsb25lID0gY2xvbmVEZWVwKFNsaWRlLnNsaWRlLCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgpO1xuICAgICAgICBpc0hlYWQgPyBiZWZvcmUoY2xvbmUsIHNsaWRlc1swXS5zbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIDogYXBwZW5kKEVsZW1lbnRzLmxpc3QsIGNsb25lKTtcbiAgICAgICAgcHVzaChjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLCBjbG9uZSk7XG4gICAgICAgIFNsaWRlcy5yZWdpc3RlcihjbG9uZSwgaW5kZXggLSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgKyAoaXNIZWFkID8gMCA6IGxlbmd0aCksIFNsaWRlLmluZGV4KTtcbiAgICAgIH0pJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZURlZXAoZWxtLCBpbmRleCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgY2xvbmUgPSBlbG0uY2xvbmVOb2RlKHRydWUpO1xuICAgIGFkZENsYXNzKGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZSwgb3B0aW9ucy5jbGFzc2VzLmNsb25lKTtcbiAgICBjbG9uZS5pZCA9IFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvb3QuaWQgKyAiLWNsb25lIiArIHBhZChpbmRleCArIDEpO1xuICAgIHJldHVybiBjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlQ2xvbmVDb3VudCgpIHtcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsb25lczIgPSBvcHRpb25zLmNsb25lcztcblxuICAgIGlmICghU3BsaWRlMi5pcygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTE9PUCkpIHtcbiAgICAgIGNsb25lczIgPSAwO1xuICAgIH0gZWxzZSBpZiAoaXNVbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZpbmVkKGNsb25lczIpKSB7XG4gICAgICB2YXIgZml4ZWRTaXplID0gb3B0aW9uc1tyZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2x2ZSgiZml4ZWRXaWR0aCIpXSAmJiBDb21wb25lbnRzMi5MYXlvdXQuc2xpZGVTaXplKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwKTtcbiAgICAgIHZhciBmaXhlZENvdW50ID0gZml4ZWRTaXplICYmIGNlaWwocmVjdChFbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMudHJhY2spW3Jlc29sdmUoIndpZHRoIildIC8gZml4ZWRTaXplKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbG9uZXMyID0gZml4ZWRDb3VudCB8fCBvcHRpb25zW3Jlc29sdmUoImF1dG9XaWR0aCIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ10gJiYgU3BsaWRlMi5sZW5ndGggfHwgb3B0aW9ucy5wZXJQYWdlICogTVVMVElQTElFUjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lczI7XG4gIH1cblxuICByZXR1cm4ge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveVxuICB9O1xufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gTW92ZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19FdmVudEludGVyZmFjZTQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF9FdmVudEludGVyZmFjZTQub24sXG4gICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzQuZW1pdDtcblxuICB2YXIgc2V0ID0gU3BsaWRlMi5zdGF0ZS5zZXQ7XG4gIHZhciBfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyJExheW91dCA9IENvbXBvbmVudHMyLkxheW91dCxcbiAgICAgIHNsaWRlUycKICAgICAgICAgICAgICAgICAgICAgICAgYidpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnNsaWRlU2l6ZSxcbiAgICAgIGdldFBhZGRpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnID0gX0NvbXBvbmVudHMyJExheW91dC5nZXRQYWRkaW5nLFxuICAgICAgdG90YWxTaXplICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IF9Db21wb25lbnRzMiRMYXlvdXQudG90YWxTaXplLFxuICAgICAgbGlzdFNpemUgPSBfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyJExheW91dC5saXN0U2l6ZSxcbiAgICAgIHNsaWRlclNpemUgPSBfQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMyJExheW91dC5zbGlkZXJTaXplO1xuICB2YXIgX0NvbXBvbmVudHMyJERpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbyA9IENvbXBvbmVudHMyLkRpcmVjdGlvbixcbiAgICAgIHJlc29sdmUgPSBfQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyJERpcmVjdGlvLnJlc29sdmUsXG4gICAgICBvcmllbnQgPSBfQ29tcG9uZW50czIkRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcmVjdGlvLm9yaWVudDtcbiAgdmFyIF9Db21wb25lbnRzMiRFbGVtZW50czMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuRWxlbWVudHMsXG4gICAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMycKICAgICAgICAgICAgICAgICAgICAgICAgYicubGlzdCxcbiAgICAgIHRyYWNrID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMy50cmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s7XG4gIHZhciBUcmFuc2l0aW9uO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2l0aW9uID0gQ29tcG9uZW50czIuVHJhbnNpdGlvbjtcbiAgICBvbihbRVZFTlRfTU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVU5URUQsIEVWRU5UX1JFU0laRUQsIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVwb3NpdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiByZXBvc2l0aW9uKCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIUNvbXBvbmVudHMyLkNvbnRyb2xsZXIuaXNCdXN5KCkpIHtcbiAgICAgIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMi5TY3JvbGwuY2FuY2VsKCk7XG4gICAgICBqdW1wKFNwbGlkZTIuaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIENvbXBvbmVudHMyLlNsaWRlcy51cGRhdGUoKTtcbiAgICB9XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gbW92ZShkZXN0LCBpbmRleCwgcHJldiwgY2FsbGJhY2spIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKGRlc3QgIT09IGluZGV4ICYmIGNhblNoaWZ0KGRlc3QgPiBwcmV2KSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGNhbmNlbCgpO1xuICAgICAgdHJhbnNsYXRlKHNoaWZ0KGdldFBvc2l0aW9uKCksICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0ID4gcHJldiksIHRydWUpO1xuICAgIH1cblxuICAgIHNldChNT1ZJTkcpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0KEVWRU5UX01PVkUsIGluZGV4LCBwcmV2LCBkZXN0KTtcbiAgICBUcmFuc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zdGFydChpbmRleCwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0KElETEUpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVtaXQoRVZFTlRfTU9WRUQsIGluZGV4LCBwcmV2LCBkZXN0KTtcbiAgICAgIGNhbGxiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjayAmJiBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24ganVtcCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXgpIHtcbiAgICB0cmFuc2xhdGUodG9Qb3NpdGlvbihpbmRleCwgdHJ1ZSkpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZShwb3NpdGlvbiwgcHJldmVudExvb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgaWYgKCFTcGxpZGUyLmlzKEZBREUpKSB7XG4gICAgICB2YXIgZGVzdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aW9uID0gcHJldmVudExvb3AgPyBwb3NpdGlvbiA6IGxvb3AocG9zaXRpb24pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHN0eWxlKGxpc3QsICJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlIiArIHJlc29sdmUoIicKICAgICAgICAgICAgICAgICAgICAgICAgYidYIikgKyAiKCIgKyBkZXN0aW5hdGlvbiArICJweCkiKTtcbiAgICAgIHBvc2l0aW9uICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdGluYXRpb24gJiYgZW1pdChFVkVOVF9TSElGVEVEKTtcbiAgICB9XG4gIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gbG9vcChwb3NpdGlvbikge1xuICAgIGlmIChTcGxpZGUyLmlzKExPT1ApJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIGluZGV4ID0gdG9JbmRleChwb3NpdGlvbik7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGV4Y2VlZGVkTWF4ID0gaW5kZXggPiBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmQoKTtcbiAgICAgIHZhciBleGNlZWRlZE1pbiA9IGluZGV4IDwgMDtcblxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChleGNlZWRlZE1pbiB8fCBleGNlZWRlZE1heCkge1xuICAgICAgICBwb3NpdGlvbiA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzaGlmdChwb3NpdGlvbiwgZXhjZWVkZWRNYXgpO1xuICAgICAgfVxuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBzaGlmdChwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sIGJhY2t3YXJkcykge1xuICAgIHZhciBleGNlc3MgPSBwb3NpdGlvbiAtIGdldExpbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhiYWNrd2FyZHMpO1xuICAgIHZhciBzaXplID0gc2xpZGVyU2l6ZSgpO1xuICAgIHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbiAtPSBvcmllbnQoc2l6ZSAqIChjZWlsKGFicyhleGNlc3MpIC8gc2l6ZSkgfHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDEpKSAqIChiYWNrd2FyZHMgPyAxIDogLTEpO1xuICAgIHJldHVybiBwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgdHJhbnNsYXRlKGdldFBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbigpLCB0cnVlKTtcbiAgICBUcmFuc2l0aW9uLmNhbmNlbCgpO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIHRvSW5kZXgocG9zaXRpb24pIHtcbiAgICB2YXIgU2xpZGVzID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLlNsaWRlcy5nZXQoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNsaWRlSW5kZXggPSBTbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW2ldLmluZGV4O1xuICAgICAgdmFyIGRpc3RhbmNlID0gYWJzKHRvUG9zaXRpb24oc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXgsIHRydWUpIC0gcG9zaXRpb24pO1xuXG4gICAgICBpZiAoZGlzdGFuY2UgPD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1pbkRpc3RhbmNlKSB7XG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBpbmRleCA9IHNsaWRlSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIGZ1bmN0aW9uIHRvUG9zaXRpb24oaW5kZXgsIHRyaW1taW5nKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBwb3NpdGlvbiA9IG9yaWVudCh0b3RhbFNpemUoaW5kZXggLSAxKSAtIG9mZnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoaW5kZXgpKTtcbiAgICByZXR1cm4gdHJpbW1pbmcgPyB0cmltKHBvc2l0aW9uKSA6IHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKCkge1xuICAgIHZhciBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmdCA9IHJlc29sdmUoImxlZnQiKTtcbiAgICByZXR1cm4gcmVjdChsaXN0KVtsZWZ0XSAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZWN0KHRyYWNrKVtsZWZ0XSArIG9yaWVudChnZXRQYWRkaW5nKGZhbHNlKSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gdHJpbShwb3NpdGlvbikge1xuICAgIGlmIChvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cmltU3BhY2UgJiYgU3BsaWRlMi5pcyhTTElERSkpIHtcbiAgICAgIHBvc2l0aW9uID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYW1wKHBvc2l0aW9uLCAwLCBvcmllbnQoc2xpZGVyU2l6ZSh0cnVlKSAtIGxpc3RTaXonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG9mZnNldChpbmRleCkge1xuICAgIHZhciBmb2N1cyA9IG9wdGlvbnMuZm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHJldHVybiBmb2N1cyA9PT0gImNlbnRlciIgPyAobGlzdFNpemUoKSAtIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZVNpemUoaW5kZXgsIHRydWUpKSAvIDIgOiArZm9jdXMgKiBzbGlkZVNpemUoaW5kZXgpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid8fCAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGltaXQobWF4KSB7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0b1Bvc2l0aW9uKG1heCA/IENvbXBvbmVudHMyLkNvbnRyb2xsZXIuZ2V0RW5kKCkgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCwgISFvcHRpb25zLnRyaW1TcGFjZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5TaGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoYmFja3dhcmRzKSB7XG4gICAgdmFyIHNoaWZ0ZWQgPSBvcmllbnQoc2hpZnQoZ2V0UG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKCksIGJhY2t3YXJkcykpO1xuICAgIHJldHVybiBiYWNrd2FyZHMgPyBzaGlmdGVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA+PSAwIDogc2hpZnRlZCA8PSBsaXN0W3Jlc29sdmUoInNjcm9sbFdpZHRoIildIC0gcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3QodHJhY2spW3Jlc29sdmUoIndpZHRoIildO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkTGltaXQobWF4LCBwb3NpdGlvbikge1xuICAgIHBvc2l0aW9uID0gaXNVbmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKHBvc2l0aW9uKSA/IGdldFBvc2l0aW9uKCkgOiBwb3NpdGlvbjtcbiAgICB2YXIgZXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkTWluID0gbWF4ICE9PSB0cnVlICYmIG9yaWVudChwb3NpdGlvbikgPCBvcmllbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGdldExpbWl0KGZhbHNlKSk7XG4gICAgdmFyIGV4Y2VlZGVkTWF4ID0gbWF4ICE9PSBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgJiYgb3JpZW50KHBvc2l0aW9uKSA+IG9yaWVudChnZXRMaW1pdCh0cnVlKSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBleGNlZWRlZE1pbiB8fCBleGNlZWRlZE1heDtcbiAgfVxuXG4gIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBtb3ZlOiBtb3ZlLFxuICAgIGp1bXA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidqdW1wLFxuICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICAgIHNoaWZ0OiBzaGlmdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgY2FuY2VsOiBjYW5jZWwsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9Qb3NpdGlvbjogdG9Qb3NpdGlvbixcbiAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIGdldExpbWl0OiBnZXRMaW1pdCxcbiAgICBleGNlZWRlZExpbWl0OiBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWRMaW1pdCxcbiAgICByZXBvc2l0aW9uOiByZXBvc2l0aW9uXG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBDb250cm9sbGVyKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgX0V2ZW50SW50ZXJmYWNlNSA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNS5vbixcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlNS5lbWl0O1xuXG4gIHZhciBNb3ZlID0gQ29tcG9uZW50czIuTW92ZTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBnZXRQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24sXG4gICAgICBnZXRMaW1pdCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBNb3ZlLmdldExpbWl0LFxuICAgICAgdG9Qb3NpdGlvbiA9IE1vdmUudG9Qb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb247XG4gIHZhciBfQ29tcG9uZW50czIkU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyxcbiAgICAgIGlzRW5vdWdoID0gX0NvbXBvbmVudHMyJFNsaWRlcy5pc0Vub3VnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2gsXG4gICAgICBnZXRMZW5ndGggPSBfQ29tcG9uZW50czIkU2xpZGVzLmdldExlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7XG4gIHZhciBvbWl0RW5kID0gb3B0aW9ucy5vbWl0RW5kO1xuICB2YXIgaXNMb28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncCA9IFNwbGlkZTIuaXMoTE9PUCk7XG4gIHZhciBpc1NsaWRlID0gU3BsaWRlMi5pcyhTTEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInREUpO1xuICB2YXIgZ2V0TmV4dCA9IGFwcGx5KGdldEFkamFjZW50LCBmYWxzZSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgZ2V0UHJldiA9IGFwcGx5KGdldEFkamFjZW50LCB0cnVlKTtcbiAgdmFyIGN1cnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXggPSBvcHRpb25zLnN0YXJ0IHx8IDA7XG4gIHZhciBlbmRJbmRleDtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBwcmV2SW5kZXggPSBjdXJySW5kZXg7XG4gIHZhciBzbGlkZUNvdW50O1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBlck1vdmU7XG4gIHZhciBwZXJQYWdlO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpbml0KCk7XG4gICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9FTkRfSU5ERVhfQ0hBTkdFRF0sIGluaXQpO1xuICAgIG9uKEVWRU5UX1JFU0laRUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvblJlc2l6ZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBzbGlkZUNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCA9IGdldExlbmd0aCh0cnVlKTtcbiAgICBwZXJNb3ZlID0gb3B0aW9ucy5wZXJNb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgIGVuZEluZGV4ID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEVuZCgpO1xuICAgIHZhciBpbmRleCA9IGNsYW1wKGN1cnJJbmRleCwgMCwgb21pdEVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgPyBlbmRJbmRleCA6IHNsaWRlQ291bnQgLSAxKTtcblxuICAgIGlmIChpbmRleCAhJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09IGN1cnJJbmRleCkge1xuICAgICAgY3VyckluZGV4ID0gaW5kZXg7XG4gICAgICBNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZS5yZXBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25SZXNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCgpIHtcbiAgICBpZiAoZW5kSW5kZXggIT09IGdldEVuZCgpKSB7XG4gICAgICBlbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGdvKGNvbnRyb2wsIGFsbG93U2FtZUluZGV4LCBjYWxsYmFjaykge1xuICAgIGlmICghaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzQnVzeSgpKSB7XG4gICAgICB2YXIgZGVzdCA9IHBhcnNlKGNvbnRyb2wpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBpbmRleCA9IGxvb3AoZGVzdCk7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xICcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJiAoYWxsb3dTYW1lSW5kZXggfHwgaW5kZXggIT09IGN1cnJJbmRleCkpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldEluZGV4KGluZGV4KTtcbiAgICAgICAgTW92ZS5tb3ZlKGRlc3QsIGluZGV4LCBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldkluZGV4LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHNuYXAsIGNhbGxiYWNrKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIENvbXBvbmVudHMyLlNjcm9sbC5zY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hcCwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGluZGV4ID0gbG9vcChNb3ZlLnRvSW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4KGdldFBvc2l0aW9uKCkpKTtcbiAgICAgIHNldEluZGV4KG9taXRFbmQgPyBtaW4oaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4LCBlbmRJbmRleCkgOiBpbmRleCk7XG4gICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlKGNvbnRyb2wpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGluZGV4ID0gY3VyckluZGV4O1xuXG4gICAgaWYgKGlzU3RyaW5nKGNvbnRyb2wpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIF9yZWYgPSBjb250cm9sLm1hdGNoKC8oWytcXC08Pl0pKFxcZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicrKT8vKSB8fCBbXSxcbiAgICAgICAgICBpbmRpY2F0b3IgPSBfcmVmWzFdLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBudW1iZXIgPSBfcmVmWzJdO1xuXG4gICAgICBpZiAoaW5kaWNhdG9yID09PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgIisiIHx8IGluZGljYXRvciA9PT0gIi0iKSB7XG4gICAgICAgIGluZGV4ID0gY29tcHV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidEZXN0SW5kZXgoY3VyckluZGV4ICsgKygiIiArIGluZGljYXRvciArICgrbnVtYmVyIHx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxKSksIGN1cnJJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKGluZGljYXRvciA9PT0gIj4iJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICBpbmRleCA9IG51bWJlciA/IHRvSW5kZXgoK251bWJlcikgOiBnZXROJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dCh0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kaWNhdG9yID09PSAiPCIpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGluZGV4ID0gZ2V0UHJldih0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlIHtcbiAgICAgIGluZGV4ID0gaXNMb29wID8gY29udHJvbCA6IGNsYW1wKGNvbnRyb2wsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwLCBlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIGdldEFkamFjZW50KHByZXYsIGRlc3RpbmF0aW9uKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBudW1iZXIgPSBwZXJNb3ZlIHx8IChoYXNGb2N1cygpID8gMSA6IHBlclBhZ2UpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZGVzdCA9IGNvbXB1dGVEZXN0SW5kZXgoY3VyckluZGV4ICsgbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIChwcmV2ID8gLTEgOiAxKSwgY3VyckluZGV4LCAhKHBlck1vdmUgfHwgaGFzRm9jdXMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykpKTtcblxuICAgIGlmIChkZXN0ID09PSAtMSAmJiBpc1NsaWRlKSB7XG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKCFhcHByb3hpbWF0ZWx5RXF1YWwoZ2V0UG9zaXRpb24oKSwgZ2V0TGltaXQoIXByZXYpJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgMSkpIHtcbiAgICAgICAgcmV0dXJuIHByZXYgPyAwIDogZW5kSW5kZXg7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZXN0aW5hdGlvbiA/IGRlc3QgOiBsb29wKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVEZXN0SW5kZXgoZGVzdCwgZnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb20sIHNuYXBQYWdlKSB7XG4gICAgaWYgKGlzRW5vdWdoKCkgfHwgaGFzRm9jdXMoKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIHZhciBpbmRleCA9IGNvbXB1dGVNb3ZhYmxlRGVzdEluZGV4KGRlc3QpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKGluZGV4ICE9PSBkZXN0KSB7XG4gICAgICAgIGZyb20gPSBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcbiAgICAgICAgZGVzdCA9IGluZGV4O1xuICAgICAgICBzbmFwUGFnZSA9IGZhbHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlc3QgPCAwIHx8IGRlc3QgPiBlbmRJbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gpIHtcbiAgICAgICAgaWYgKCFwZXJNb3ZlICYmIChiZXR3ZWVuKDAsIGRlc3QsIGZyb20sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cnVlKSB8fCBiZXR3ZWVuKGVuZEluZGV4LCBmcm9tLCBkZXN0LCB0cnVlKSkpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgZGVzdCA9IHRvSW5kZXgodG9QYWdlKGRlc3QpKTtcbiAgICAgICAgfSBlbHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgICAgaWYgKGlzTG9vcCkge1xuICAgICAgICAgICAgZGVzdCA9IHNuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwUGFnZSA/IGRlc3QgPCAwID8gLShzbGlkZUNvdW50ICUgcGVyUGFnZSB8fCBwZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkgOiBzbGlkZUNvdW50IDogZGVzdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnJld2luZCkge1xuICAgICAgICAgICAgZGVzdCA9IGRlc3QgPCAwID8gZW5kSW5kZXggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVzdCA9IC0xO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzbicKICAgICAgICAgICAgICAgICAgICAgICAgYidhcFBhZ2UgJiYgZGVzdCAhPT0gZnJvbSkge1xuICAgICAgICAgIGRlc3QgPSB0b0luZGV4KCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0b1BhZ2UoZnJvbSkgKyAoZGVzdCA8IGZyb20gPyAtMSA6IDEpKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVzdCA9IC0xO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICByZXR1cm4gZGVzdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVNb3ZhYicKICAgICAgICAgICAgICAgICAgICAgICAgYidsZURlc3RJbmRleChkZXN0KSB7XG4gICAgaWYgKGlzU2xpZGUgJiYgb3B0aW9ucy50cmltUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwYWNlID09PSAibW92ZSIgJiYgZGVzdCAhPT0gY3VyckluZGV4KSB7XG4gICAgICB2YXIgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uID0gZ2V0UG9zaXRpb24oKTtcblxuICAgICAgd2hpbGUgKHBvc2l0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0gdG9Qb3NpdGlvbihkZXN0LCB0cnVlKSAmJiBiZXR3ZWVuKGRlc3QsIDAsIFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLmxlbmd0aCAtIDEsICFvcHRpb25zLnJld2luZCkpIHtcbiAgICAgICAgZGVzdCA8IGN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JySW5kZXggPyAtLWRlc3QgOiArK2Rlc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBkZXN0O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9vcChpbmRleCkge1xuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gaXNMb29wID8gKGluZGV4ICsgc2xpZGVDb3VudCkgJSBzbGlkZUNvdW50IHx8IDAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogaW5kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRFbmQoKSB7XG4gICAgdmFyIGVuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBzbGlkZUNvdW50IC0gKGhhc0ZvY3VzKCkgfHwgaXNMb29wICYmIHBlck1vdmUgPyAxICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHBlclBhZ2UpO1xuXG4gICAgd2hpbGUgKG9taXRFbmQgJiYgZW5kLS0gPiAwKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKHRvUG9zaXRpb24oc2xpZGVDb3VudCAtIDEsIHRydWUpICE9PSB0b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihlbmQsIHRydWUpKSB7XG4gICAgICAgIGVuZCsrO1xuICAgICAgICBicmVhaycKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYW1wKGVuZCwgMCwgc2xpZGVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgLSAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSW5kZXgocGFnZSkge1xuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gY2xhbXAoaGFzRm9jdXMoKSA/IHBhZ2UgOiBwZXJQYWdlICogcGFnZSwgMCwgZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZEluZGV4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvUGFnZShpbmRleCkge1xuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gaGFzRm9jdXMoKSA/IG1pbihpbmRleCwgZW5kSW5kZXgpIDogZmxvb3IoKGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCA+PSBlbmRJbmRleCA/IHNsaWRlQ291bnQgLSAxIDogaW5kZXgpIC8gcGVyUGFnZSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gdG9EZXN0KGRlc3RpbmF0aW9uKSB7XG4gICAgdmFyIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zZXN0ID0gTW92ZS50b0luZGV4KGRlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gaXNTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPyBjbGFtcChjbG9zZXN0LCAwLCBlbmRJbmRleCkgOiBjbG9zZXN0O1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIHNldEluZGV4KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ICE9PSBjdXJySScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KSB7XG4gICAgICBwcmV2SW5kZXggPSBjdXJySW5kZXg7XG4gICAgICBjdXJySScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SW5kZXgocHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YpIHtcbiAgICByZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJbmRleDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBoYXNGb2N1cygpIHtcbiAgICByZXR1cm4gIWlzVW5kZWZpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZChvcHRpb25zLmZvY3VzKSB8fCBvcHRpb25zLmlzTmF2aWdhdGlvbjtcbiAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBpc0J1c3koKSB7XG4gICAgcmV0dXJuIFNwbGlkZTIuc3RhdGUuaXMoW00nCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1ZJTkcsIFNDUk9MTElOR10pICYmICEhb3B0aW9ucy53YWl0Rm9yVHJhbnNpdGlvbjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBnbzogZ28sXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNjcm9sbDogc2Nyb2xsLFxuICAgIGdldE5leHQ6IGdldE5leHQsXG4gICAgZ2V0UHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXY6IGdldFByZXYsXG4gICAgZ2V0QWRqYWNlbnQ6IGdldEFkamFjZW50LFxuICAgIGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRFbmQ6IGdldEVuZCxcbiAgICBzZXRJbmRleDogc2V0SW5kZXgsXG4gICAgZ2V0SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4OiBnZXRJbmRleCxcbiAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgIHRvUGFnZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvUGFnZSxcbiAgICB0b0Rlc3Q6IHRvRGVzdCxcbiAgICBoYXNGb2N1czogaGFzRm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3VzLFxuICAgIGlzQnVzeTogaXNCdXN5XG4gIH07XG59XG5cbnZhciBYTUxfTkFNRV9TUEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO1xudmFyIFBBVEggPSAibTE1LjUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAuOTMyLTQuMyA0LjM4IDE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAxNC42LTE0LicKICAgICAgICAgICAgICAgICAgICAgICAgYic2IDQuNC00LjMtNC40LTQuNC0xNC42LTE0LjZ6IjtcbnZhciBTSVpFID0gNDA7XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBBcnJvd3MoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24gPSBldmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24sXG4gICAgICBiaW5kID0gZXZlbnQuYmluZCxcbiAgICAgIGVtaXQgPSBldmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1pdDtcbiAgdmFyIGNsYXNzZXMgPSBvcHRpb25zLmNsYXNzZXMsXG4gICAgICBpMTgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9wdGlvbnMuaTE4bjtcbiAgdmFyIEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzLFxuICAgICAgQ29udHJvbGxlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5hcnJvd3MsXG4gICAgICB0cmFjayA9IEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50cy50cmFjaztcbiAgdmFyIHdyYXBwZXIgPSBwbGFjZWhvbGRlcjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBwcmV2ID0gRWxlbWVudHMucHJldjtcbiAgdmFyIG5leHQgPSBFbGVtZW50cy5uZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dDtcbiAgdmFyIGNyZWF0ZWQ7XG4gIHZhciB3cmFwcGVyQ2xhc3NlcztcbiAgdmFyIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvd3MgPSB7fTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9uKEVWRU5UX1VQREFURUQsIHJlbW91bnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICAgIG1vdW50KCk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMuYXJyb3dzOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIGlmIChlbmFibGVkICYmICEocHJldiAmJiBuZXh0KSkge1xuICAgICAgY3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWF0ZUFycm93cygpO1xuICAgIH1cblxuICAgIGlmIChwcmV2ICYmIG5leHQpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBhc3NpZ24oYXJyb3dzLCB7XG4gICAgICAgIHByZXY6IHByZXYsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXh0OiBuZXh0XG4gICAgICB9KTtcbiAgICAgIGRpc3BsYXkod3JhcHBlciwgZW5hYicKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWQgPyAiIiA6ICJub25lIik7XG4gICAgICBhZGRDbGFzcyh3cmFwcGVyLCB3cmFwcGVyQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMgPSBDTEFTU19BUlJPV1MgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcblxuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgbGlzdGVuKCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB1cGRhdGUoKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKFtwcmV2LCBuZXh0XSwgQVJJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ09OVFJPTFMsIHRyYWNrLmlkKTtcbiAgICAgICAgZW1pdChFVkVOVF9BUlJPV1NfTU9VTicKICAgICAgICAgICAgICAgICAgICAgICAgYidURUQsIHByZXYsIG5leHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95KCkge1xuICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICByZW1vdmVDbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgYicod3JhcHBlciwgd3JhcHBlckNsYXNzZXMpO1xuXG4gICAgaWYgKGNyZWF0ZWQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZW1vdmUocGxhY2Vob2xkZXIgPyBbcHJldiwgbmV4dF0gOiB3cmFwcGVyKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBwcmV2ID0gbmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVBdHRyaWJ1dGUoW3ByZXYsIG5leHRdLCBBTExfQVRUUklCVVRFUyk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpc3RlbigpIHtcbiAgICBvbihbRVZFTlRfTU9VTlRFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QsIEVWRU5UX01PVkVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9TQ1JPTExFRCwgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0VORF9JTkRFWF9DSEFOR0VEXSwgdXBkYXRlKTtcbiAgICBiaW5kKG5leHQsICJjbGljayInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhcHBseShnbywgIj4iKSk7XG4gICAgYmluZChwcmV2LCAiY2xpY2siLCBhcHBseShnbywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICI8IikpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ28oY29udHJvbCkge1xuICAgIENvbnRybycKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGVyLmdvKGNvbnRyb2wsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm93cygpIHtcbiAgICB3cmFwcGVyID0gcGxhY2Vob2xkZXIgfHwgY3JlYXRlKCJkaXYiLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhc3Nlcy5hcnJvd3MpO1xuICAgIHByZXYgPSBjcmVhdGVBcnJvdyh0cnVlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbmV4dCA9IGNyZWF0ZUFycm93KGZhbHNlKTtcbiAgICBjcmVhdGVkID0gdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgYXBwZW5kKHdyYXBwZXIsIFtwcmV2LCBuZXh0XSk7XG4gICAgIXBsYWNlaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbGRlciAmJiBiZWZvcmUod3JhcHBlciwgdHJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNyZWF0ZUFycm93KHByZXYyKSB7XG4gICAgdmFyIGFycm93ID0gIjxidXR0b24gY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIiIgKyBjbGFzc2VzLmFycm93ICsgIiAiICsgKHByZXYyID8gY2xhc3Nlcy5wcmV2IDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsYXNzZXMubmV4dCkgKyAiXFwiIHR5cGU9XFwiYnV0dG9uXFwiPjxzdmcgeG1sbnM9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcIiIgKyBYTUxfTkFNRV9TUEFDRSArICJcXCIgdmlld0JveD1cXCIwIDAgIiArIFNJWicKICAgICAgICAgICAgICAgICAgICAgICAgYidFICsgIiAiICsgU0laRSArICJcXCIgd2lkdGg9XFwiIiArIFNJWkUgKyAiXFwiIGhlaWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaHQ9XFwiIiArIFNJWkUgKyAiXFwiIGZvY3VzYWJsZT1cXCJmYWxzZVxcIj48cGF0aCBkPScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXCIiICsgKG9wdGlvbnMuYXJyb3dQYXRoIHx8IFBBVEgpICsgIlxcIiAvPiI7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBwYXJzZUh0bWwoYXJyb3cpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICB2YXIgaW5kZXggPSBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlMi5pbmRleDtcbiAgICAgIHZhciBwcmV2SW5kZXggPSBDb250cm9sbGVyLmdldFByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2KCk7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gQ29udHJvbGxlci5nZXROZXh0KCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgdmFyIHByZXZMYWJlbCA9IHByZXZJbmRleCA+IC0xICYmIGluZGV4IDwgcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZJbmRleCA/IGkxOG4ubGFzdCA6IGkxOG4ucHJldjtcbiAgICAgIHZhciBuZXh0TGFiZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbmV4dEluZGV4ID4gLTEgJiYgaW5kZXggPiBuZXh0SW5kZXggPyBpMThuLmZpcnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IGkxOG4ubmV4dDtcbiAgICAgIHByZXYuZGlzYWJsZWQgPSBwcmV2SW5kZXggPCAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIG5leHQuZGlzYWJsZWQgPSBuZXh0SW5kZXggPCAwO1xuICAgICAgc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGFiZWwpO1xuICAgICAgc2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZShuZXh0LCBBUklBX0xBQkVMLCBuZXh0TGFiZWwpO1xuICAgICAgZW1pdChFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQVJST1dTX1VQREFURUQsIHByZXYsIG5leHQsIHByZXZJbmRleCwgbmV4dEluZGV4KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhcnJvd3M6IGFycm93cyxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogdXBkYXRlXG4gIH07XG59XG5cbnZhciBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidEQVRBX0FUVFJJQlVURSArICItaW50ZXJ2YWwiO1xuXG5mdW5jdGlvbiBBdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYicoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2U2ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2U2Lm9uLFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTYuYmluZCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlNi5lbWl0O1xuXG4gIHZhciBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwob3B0aW9ucy5pbnRlcnZhbCwgU3BsaWRlMi5nby5iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZChTcGxpZGUyLCAiPiIpLCBvbkFuaW1hdGlvbkZyYW1lKTtcbiAgdmFyIGlzUGF1c2VkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGludGVydmFsLmlzUGF1c2VkO1xuICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudHMsXG4gICAgICBfQ29tcG9uZW50czIkRWxlbWVudHM0ID0gQ29tcG9uZW50czIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzLFxuICAgICAgcm9vdCA9IF9Db21wb25lbnRzMiRFbGVtZW50czQucm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QsXG4gICAgICB0b2dnbGUgPSBfQ29tcG9uZW50czIkRWxlbWVudHM0LnRvZ2dsZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBhdXRvcGxheSA9IG9wdGlvbnMuYXV0b3BsYXk7XG4gIHZhciBob3ZlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZDtcbiAgdmFyIGZvY3VzZWQ7XG4gIHZhciBzdG9wcGVkID0gYXV0b3BsYXkgPT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicicGF1c2UiO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmIChhdXRvcGxheSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGxpc3RlbigpO1xuICAgICAgdG9nZ2xlICYmIHNldEF0dHJpYnV0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9nZ2xlLCBBUklBX0NPTlRST0xTLCBFbGVtZW50cy50cmFjay5pZCk7XG4gICAgICBzdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlZCB8fCBwbGF5KCk7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gbGlzdGVuKCkge1xuICAgIGlmIChvcHRpb25zLnBhdXNlT25Ib3ZlcikgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGJpbmQocm9vdCwgIm1vdXNlZW50ZXIgbW91c2VsZWF2ZSIsIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkge1xuICAgICAgICBob3ZlcmVkID0gZS50eXBlID09PSAibW91c2VlbnRlciI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBhdXRvVG9nZ2xlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMucGF1c2VPbkZvY3VzKSB7XG4gICAgICBiaW5kKHJvb3QsICJmb2N1c2luIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1c291dCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGZvY3VzZWQgPSBlLnR5cGUgPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAiZm9jdXNpbiI7XG4gICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgIH0pO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBpZiAodG9nZ2xlKSB7XG4gICAgICBiaW5kKHRvZ2dsZSwgImNsaWNrIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3RvcHBlZCA/IHBsYXkoKSA6IHBhdXNlKHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uKFtFVkVOVF9NT1ZFLCBFVkVOVF9TQycKICAgICAgICAgICAgICAgICAgICAgICAgYidST0xMLCBFVkVOVF9SRUZSRVNIXSwgaW50ZXJ2YWwucmV3aW5kKTtcbiAgICBvbihFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfTU9WRSwgb25Nb3ZlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYXkoKSB7XG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhpc1BhdXNlZCgpICYmIENvbXBvbmVudHMyLlNsaWRlcy5pc0Vub3VnaCgpKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaW50ZXJ2YWwuc3RhcnQoIW9wdGlvbnMucmVzZXRQcm9ncmVzcyk7XG4gICAgICBmb2N1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlZCA9IGhvdmVyZWQgPSBzdG9wcGVkID0gZmFsc2U7XG4gICAgICB1cGRhdGUoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0KEVWRU5UX0FVVE9QTEFZX1BMQVkpO1xuICAgIH1cbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBwYXVzZShzdG9wKSB7XG4gICAgaWYgKHN0b3AgPT09IHZvaWQgMCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHN0b3AgPSB0cnVlO1xuICAgIH1cblxuICAgIHN0b3BwZWQgPSAhIXN0b3A7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHVwZGF0ZSgpO1xuXG4gICAgaWYgKCFpc1BhdXNlZCgpKSB7XG4gICAgICBpbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ2YWwucGF1c2UoKTtcbiAgICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUEFVU0UpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdXRvVG9nZ2xlKCkge1xuICAgIGlmICghcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0b3BwZWQpIHtcbiAgICAgIGhvdmVyZWQgfHwgZm9jdXNlZCA/IHBhdXNlKGZhbHNlKSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGF5KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgYicodG9nZ2xlKSB7XG4gICAgICB0b2dnbGVDbGFzcyh0b2dnbGUsIENMQVNTX0FDVElWRSwgIScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdG9wcGVkKTtcbiAgICAgIHNldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUFfTEFCRUwsIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmkxOG5bc3RvcHBlZCA/ICJwbGF5IiA6ICJwYXVzZSJdKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZShyYXRlKSB7XG4gICAgdmFyIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgPSBFbGVtZW50cy5iYXI7XG4gICAgYmFyICYmIHN0eWxlKGJhciwgIndpZHRoIiwgcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUgKiAxMDAgKyAiJSIpO1xuICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUExBWUlORywgcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Nb3ZlKGluZGV4KSB7XG4gICAgdmFyIFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSA9IENvbXBvbmVudHMyLlNsaWRlcy5nZXRBdChpbmRleCk7XG4gICAgaW50ZXJ2YWwucycKICAgICAgICAgICAgICAgICAgICAgICAgYidldChTbGlkZSAmJiArZ2V0QXR0cmlidXRlKFNsaWRlLnNsaWRlLCBJTlRFUlZBTF9EQVRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19BVFRSSUJVVEUpIHx8IG9wdGlvbnMuaW50ZXJ2YWwpO1xuICB9XG5cbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGludGVydmFsLmNhbmNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgcGxheTogcGxheSxcbiAgICBwYXVzZTogcGF1c2UsXG4gICAgaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpc1BhdXNlZFxuICB9O1xufVxuXG5mdW5jdGlvbiBDb3ZlcihTcGxpZGUyLCBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTcgPSBFdmVudEludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTcub247JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmIChvcHRpb25zLmNvdmVyKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgb24oRVZFTlRfTEFaWUxPQURfTE9BREVELCBhcHBseSh0b2dnbGUsIHRydWUpKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUicKICAgICAgICAgICAgICAgICAgICAgICAgYidFU0hdLCBhcHBseShjb3ZlciwgdHJ1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb3Zlcihjb3ZlcjIpIHtcbiAgICBDb21wb25lbnRzMi5TbGlkZXMuZm9yRWFjaChmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gKFNsaWRlKSB7XG4gICAgICB2YXIgaW1nID0gY2hpbGQoU2xpZGUuY29udGFpbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCBTbGlkZS5zbGlkZSwgImltZyIpO1xuXG4gICAgICBpZiAoaW1nICYmIGltZy5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JjKSB7XG4gICAgICAgIHRvZ2dsZShjb3ZlcjIsIGltZywgU2xpZGUpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZShjb3ZlcjIsIGltZywgU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlKSB7XG4gICAgU2xpZGUuc3R5bGUoImJhY2tncm91bmQiLCBjb3ZlcjIgPyAiY2VudGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci9jb3ZlciBuby1yZXBlYXQgdXJsKFxcIiIgKyBpbWcuc3JjICsgIlxcIikiIDogIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0cnVlKTtcbiAgICBkaXNwbGF5KGltZywgY292ZXIyID8gIm5vbmUiIDogIiIpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBseShjb3ZlciwgZmFsc2UpXG4gIH07XG59XG5cbnZhciBCT1VOQ0VfRElGRl9USFJFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NIT0xEID0gMTA7XG52YXIgQk9VTkNFX0RVUkFUSU9OID0gNjAwO1xudmFyIEZSSUNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTl9GQUNUT1IgPSAwLjY7XG52YXIgQkFTRV9WRUxPQ0lUWSA9IDEuNTtcbnZhciBNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lOX0RVUkFUSU9OID0gODAwO1xuXG5mdW5jdGlvbiBTY3JvbGwoU3BsaWRlMiwgQ29tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U4ID0gRXZlbnRJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U4Lm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbixcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U4LmVtaXQ7XG5cbiAgdmFyIHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBTcGxpZGUyLnN0YXRlLnNldDtcbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIGdldFBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbiAgICAgIGdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RMaW1pdCA9IE1vdmUuZ2V0TGltaXQsXG4gICAgICBleGNlZWRlZExpbWl0ID0gTW92ZS5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hjZWVkZWRMaW1pdCxcbiAgICAgIHRyYW5zbGF0ZSA9IE1vdmUudHJhbnNsYXRlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGlzU2xpZGUgPSBTcGxpZGUyLmlzKFNMSURFKTtcbiAgdmFyIGludGVydmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbDtcbiAgdmFyIGNhbGxiYWNrO1xuICB2YXIgZnJpY3Rpb24gPSAxO1xuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBtb3VudCgpIHtcbiAgICBvbihFVkVOVF9NT1ZFLCBjbGVhcik7XG4gICAgb24oWycKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIXSwgY2FuY2VsKTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBzY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCBvblNjcm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCwgbm9Db25zdHJhaW4pIHtcbiAgICB2YXIgZnJvbSA9IGdldFBvc2l0aW9uKCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGNsZWFyKCk7XG5cbiAgICBpZiAoc25hcCAmJiAoIWlzU2xpZGUgfHwgIWV4YycKICAgICAgICAgICAgICAgICAgICAgICAgYidlZWRlZExpbWl0KCkpKSB7XG4gICAgICB2YXIgc2l6ZSA9IENvbXBvbmVudHMyLkxheW91dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xpZGVyU2l6ZSgpO1xuICAgICAgdmFyIG9mZnNldCA9IHNpZ24oZGVzdGluYXRpb24pICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIHNpemUgKiBmbG9vcihhYnMoZGVzdGluYXRpb24pIC8gc2l6ZSkgfHwgMDtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0aW5hdGlvbiA9IE1vdmUudG9Qb3NpdGlvbihDb21wb25lbnRzMi5Db250cm9sbGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50b0Rlc3QoZGVzdGluYXRpb24gJSBzaXplKSkgKyBvZmZzZXQ7XG4gICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBub0Rpc3RhbmNlID0gYXBwcm94aW1hdGVseUVxdWFsKGZyb20sIGRlc3RpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiwgMSk7XG4gICAgZnJpY3Rpb24gPSAxO1xuICAgIGR1cmF0aW9uID0gbm9EaXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2UgPyAwIDogZHVyYXRpb24gfHwgbWF4KGFicyhkZXN0aW5hdGlvbiAtIGZyb20pIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEJBU0VfVkVMT0NJVFksIE1JTl9EVVJBVElPTik7XG4gICAgY2FsbGJhY2sgPSBvblNjcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGxlZDtcbiAgICBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiwgb25FbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhcHBseSh1cGRhdGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cmFpbiksIDEpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzZXQoU0NST0xMSU5HKTtcbiAgICBlbWl0KEVWRU5UX1NDUk9MTCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGludGVydmFsLnN0YXJ0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVuZCgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0KElETEUpO1xuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfU0NST0xMRUQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKGZyb20sIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbywgbm9Db25zdHJhaW4sIHJhdGUpIHtcbiAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24oKTtcbiAgICB2YXIgdGFyZ2V0ID0gZnJvbSArICh0byAtIGZyb20pICogZWFzaW5nKHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlKTtcbiAgICB2YXIgZGlmZiA9ICh0YXJnZXQgLSBwb3NpdGlvbikgKiBmcmljdGlvbjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdHJhbnNsYXRlKHBvc2l0aW9uICsgZGlmZik7XG5cbiAgICBpZiAoaXNTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgJiYgIW5vQ29uc3RyYWluICYmIGV4Y2VlZGVkTGltaXQoKSkge1xuICAgICAgZnJpY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uICo9IEZSSUNUSU9OX0ZBQ1RPUjtcblxuICAgICAgaWYgKGFicyhkaWZmKSA8IEJPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VOQ0VfRElGRl9USFJFU0hPTEQpIHtcbiAgICAgICAgc2Nyb2xsKGdldExpbWl0KGV4Y2VlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZExpbWl0KHRydWUpKSwgQk9VTkNFX0RVUkFUSU9OLCBmYWxzZSwgY2FsbGJhY2ssIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhcigpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgaWYgKGludGVydmFsKSB7XG4gICAgICBpbnRlcnZhbC5jYW5jZWwoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmIChpbnRlcnZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgJiYgIWludGVydmFsLmlzUGF1c2VkKCkpIHtcbiAgICAgIGNsZWFyKCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb25FbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlYXNpbmcodCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgZWFzaW5nRnVuYyA9IG9wdGlvbnMuZWFzaW5nRnVuYztcbiAgICByZXR1cm4gZWFzaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZ0Z1bmMgPyBlYXNpbmdGdW5jKHQpIDogMSAtIE1hdGgucG93KDEgLSB0LCA0KTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBjbGVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsXG4gICAgc2Nyb2xsOiBzY3JvbGwsXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbnZhciBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyA9IHtcbiAgcGFzc2l2ZTogZmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlLFxuICBjYXB0dXJlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBEcmFnKFNwbGlkZTIsIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlOSA9IEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlOS5vbiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlOS5lbWl0LFxuICAgICAgYmluZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBfRXZlbnRJbnRlcmZhY2U5LmJpbmQsXG4gICAgICB1bmJpbmQgPSBfRXZlbnRJbnRlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlOS51bmJpbmQ7XG5cbiAgdmFyIHN0YXRlID0gU3BsaWRlMi5zdGF0ZTtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBNb3ZlID0gQ29tcG9uZW50czIuTW92ZSxcbiAgICAgIFNjcm9sbCA9IENvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5TY3JvbGwsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsXG4gICAgICB0cmFjayA9IENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJlZHVjZSA9IENvbXBvbmVudHMyLk1lZGlhLnJlZHVjZTtcbiAgdmFyIF9Db21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIkRGlyZWN0aW8yID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLFxuICAgICAgcmVzb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8yLnJlc29sdmUsXG4gICAgICBvcmllbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0NvbXBvbmVudHMyJERpcmVjdGlvMi5vcmllbnQ7XG4gIHZhciBnZXRQb3NpdGlvbiA9IE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgZXhjZWVkZWRMaW1pdCA9IE1vdmUuZXhjZWVkZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTGltaXQ7XG4gIHZhciBiYXNlUG9zaXRpb247XG4gIHZhciBiYXNlRXZlbnQ7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgcHJldkJhc2VFdmVudDtcbiAgdmFyIGlzRnJlZTtcbiAgdmFyIGRyYWdnaW5nO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGV4Y2VlZGVkID0gZmFsc2U7XG4gIHZhciBjbGlja1ByZXZlbnRlZDtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBkaXNhYmxlZDtcbiAgdmFyIHRhcmdldDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYmluZCh0cmFjaywgUE9JTlRFUl9NT1ZFX0VWRU5UUywgbm9vcCwgU0NST0xMX0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVNURU5FUl9PUFRJT05TKTtcbiAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX1VQX0VWRU5UUywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5vb3AsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICBiaW5kKHRyYWNrLCBQT0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRFUl9ET1dOX0VWRU5UUywgb25Qb2ludGVyRG93biwgU0NST0xMX0xJU1RFTkVSX09QVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJT05TKTtcbiAgICBiaW5kKHRyYWNrLCAiY2xpY2siLCBvbkNsaWNrLCB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FwdHVyZTogdHJ1ZVxuICAgIH0pO1xuICAgIGJpbmQodHJhY2ssICJkcmFnc3RhcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwgcHJldmVudCk7XG4gICAgb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1VQREFURURdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5pdCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBkcmFnID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMuZHJhZztcbiAgICBkaXNhYmxlKCFkcmFnKTtcbiAgICBpc0ZyZWUgPSBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZyA9PT0gImZyZWUiO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGVyRG93bihlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIGNsaWNrUHJldmVudGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIWRpc2FibGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCkge1xuICAgICAgdmFyIGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQoZSk7XG5cbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoaXNEcmFnZ2FibGUoZS50YXJnZXQpICYmIChpc1RvdWNoIHx8ICFlLmJ1dHRvbiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIGlmICghQ29udHJvbGxlci5pc0J1c3koKSkge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB0YXJnZXQgPSBpc1RvdWNoID8gdHJhY2sgOiB3aW5kb3c7XG4gICAgICAgICAgZHJhZ2cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nID0gc3RhdGUuaXMoW01PVklORywgU0NST0xMSU5HXSk7XG4gICAgICAgICAgcHJldkInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNlRXZlbnQgPSBudWxsO1xuICAgICAgICAgIGJpbmQodGFyZ2V0LCBQT0lOVEVSX01PVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0VWRU5UUywgb25Qb2ludGVyTW92ZSwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBiaW5kKHRhcmdldCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uUG9pbnRlclVwLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgICAgIE1vdmUuY2FuY2VsJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgICAgICAgIFNjcm9sbC5jYW5jZWwoKTtcbiAgICAgICAgICBzYXZlKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2ZW50KGUsIHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUG9pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidNb3ZlKGUpIHtcbiAgICBpZiAoIXN0YXRlLmlzKERSQUdHSU5HKSkge1xuICAgICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlLnNldChEUkFHR0lORyk7XG4gICAgICBlbWl0KEVWRU5UX0RSQUcpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBpZiAoZS5jYW5jZWxhYmxlKSB7XG4gICAgICBpZiAoZHJhZ2dpbmcpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIE1vdmUudHJhbnNsYXRlKGJhc2VQb3NpdGlvbiArIGNvbnN0cmFpbihkaWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZkNvb3JkKGUpKSk7XG4gICAgICAgIHZhciBleHBpcmVkID0gZGlmZlRpbWUoZSkgPiBMT0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0lOVEVSVkFMO1xuICAgICAgICB2YXIgaGFzRXhjZWVkZWQgPSBleGNlZWRlZCAhPT0gKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGNlZWRlZCA9IGV4Y2VlZGVkTGltaXQoKSk7XG5cbiAgICAgICAgaWYgKGV4cGlyZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IGhhc0V4Y2VlZGVkKSB7XG4gICAgICAgICAgc2F2ZShlKTtcbiAgICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBjbGlja1ByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgIGVtaXQoRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0RSQUdHSU5HKTtcbiAgICAgICAgcHJldmVudChlKTtcbiAgICAgIH0gZWxzZSBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGlzU2xpZGVyRGlyZWN0aW9uKGUpKSB7XG4gICAgICAgIGRyYWdnaW5nID0gc2hvdWxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1N0YXJ0KGUpO1xuICAgICAgICBwcmV2ZW50KGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBvblBvaW50ZXJVcChlKSB7XG4gICAgaWYgKHN0YXRlLmlzKERSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHR0lORykpIHtcbiAgICAgIHN0YXRlLnNldChJRExFKTtcbiAgICAgIGVtaXQoRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0RSQUdHRUQpO1xuICAgIH1cblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgbW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoZSk7XG4gICAgICBwcmV2ZW50KGUpO1xuICAgIH1cblxuICAgIHVuYmluZCh0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBQT0lOVEVSX01PVkVfRVZFTlRTLCBvblBvaW50ZXJNb3ZlKTtcbiAgICB1bmJpbmQodCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uUG9pbnRlclVwKTtcbiAgICBkcmFnZ2luZycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgIGlmICghJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc2FibGVkICYmIGNsaWNrUHJldmVudGVkKSB7XG4gICAgICBwcmV2ZW50KGUsIHRydWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlKGUpIHtcbiAgICBwcmV2QmFzZUV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCA9IGJhc2VFdmVudDtcbiAgICBiYXNlRXZlbnQgPSBlO1xuICAgIGJhc2VQb3NpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gPSBnZXRQb3NpdGlvbigpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZShlKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciB2ZWxvY2l0eSA9IGNvbXB1dGVWZWxvY2l0eShlKTtcbiAgICB2YXIgZGVzdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aW9uID0gY29tcHV0ZURlc3RpbmF0aW9uKHZlbG9jaXR5KTtcbiAgICB2YXIgcmV3aW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCA9IG9wdGlvbnMucmV3aW5kICYmIG9wdGlvbnMucmV3aW5kQnlEcmFnO1xuICAgIHJlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoZmFsc2UpO1xuXG4gICAgaWYgKGlzRnJlZSkge1xuICAgICAgQ29udHJvbGxlci5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nyb2xsKGRlc3RpbmF0aW9uLCAwLCBvcHRpb25zLnNuYXApO1xuICAgIH0gZWxzZSBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIuaXMoRkFERSkpIHtcbiAgICAgIENvbnRyb2xsZXIuZ28ob3JpZW50KHNpZ24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbG9jaXR5KSkgPCAwID8gcmV3aW5kID8gIjwiIDogIi0iIDogcmV3aW5kID8gIj4iIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInICIrIik7XG4gICAgfSBlbHNlIGlmIChTcGxpZGUyLmlzKFNMSURFKSAmJiBleGNlZWRlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgcmV3aW5kKSB7XG4gICAgICBDb250cm9sbGVyLmdvKGV4Y2VlZGVkTGltaXQodHJ1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gIj4iIDogIjwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29udHJvbGxlci5nbygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29udHJvbGxlci50b0Rlc3QoZGVzdGluYXRpb24pLCB0cnVlKTtcbiAgICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmVkdWNlKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkU3RhcnQoZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgdGhyZXNob2xkcyA9IG9wdGlvbnMuZHJhZ01pblRocmVzaG9sZDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGlzT2JqID0gaXNPYmplY3QodGhyZXNob2xkcyk7XG4gICAgdmFyIG1vdXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGlzT2JqICYmIHRocmVzaG9sZHMubW91c2UgfHwgMDtcbiAgICB2YXIgdG91Y2ggPSAoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzT2JqID8gdGhyZXNob2xkcy50b3VjaCA6ICt0aHJlc2hvbGRzKSB8fCAxMDtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gKGlzVG91Y2hFdmVudChlKSA/IHRvdWNoIDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdXNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU2xpZGVyRGlyZWN0aW9uKGUpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gYWJzKGRpZmZDb29yZChlLCB0cnVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZVZlbG9jaXR5KGUpIHtcbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIuaXMoTE9PUCkgfHwgIWV4Y2VlZGVkKSB7XG4gICAgICB2YXIgdGltZSA9IGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZmVGltZShlKTtcblxuICAgICAgaWYgKHRpbWUgJiYgdGltZSA8IExPR19JTlRFUlZBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0wpIHtcbiAgICAgICAgcmV0dXJuIGRpZmZDb29yZChlKSAvIHRpbWU7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VEZXN0aW5hdGlvbih2ZWxvY2l0eSkge1xuICAgIHJldHVybiBnZXRQb3NpdGlvbigpICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpZ24odmVsb2NpdHkpICogbWluKGFicyh2ZWxvY2l0eSkgKiAob3B0aW9ucy5mbGlja1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3dlciB8fCA2MDApLCBpc0ZyZWUgPyBJbmZpbml0eSA6IENvbXBvbmVudHMyLkxheW91dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicubGlzdFNpemUoKSAqIChvcHRpb25zLmZsaWNrTWF4UGFnZXMgfHwgMSkpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIGRpZmZDb29yZChlLCBvcnRob2dvbmFsKSB7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiBjb29yZE9mKGUsIG9ydGhvZ29uYWwpIC0gY29vcmRPZihnZXRCYXNlRXZlbnQoZSksJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcnRob2dvbmFsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpZmZUaW1lKGUpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRpbWVPZihlKSAtIHRpbWVPZihnZXRCYXNlRXZlbnQoZSkpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIGdldEJhc2VFdmVudChlKSB7XG4gICAgcmV0dXJuIGJhc2VFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgPT09IGUgJiYgcHJldkJhc2VFdmVudCB8fCBiYXNlRXZlbnQ7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gY29vcmRPZihlLCBvcnRob2dvbmFsKSB7XG4gICAgcmV0dXJuIChpc1RvdWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50KGUpID8gZS5jaGFuZ2VkVG91Y2hlc1swXSA6IGUpWyJwYWdlIiArIHJlc29sdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG9ydGhvZ29uYWwgPyAiWSIgOiAiWCIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhaW4oZGlmZikge1xuICAgIHJldHVybiBkaWZmIC8gKGV4Y2VlZGVkICYmIFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKFNMSURFKSA/IEZSSUNUSU9OIDogMSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0RyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2FibGUodGFyZ2V0Mikge1xuICAgIHZhciBub0RyYWcgPSBvcHRpb25zLm5vRHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2c7XG4gICAgcmV0dXJuICFtYXRjaGVzKHRhcmdldDIsICIuIiArIENMQVNTX1BBR0lOQVRJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09OX1BBR0UgKyAiLCAuIiArIENMQVNTX0FSUk9XKSAmJiAoIW5vRHJhZyB8fCAhbWF0Y2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXModGFyZ2V0Miwgbm9EcmFnKSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1RvdWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIFRvdWNoRXZlbnQgIT09ICJ1bmRlZmluZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBlIGluc3RhbmNlb2YgVG91Y2hFdmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYWdnaW5nKCkge1xuICAgIHJldHVybiBkcmFnZ2luZztcbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkaXNhYmxlKHZhbHVlKSB7XG4gICAgZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkaXNhYmxlOiBkaXNhYmxlLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpc0RyYWdnaW5nOiBpc0RyYWdnaW5nXG4gIH07XG59XG5cbnZhciBOT1JNQUxJWkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVElPTl9NQVAgPSB7XG4gIFNwYWNlYmFyOiAiICIsXG4gIFJpZ2h0OiBBUlJPV19SSUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSFQsXG4gIExlZnQ6IEFSUk9XX0xFRlQsXG4gIFVwOiBBUlJPV19VUCxcbiAgRG93bjogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FSUk9XX0RPV05cbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAga2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkua2V5O1xuICByZXR1cm4gTk9STUFMSVonCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVRJT05fTUFQW2tleV0gfHwga2V5O1xufVxuXG52YXIgS0VZQk9BUkRfRVZFTlQgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tleWRvd24iO1xuXG5mdW5jdGlvbiBLZXlib2FyZChTcGxpZGUyLCBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTEwID0gRXZlbnRJbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxMC5vbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMTAuYmluZCxcbiAgICAgIHVuYmluZCA9IF9FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UxMC51bmJpbmQ7XG5cbiAgdmFyIHJvb3QgPSBTcGxpZGUyLnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290O1xuICB2YXIgcmVzb2x2ZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgdmFyIHRhcmdldDtcbiAgdmFyIGRpc2FibGVkO1xuXG4gIGZ1bmN0aW9uIG1vdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpIHtcbiAgICBpbml0KCk7XG4gICAgb24oRVZFTlRfVVBEQVRFRCwgZGVzdHJveScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIG9uKEVWRU5UX1VQREFURUQsIGluaXQpO1xuICAgIG9uKEVWRU5UX01PVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFLCBvbk1vdmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIga2V5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JvYXJkID0gb3B0aW9ucy5rZXlib2FyZDtcblxuICAgIGlmIChrZXlib2FyZCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHRhcmdldCA9IGtleWJvYXJkID09PSAiZ2xvYmFsIiA/IHdpbmRvdyA6IHJvb3Q7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgYmluZCh0YXJnZXQsIEtFWUJPQVJEX0VWRU5ULCBvbktleWRvd24pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHVuYmluZCh0YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0LCBLRVlCT0FSRF9FVkVOVCk7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNhYmxlKHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSkge1xuICAgIGRpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBvbk0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlKCkge1xuICAgIHZhciBfZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICBkaXNhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgPSB0cnVlO1xuICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGRpc2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlZCA9IF9kaXNhYmxlZDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5ZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd24oZSkge1xuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIHZhciBrZXkgPSBubycKICAgICAgICAgICAgICAgICAgICAgICAgYidybWFsaXplS2V5KGUpO1xuXG4gICAgICBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgYidMRUZUKSkge1xuICAgICAgICBTcGxpZGUyLmdvKCI8Iik7XG4gICAgICB9IGVsc2UgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChrZXkgPT09IHJlc29sdmUoQVJST1dfUklHSFQpKSB7XG4gICAgICAgIFNwbGlkZTIuZycKICAgICAgICAgICAgICAgICAgICAgICAgYidvKCI+Iik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgZGlzYWJsZTogZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2FibGVcbiAgfTtcbn1cblxudmFyIFNSQ19EQVRBX0FUVFJJQlVURSA9IERBVEFfQVRUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQlVURSArICItbGF6eSI7XG52YXIgU1JDU0VUX0RBVEFfQVRUUklCVVRFID0gU1JDX0RBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RBX0FUVFJJQlVURSArICItc3Jjc2V0IjtcbnZhciBJTUFHRV9TRUxFQ1RPUiA9ICJbIiArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTUkNfREFUQV9BVFRSSUJVVEUgKyAiXSwgWyIgKyBTUkNTRVRfREFUQV9BVFRSSUJVVEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsgIl0iO1xuXG5mdW5jdGlvbiBMYXp5TG9hZChTcGxpZGUyLCBDb21wb25lbnRzMiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTExID0gRXZlbnRJbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxMS5vbixcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBvZmYgPSBfRXZlbnRJbnRlcmZhY2UxMS5vZmYsXG4gICAgICBiaW5kID0gX0V2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZTExLmJpbmQsXG4gICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMTEuZW1pdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIGlzU2VxdWVudGlhbCA9IG9wdGlvbnMubGF6eUxvYWQgPT09ICJzZXEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWVudGlhbCI7XG4gIHZhciBldmVudHMgPSBbRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRF07XG4gIHZhciBlbnRyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChvcHRpb25zLmxhenlMb2FkKSB7XG4gICAgICBpbml0KCk7XG4gICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfUkVGUkVTSCwgaW5pdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoKSB7XG4gICAgZW1wdHkoZW50cmllcyk7XG4gICAgcmVnaXN0ZXIoKTtcblxuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaXNTZXF1ZW50aWFsKSB7XG4gICAgICBsb2FkTmV4dCgpO1xuICAgIH0gZWxzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgb2ZmKGV2ZW50cyk7XG4gICAgICBvbihldmVudHMsIGNoZWNrKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBDb21wb25lbnRzMi5TbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBxdWVyeUFsbChTbGlkZS5zbGlkZSwgSU1BR0VfU0VMRUNUT1IpLmZvckVhY2goZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIChpbWcpIHtcbiAgICAgICAgdmFyIHNyYyA9IGdldEF0dHJpYnV0ZShpbWcsIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgICAgICB2YXIgc3Jjc2V0ID0gZ2V0QXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSk7XG5cbiAgICAgICAgaWYgKHNyYyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09IGltZy5zcmMgfHwgc3Jjc2V0ICE9PSBpbWcuc3Jjc2V0KSB7XG4gICAgICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBjbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzZXMuc3Bpbm5lcjtcbiAgICAgICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudCA9IGltZy5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIHZhciBzcGlubmVyID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNoaWxkKHBhcmVudCwgIi4iICsgY2xhc3NOYW1lKSB8fCBjcmVhdGUoInNwYW4iLCBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NOYW1lLCBwYXJlbnQpO1xuICAgICAgICAgIGVudHJpZXMucHVzaChbaW1nLCBTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHNwaW5uZXJdKTtcbiAgICAgICAgICBpbWcuc3JjIHx8IGRpc3BsYXkoaW1nLCAibm9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gY2hlY2soKSB7XG4gICAgZW50cmllcyA9IGVudHJpZXMuZmlsdGVyKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZGF0YSkge1xuICAgICAgdmFyIGRpc3RhbmNlID0gb3B0aW9ucy5wZXJQYWdlICogKChvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5wcmVsb2FkUGFnZXMgfHwgMSkgKyAxKSAtIDE7XG4gICAgICByZXR1cm4gZGF0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidbMV0uaXNXaXRoaW4oU3BsaWRlMi5pbmRleCwgZGlzdGFuY2UpID8gbG9hZChkYXRhKSA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cnVlO1xuICAgIH0pO1xuICAgIGVudHJpZXMubGVuZ3RoIHx8IG9mZihldmVudHMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWQoZGF0YSkge1xuICAgIHZhciBpbWcgPSBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYVswXTtcbiAgICBhZGRDbGFzcyhkYXRhWzFdLnNsaWRlLCBDTEFTU19MT0FESU5HKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgYXBwbHkob25Mb2FkLCBkYXRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJykpO1xuICAgIHNldEF0dHJpYnV0ZShpbWcsICJzcmMiLCBnZXRBdHRyaWJ1dGUoaW1nLCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JDX0RBVEFfQVRUUklCVVRFKSk7XG4gICAgc2V0QXR0cmlidXRlKGltZywgInNyY3NldCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNTRVRfREFUQV9BVFRSSUJVVEUpKTtcbiAgICByZW1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlQXR0cmlidXRlKGltZywgU1JDX0RBVEFfQVRUUklCVVRFKTtcbiAgICByZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKGltZywgU1JDU0VUX0RBVEFfQVRUUklCVVRFKTtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvbkxvYWQoZGF0YSwgZSkge1xuICAgIHZhciBpbWcgPSBkYXRhWzBdLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgU2xpZGUgPSBkYXRhWzFdO1xuICAgIHJlbW92ZUNsYXNzKFNsaWRlLnNsaWRlLCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfTE9BRElORyk7XG5cbiAgICBpZiAoZS50eXBlICE9PSAiZXJyb3IiKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmVtb3ZlKGRhdGFbMl0pO1xuICAgICAgZGlzcGxheShpbWcsICIiKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBlbWl0KEVWRU5UX0xBWllMT0FEX0xPQURFRCwgaW1nLCBTbGlkZSk7XG4gICAgICBlbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChFVkVOVF9SRVNJWkUpO1xuICAgIH1cblxuICAgIGlzU2VxdWVudGlhbCAmJiBsb2FkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05leHQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWROZXh0KCkge1xuICAgIGVudHJpZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmxlbmd0aCAmJiBsb2FkKGVudHJpZXMuc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogYXBwbHkoZW1wdHksIGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWVzKSxcbiAgICBjaGVjazogY2hlY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gUGFnaW5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24oU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIGV2ZW50ID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24gPSBldmVudC5vbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlbWl0ID0gZXZlbnQuZW1pdCxcbiAgICAgIGJpbmQgPSBldmVudC5iaW5kO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcyxcbiAgICAgIEVsZW1lbnRzID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgQ29udHJvbGxlciA9IENvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5Db250cm9sbGVyO1xuICB2YXIgaGFzRm9jdXMgPSBDb250cm9sbGVyLmhhc0ZvY3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyxcbiAgICAgIGdldEluZGV4ID0gQ29udHJvbGxlci5nZXRJbmRleCxcbiAgICAgIGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbyA9IENvbnRyb2xsZXIuZ287XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbi5yZXNvbHZlO1xuICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5wYWdpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsaXN0O1xuICB2YXIgcGFnaW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25DbGFzc2VzO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGRlc3Ryb3koKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX0VORF9JTkRFWCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ0hBTkdFRF0sIG1vdW50KTtcbiAgICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMucGFnaW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb247XG4gICAgcGxhY2Vob2xkZXIgJiYgZGlzcGxheShwbGFjZWhvbGRlciwgZW5hYmxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgPyAiIiA6ICJub25lIik7XG5cbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgb24oW0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9NT1ZFLCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVEXSwgdXBkYXRlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBjcmVhdGVQYWdpbmF0aW9uKCk7XG4gICAgICB1cGRhdGUoKTtcbiAgICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCwge1xuICAgICAgICBsaXN0OiBsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCxcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9LCBnZXRBdChTcGxpZGUyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChsaXN0KSB7XG4gICAgICByZW1vdmUocGxhY2Vob2xkZXIgPyBzbGljZShsaXN0LmNoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZHJlbikgOiBsaXN0KTtcbiAgICAgIHJlbW92ZUNsYXNzKGxpc3QsIHBhZ2luYXRpb25DbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3Nlcyk7XG4gICAgICBlbXB0eShpdGVtcyk7XG4gICAgICBsaXN0ID0gbnVsbDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuXG4gICAgZXZlbnQuZGVzdHJveSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZVBhZ2luYXRpb24oKSB7XG4gICAgdmFyIGxlbmd0aCA9IFNwbGlkZTIubGVuZ3RoOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgY2xhc3NlcyA9IG9wdGlvbnMuY2xhc3NlcyxcbiAgICAgICAgaTE4bicKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBvcHRpb25zLmkxOG4sXG4gICAgICAgIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dlO1xuICAgIHZhciBtYXggPSBoYXNGb2N1cygpID8gQ29udHJvbGxlci5nZXRFbmQoKSArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxIDogY2VpbChsZW5ndGggLyBwZXJQYWdlKTtcbiAgICBsaXN0ID0gcGxhY2Vob2xkZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IGNyZWF0ZSgidWwiLCBjbGFzc2VzLnBhZ2luYXRpb24sIEVsZW1lbnRzLnRyYWNrLnAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnRFbGVtZW50KTtcbiAgICBhZGRDbGFzcyhsaXN0LCBwYWdpbmF0aW9uQ2xhc3NlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDTEFTU19QQUdJTkFUSU9OICsgIi0tIiArIGdldERpcmVjdGlvbigpKTtcbiAgICBzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXR0cmlidXRlKGxpc3QsIFJPTEUsICJ0YWJsaXN0Iik7XG4gICAgc2V0QXR0cmlidXRlKGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0LCBBUklBX0xBQkVMLCBpMThuLnNlbGVjdCk7XG4gICAgc2V0QXR0cmlidXRlKGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBBUklBX09SSUVOVEFUSU9OLCBnZXREaXJlY3Rpb24oKSA9PT0gVFRCID8gInZlcnRpYycKICAgICAgICAgICAgICAgICAgICAgICAgYidhbCIgOiAiIik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heDsgaSsrKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgdmFyIGxpID0gY3JlYXRlKCJsaSIsIG51bGwsIGxpc3QpO1xuICAgICAgdmFyIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXR0b24gPSBjcmVhdGUoImJ1dHRvbiIsIHtcbiAgICAgICAgY2xhc3M6IGNsYXNzZXMucGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UsXG4gICAgICAgIHR5cGU6ICJidXR0b24iXG4gICAgICB9LCBsaSk7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGNvbnRyb2xzID0gU2xpZGVzLmdldEluKGkpLm1hcChmdW5jdGlvbiAoU2xpZGUpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHJldHVybiBTbGlkZS5zbGlkZS5pZDtcbiAgICAgIH0pO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciB0ZXh0ID0gIWhhc0ZvY3VzKCkgJiYgcGVyUGFnZSA+IDEgPyBpMThuLnBhZ2VYIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGkxOG4uc2xpZGVYO1xuICAgICAgYmluZChidXR0b24sICJjbGljayIsIGFwcGx5KG9uQ2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWNrLCBpKSk7XG5cbiAgICAgIGlmIChvcHRpb25zLnBhZ2luYXRpb25LZXlib2FyZCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgYmluZChidXR0b24sICJrZXlkb3duIiwgYXBwbHkob25LZXlkb3duLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSkpO1xuICAgICAgfVxuXG4gICAgICBzZXRBdHRyaWJ1dGUobGksIFJPTEUsICJwcmVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudGF0aW9uIik7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBST0xFLCAidGFiIik7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvbiwgQVJJQV9DT05UUk9MUywgY29udHJvbHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2pvaW4oIiAiKSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX0xBQkVMLCBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ybWF0KHRleHQsIGkgKyAxKSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBUQUJfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lOREVYLCAtMSk7XG4gICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgbGk6IGxpLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgYnV0dG9uOiBidXR0b24sXG4gICAgICAgIHBhZ2U6IGlcbiAgICAgIH0pOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkNsaWNrKHBhZ2UpIHtcbiAgICBnbygiPicKICAgICAgICAgICAgICAgICAgICAgICAgYiciICsgcGFnZSwgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbktleWRvd24ocGFnZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGUpIHtcbiAgICB2YXIgbGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuICAgIHZhciBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbm9ybWFsaXplS2V5KGUpO1xuICAgIHZhciBkaXIgPSBnZXREaXJlY3Rpb24oKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdmFyIG5leHRQYWdlID0gLTE7XG5cbiAgICBpZiAoa2V5ID09PSByZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShBUlJPV19SSUdIVCwgZmFsc2UsIGRpcikpIHtcbiAgICAgIG5leHRQYWdlID0gKytwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSAlIGxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19MRUYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCwgZmFsc2UsIGRpcikpIHtcbiAgICAgIG5leHRQYWdlID0gKC0tcGFnZSArIGxlbmd0aCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInICUgbGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAiSG9tZSIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBuZXh0UGFnZSA9IDA7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICJFbmQiKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgbmV4dFBhZ2UgPSBsZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHZhciBpdGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGl0ZW1zW25leHRQYWdlXTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICBmb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYicoaXRlbS5idXR0b24pO1xuICAgICAgZ28oIj4iICsgbmV4dFBhZ2UpO1xuICAgICAgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXZlbnQoZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlyZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbigpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5wYWdpbmF0aW9uRGlyZWN0aW9uIHx8IG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmRpcmVjdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEF0KGluZGV4KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBpdGVtc1tDb250cm9sbGVyLnRvUGFnZShpbmRleCldO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB2YXIgcHJldiA9IGdldEF0KGdldEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCh0cnVlKSk7XG4gICAgdmFyIGN1cnIgPSBnZXRBdChnZXRJbmRleCgpKTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAocHJldikge1xuICAgICAgdmFyIGJ1dHRvbiA9IHByZXYuYnV0dG9uO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHJlbW92ZUNsYXNzKGJ1dHRvbiwgQ0xBU1NfQUNUSVZFKTtcbiAgICAgIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX1NFTEVDVEVEKTtcbiAgICAgIHNldEF0dHJpYnV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoYnV0dG9uLCBUQUJfSU5ERVgsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycikgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBfYnV0dG9uID0gY3Vyci5idXR0b247XG4gICAgICBhZGRDbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgYicoX2J1dHRvbiwgQ0xBU1NfQUNUSVZFKTtcbiAgICAgIHNldEF0dHJpYnV0ZShfYnV0dG9uLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQVJJQV9TRUxFQ1RFRCwgdHJ1ZSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBQl9JTkRFWCwgIiIpO1xuICAgIH1cblxuICAgIGVtaXQoRVZFTlRfUEFHSU5BVElPTl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVBEQVRFRCwge1xuICAgICAgbGlzdDogbGlzdCxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9LCBwcmV2LCBjdXJyKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXRlbXM6IGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVtcyxcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZ2V0QXQ6IGdldEF0LFxuICAgIHVwZGF0ZTogdXBkYXRlXG4gIH07XG59XG5cbnZhciBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JJR0dFUl9LRVlTID0gWyIgIiwgIkVudGVyIl07XG5cbmZ1bmN0aW9uIFN5bmMoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBpc05hdmlnYXRpb24gPSBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5pc05hdmlnYXRpb24sXG4gICAgICBzbGlkZUZvY3VzID0gb3B0aW9ucy5zbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VGb2N1cztcbiAgdmFyIGV2ZW50cyA9IFtdO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBTcGxpZGUyLnNwbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaWYgKCF0YXJnZXQuaXNQYXJlbnQpIHtcbiAgICAgICAgc3luYyhTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMiwgdGFyZ2V0LnNwbGlkZSk7XG4gICAgICAgIHN5bmModGFyZ2V0LnNwbGlkZSwgU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGlzTmF2aWdhdGlvbikge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG5hdmlnYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIGVtcHR5KGV2ZW50cyk7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gcmVtb3VudCgpIHtcbiAgICBkZXN0cm95KCk7XG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gIH1cblxuICBmdW5jdGlvbiBzeW5jKHNwbGlkZSwgdGFyZ2V0KSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKHNwbGlkZSk7XG4gICAgZXZlbnQub24oRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUX01PVkUsIGZ1bmN0aW9uIChpbmRleCwgcHJldiwgZGVzdCkge1xuICAgICAgdGFyZ2V0LicKICAgICAgICAgICAgICAgICAgICAgICAgYidnbyh0YXJnZXQuaXMoTE9PUCkgPyBkZXN0IDogaW5kZXgpO1xuICAgIH0pO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudHMucHVzaChldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBuYXZpZ2F0ZSgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBvbiA9IGV2ZW50Lm9uO1xuICAgIG9uKEVWRU5UX0NMSUNLLCBvbkNsaWNrKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgb24oRVZFTlRfU0xJREVfS0VZRE9XTiwgb25LZXlkb3duKTtcbiAgICBvbihbRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX01PVU5URUQsIEVWRU5UX1VQREFURURdLCB1cGRhdGUpO1xuICAgIGV2ZW50cy5wdXNoKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCk7XG4gICAgZXZlbnQuZW1pdChFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQsIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUyLnNwbGlkZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdHRyaWJ1dGUoQ29tcG9uZW50czIuRWxlbWVudHMubGlzdCwgQVJJQV9PUklFTlRBVElPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ04sIG9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9uQ2xpY2soU2xpZGUpIHtcbiAgICBTcGxpZGUyLmdvKFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5pbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbktleWRvd24oU2xpZGUsIGUpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaWYgKGluY2x1ZGVzKFRSSUdHRVJfS0VZUywgbm9ybWFsaXplS2V5KGUpKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIG9uQ2xpY2soU2xpZGUpO1xuICAgICAgcHJldmVudChlKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXR1cDogYXBwbHkoQ29tcG9uZW50czIuTScKICAgICAgICAgICAgICAgICAgICAgICAgYidlZGlhLnNldCwge1xuICAgICAgc2xpZGVGb2N1czogaXNVbmRlZmluZWQoc2xpZGVGb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYicpID8gaXNOYXZpZ2F0aW9uIDogc2xpZGVGb2N1c1xuICAgIH0sIHRydWUpLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICByZW1vdW50OicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVtb3VudFxuICB9O1xufVxuXG5mdW5jdGlvbiBXaGVlbChTcGxpZGUyLCBDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTEyID0gRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlKFNwbGlkZTIpLFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTEyLmJpbmQ7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIHZhciBsYXN0VGltZSA9IDA7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChvcHRpb25zLndoZWVsKSB7XG4gICAgICBiaW5kKENvbXBvbmVudHMyLkVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cmFjaywgIndoZWVsIiwgb25XaGVlbCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbldoZWVsKGUpIHtcbiAgICBpZiAoZS5jYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VsYWJsZSkge1xuICAgICAgdmFyIGRlbHRhWSA9IGUuZGVsdGFZO1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBiYWNrd2FyZHMgPSBkZWx0YVkgPCAwO1xuICAgICAgdmFyIHRpbWVTdGFtcCA9IHRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2YoZSk7XG5cbiAgICAgIHZhciBfbWluID0gb3B0aW9ucy53aGVlbE1pblRocmVzaG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGQgfHwgMDtcblxuICAgICAgdmFyIHNsZWVwID0gb3B0aW9ucy53aGVlbFNsZWVwIHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfCAwO1xuXG4gICAgICBpZiAoYWJzKGRlbHRhWSkgPiBfbWluICYmIHRpbWVTdGFtcCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSBsYXN0VGltZSA+IHNsZWVwKSB7XG4gICAgICAgIFNwbGlkZTIuZ28oYmFja3dhcmRzID8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICI8IiA6ICI+Iik7XG4gICAgICAgIGxhc3RUaW1lID0gdGltZVN0YW1wO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgICAgc2hvdWxkUHJldmVudChiYWNrd2FyZHMpICYmIHByZXZlbnQoZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZFByZXZlbnQoYmFja3dhcmRzKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHJldHVybiAhb3B0aW9ucy5yZWxlYXNlV2hlZWwgfHwgU3BsaWRlMi5zdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMoTU9WSU5HKSB8fCBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEFkamFjZW50KGJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMpICE9PSAtMTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFxuICB9O1xufVxuXG52YXIgU1JfUkVNT1ZBTF9ERUxBWSA9IDkwO1xuXG5mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gTGl2ZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZTEzID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2UxMy5vbjtcblxuICB2YXIgdHJhY2sgPSBDb21wb25lbnRzMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWxlbWVudHMudHJhY2s7XG4gIHZhciBlbmFibGVkID0gb3B0aW9ucy5saXZlICYmICFvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5pc05hdmlnYXRpb247XG4gIHZhciBzciA9IGNyZWF0ZSgic3BhbiIsIENMQVNTX1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUik7XG4gIHZhciBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChTUl9SRU1PVkFMX0RFTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWSwgYXBwbHkodG9nZ2xlLCBmYWxzZSkpO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgZGlzYWJsZSghQ29tcG9uZW50czIuQXV0b3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5LmlzUGF1c2VkKCkpO1xuICAgICAgc2V0QXR0cmlidXRlKHRyYWNrLCBBUklBX0FUT01JJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsIHRydWUpO1xuICAgICAgc3IudGV4dENvbnRlbnQgPSAiXFx1MjAyNiI7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb24oRVZFTlRfQVVUT1BMQVlfUExBWSwgYXBwbHkoZGlzYWJsZSwgdHJ1ZSkpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9uKEVWRU5UX0FVVE9QTEFZX1BBVVNFLCBhcHBseShkaXNhYmxlLCBmYWxzZSkpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIG9uKFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRURdLCBhcHBseSh0b2dnbGUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlKGFjdGl2ZSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBzZXRBdHRyaWJ1dGUodHJhY2ssIEFSSUFfQlVTWSwgYWN0aXZlKTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoYWN0aXZlKSB7XG4gICAgICBhcHBlbmQodHJhY2ssIHNyKTtcbiAgICAgIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcnZhbC5zdGFydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmUoc3IpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGludGVydmFsLmNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cm95KCkge1xuICAgIHJlbW92ZUF0dHJpYnV0ZSh0cmFjaywgW0FSSUFfTElWRSwgQVJJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FfQVRPTUlDLCBBUklBX0JVU1ldKTtcbiAgICByZW1vdmUoc3IpO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGRpc2FibGUoZGlzYWJsZWQpIHtcbiAgICBpZiAoZW5hYmxlZCkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVJJQV9MSVZFLCBkaXNhYmxlZCA/ICJvZmYiICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6ICJwb2xpdGUiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsXG4gICAgZGlzYWJsZTogZGlzYWJsZSxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9O1xufVxuXG52YXIgQ29tcG9uZW50Q29uc3RydWN0b3JzID0gLyojX19QVVJFX18qJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBNZWRpYTogTWVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lhLFxuICBEaXJlY3Rpb246IERpcmVjdGlvbixcbiAgRWxlbWVudHM6IEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgU2xpZGVzOiBTbGlkZXMsXG4gIExheW91dDogTGF5b3V0LFxuICBDbG9uZXM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDbG9uZXMsXG4gIE1vdmU6IE1vdmUsXG4gIENvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBBcnJvd3M6IEFycm93cyxcbiAgQXV0b3BsYXk6IEF1dG9wbGF5LFxuICBDb3ZlcjonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENvdmVyLFxuICBTY3JvbGw6IFNjcm9sbCxcbiAgRHJhZzogRHJhZyxcbiAgS2V5Ym9hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JkOiBLZXlib2FyZCxcbiAgTGF6eUxvYWQ6IExhenlMb2FkLFxuICBQYWdpbmF0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogUGFnaW5hdGlvbixcbiAgU3luYzogU3luYyxcbiAgV2hlZWw6IFdoZWVsLFxuICBMaScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZTogTGl2ZVxufSk7XG52YXIgSTE4TiA9IHtcbiAgcHJldjogIlByZXZpb3VzIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSIsXG4gIG5leHQ6ICJOZXh0IHNsaWRlIixcbiAgZmlyc3Q6ICJHbyB0byBmaXJzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUiLFxuICBsYXN0OiAiR28gdG8gbGFzdCBzbGlkZSIsXG4gIHNsaWRlWDogIkcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbyB0byBzbGlkZSAlcyIsXG4gIHBhZ2VYOiAiR28gdG8gcGFnZSAlcyIsXG4gIHBsYXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiAiU3RhcnQgYXV0b3BsYXkiLFxuICBwYXVzZTogIlBhdXNlIGF1dG9wbGF5IixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhcm91c2VsOiAiY2Fyb3VzZWwiLFxuICBzbGlkZTogInNsaWRlIixcbiAgc2VsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDogIlNlbGVjdCBhIHNsaWRlIHRvIHNob3ciLFxuICBzbGlkZUxhYmVsOiAiJXMgb2YgJXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIlxufTtcbnZhciBERUZBVUxUUyA9IHtcbiAgdHlwZTogInNsaWRlIixcbiAgcm9sZTogIicKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWdpb24iLFxuICBzcGVlZDogNDAwLFxuICBwZXJQYWdlOiAxLFxuICBjbG9uZVN0YXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXM6IHRydWUsXG4gIGFycm93czogdHJ1ZSxcbiAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb25LZXlib2FyZDogdHJ1ZSxcbiAgaW50ZXJ2YWw6IDVlMyxcbiAgcGF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlT25Ib3ZlcjogdHJ1ZSxcbiAgcGF1c2VPbkZvY3VzOiB0cnVlLFxuICByZXNldFByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ncmVzczogdHJ1ZSxcbiAgZWFzaW5nOiAiY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAuNSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEpIixcbiAgZHJhZzogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAibHRyIixcbiAgdHJpbVNwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZTogdHJ1ZSxcbiAgZm9jdXNhYmxlTm9kZXM6ICJhLCBidXR0b24sIHRleHRhcmVhLCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidwdXQsIHNlbGVjdCwgaWZyYW1lIixcbiAgbGl2ZTogdHJ1ZSxcbiAgY2xhc3NlczogQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTRVMsXG4gIGkxOG46IEkxOE4sXG4gIHJlZHVjZWRNb3Rpb246IHtcbiAgICBzcGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQ6IDAsXG4gICAgcmV3aW5kU3BlZWQ6IDAsXG4gICAgYXV0b3BsYXk6ICJwYXVzZSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cbn07XG5cbmZ1bmN0aW9uIEZhZGUoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zKSB7XG4gIHZhciBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG1vdW50KCkge1xuICAgIEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLm9uKFtFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfTU9VTlRFRCwgRVZFTlRfUkVGUkVTSF0sIGluaXQpO1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGluaXQoKSB7XG4gICAgU2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKFNsaWRlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgU2xpZGUuc3R5bGUoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGVYKC0iICsgMTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCAqIFNsaWRlLmluZGV4ICsgIiUpIik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RhcnQoaW5kZXgsIGRvbmUpIHtcbiAgICBTbGlkZXMuc3R5bGUoInRyYW5zaXRpb24iLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIm9wYWNpdHkgIiArIG9wdGlvbnMuc3BlZWQgKyAibXMgIiArIG9wdGlvbnMuZWFzaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgbmV4dFRpY2soZG9uZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbW91bnQsXG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGNhbmNlbDogbm9vcFxuICB9OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gU2xpZGUoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBNb3ZlID0gQ29tcG9uZW50czIuTW92ZSxcbiAgICAgIENvbnRyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcixcbiAgICAgIFNjcm9sbCA9IENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMi5TY3JvbGw7XG4gIHZhciBsaXN0ID0gQ29tcG9uZW50czIuRWxlbWVudHMubGlzdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciB0cmFuc2l0aW9uID0gYXBwbHkoc3R5bGUsIGxpc3QsICJ0cmFuc2l0aW9uIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgZW5kQ2FsbGJhY2s7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgRScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLmJpbmQobGlzdCwgInRyYW5zaXRpb25lbmQiLCBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gbGlzdCAmJiBlbmRDYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2spIHtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIGVuZENhbGxiYWNrKCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoaW5kZXgsIGRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lKSB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gTW92ZS50b1Bvc2l0aW9uKGluZGV4LCB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZSk7XG4gICAgdmFyIHBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbigpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgc3BlZWQgPSBnZXRTcGVlZChpbmRleCk7XG5cbiAgICBpZiAoYWJzKGRlc3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbiAtIHBvc2l0aW9uKSA+PSAxICYmIHNwZWVkID49IDEpIHtcbiAgICAgIGlmIChvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy51c2VTY3JvbGwpIHtcbiAgICAgICAgU2Nyb2xsLnNjcm9sbChkZXN0aW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sIHNwZWVkLCBmYWxzZSwgZG9uZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbnNpdGlvbigidHJhbnNmb3JtICIgKyBzcGVlZCArICJtcyAiICsgb3B0aW9ucy5lYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nKTtcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoZGVzdGluYXRpb24sIHRydWUpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgZW5kQ2FsbGJhY2sgPSBkb25lO1xuICAgICAgfVxuICAgIH0gZWxzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgTW92ZS5qdW1wKGluZGV4KTtcbiAgICAgIGRvbmUoKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIHRyYW5zaXRpb24oIiIpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTY3JvbGwuY2FuY2VsKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTcGVlZChpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgcmV3aW5kU3BlZWQgPSBvcHRpb25zLnJld2luZFNwZWVkO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChTcGxpZGUyLmlzKFNMSURFKSAmJiByZXdpbmRTcGVlZCkge1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBwcmV2ID0gQ29udHJvbGxlci5nZXRJbmRleCh0cnVlKTtcbiAgICAgIHZhciBlbmQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29udHJvbGxlci5nZXRFbmQoKTtcblxuICAgICAgaWYgKHByZXYgPT09IDAgJiYgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4ID49IGVuZCB8fCBwcmV2ID49IGVuZCAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHJld2luZFNwZWVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5zcGVlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzdGFydDogc3RhcnQsXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn1cblxudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidfU3BsaWRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gX1NwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ldmVudCA9IEV2ZW50SW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSgpO1xuICAgIHRoaXMuQ29tcG9uZW50cyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgU3RhdGUoQ1JFQVRFRCk7XG4gICAgdGhpcy5zcGxpZGVzID0gW107XG4gICAgdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYicuX28gPSB7fTtcbiAgICB0aGlzLl9FID0ge307XG4gICAgdmFyIHJvb3QgPSBpc1N0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcodGFyZ2V0KSA/IHF1ZXJ5KGRvY3VtZW50LCB0YXJnZXQpIDogdGFyZ2V0O1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NlcnQocm9vdCwgcm9vdCArICIgaXMgaW52YWxpZC4iKTtcbiAgICB0aGlzLnJvb3QgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgcm9vdDtcbiAgICBvcHRpb25zID0gbWVyZ2Uoe1xuICAgICAgbGFiZWw6IGdldEF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTCkgfHwgIiIsXG4gICAgICBsYWJlbGxlZGJ5OiBnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUxMRURCWSkgfHwgIiJcbiAgICB9LCBERUZBVScKICAgICAgICAgICAgICAgICAgICAgICAgYidMVFMsIF9TcGxpZGUuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdHJ5ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBtZXJnZShvcHRpb25zLCBKU09OLnBhcnNlKGdldEF0dHJpYnV0ZShyb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgREFUQV9BVFRSSUJVVEUpKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidydChmYWxzZSwgIkludmFsaWQgSlNPTiIpO1xuICAgIH1cblxuICAgIHRoaXMuX28gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2JqZWN0LmNyZWF0ZShtZXJnZSh7fSwgb3B0aW9ucykpO1xuICB9XG5cbiAgdmFyIF9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8gPSBfU3BsaWRlLnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gbW91bnQoRXh0ZW5zaW9ucywgVHJhbnNpdGlvbikge1xuICAgIHZhciBfdGhpcyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzO1xuXG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMyID0gdGhpcy5Db21wb25lbnRzO1xuICAgIGFzc2VydChzdGF0ZS5pcyhbQ1JFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidURUQsIERFU1RST1lFRF0pLCAiQWxyZWFkeSBtb3VudGVkISIpO1xuICAgIHN0YXRlLnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoQ1JFQVRFRCk7XG4gICAgdGhpcy5fQyA9IENvbXBvbmVudHMyO1xuICAgIHRoaXMuXycKICAgICAgICAgICAgICAgICAgICAgICAgYidUID0gVHJhbnNpdGlvbiB8fCB0aGlzLl9UIHx8ICh0aGlzLmlzKEZBREUpID8gRmFkZSA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZSk7XG4gICAgdGhpcy5fRSA9IEV4dGVuc2lvbnMgfHwgdGhpcy5fRTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIENvbnN0cnVjdG9ycyA9IGFzc2lnbih7fSwgQ29tcG9uZW50Q29uc3RydWN0b3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgdGhpcy5fRSwge1xuICAgICAgVHJhbnNpdGlvbjogdGhpcy5fVFxuICAgIH0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmb3JPd24oQ29uc3RydWN0b3JzLCBmdW5jdGlvbiAoQ29tcG9uZW50LCBrZXkpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB2YXIgY29tcG9uZW50ID0gQ29tcG9uZW50KF90aGlzLCBDb21wb25lbnRzMiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIF90aGlzLl9vKTtcbiAgICAgIENvbXBvbmVudHMyW2tleV0gPSBjb21wb25lbnQ7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgY29tcG9uZW50LnNldHVwICYmIGNvbXBvbmVudC5zZXR1cCgpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgICBmb3JPd24oQ29tcG9uZW50czIsIGZ1bmN0aW9uIChjb21wb25lbnQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICBjb21wb25lbnQubW91bnQgJiYgY29tcG9uZW50Lm1vdW50KCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICAgIHRoaXMuZW1pdChFVkVOVF9NT1VOVEVEKTtcbiAgICBhZGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ModGhpcy5yb290LCBDTEFTU19JTklUSUFMSVpFRCk7XG4gICAgc3RhdGUuc2V0KElETEUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB0aGlzLmVtaXQoRVZFTlRfUkVBRFkpO1xuICAgIHJldHVybiB0aGlzO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8uc3luYyA9IGZ1bmN0aW9uIHN5bmMoc3BsaWRlKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuc3BsaWRlcy5wdXNoKHtcbiAgICAgIHNwbGlkZTogc3BsaWRlXG4gICAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHNwbGlkZS5zcGxpZGVzLnB1c2goe1xuICAgICAgc3BsaWRlOiB0aGlzLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGlzUGFyZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMoSURMRSkpIHtcbiAgICAgIHRoaXMuX0MuU3luYy5yZW1vdW50KCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBzcGxpZGUuQ29tcG9uZW50cy5TeW5jLnJlbW91bnQoKTtcbiAgICB9XG5cbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmdvID0gZnVuY3Rpb24gZ28oY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb2wpIHtcbiAgICB0aGlzLl9DLkNvbnRyb2xsZXIuZ28oY29udHJvbCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLm9uID0gZnVuY3Rpb24gb24oZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cywgY2FsbGJhY2spIHtcbiAgICB0aGlzLmV2ZW50Lm9uKGV2ZW50cywgY2FsbGJhY2spJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9mZihldmVudHMpIHtcbiAgICB0aGlzLmV2ZW50Lm9mZihldmVudHMpO1xuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50KSB7XG4gICAgdmFyIF90aGlzJGV2ZW50O1xuXG4gICAgKF90aGlzJGV2ZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHRoaXMuZXZlbnQpLmVtaXQuYXBwbHkoX3RoaXMkZXZlbnQsIFtldmVudF0uY29uY2F0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGljZShhcmd1bWVudHMsIDEpKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChzbGlkZXMsIGluZGV4KSB7XG4gICAgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuX0MuU2xpZGVzLmFkZChzbGlkZXMsIGluZGV4KTtcblxuICAgIHJldHVybiB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG1hdGNoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSB7XG4gICAgdGhpcy5fQy5TbGlkZXMucmVtb3ZlKG1hdGNoZXIpO1xuXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5pcyA9IGZ1bmN0aW9uIGlzKHR5cGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgcmV0dXJuIHRoaXMuX28udHlwZSA9PT0gdHlwZTtcbiAgfTtcblxuICBfcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgIHRoaXMuZW1pdChFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfUkVGUkVTSCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95ID0gZnVuY3Rpb24gZGVzdHJveShjb21wbGV0ZWx5KSB7XG4gICAgaWYgKGNvbXBsZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWx5ID09PSB2b2lkIDApIHtcbiAgICAgIGNvbXBsZXRlbHkgPSB0cnVlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICB2YXIgZXZlbnQgPSB0aGlzLmV2ZW50LFxuICAgICAgICBzdGF0ZSA9IHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLnN0YXRlO1xuXG4gICAgaWYgKHN0YXRlLmlzKENSRUFURUQpKSB7XG4gICAgICBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UodGhpcykub24oRVZFTlRfUkVBRFksIHRoaXMuZGVzdHJveS5iaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCh0aGlzLCBjb21wbGV0ZWx5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck93bignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5fQywgZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnQuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3kgJiYgY29tcG9uZW50LmRlc3Ryb3koY29tcGxldGVseSk7XG4gICAgICB9LCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgICBldmVudC5lbWl0KEVWRU5UX0RFU1RST1kpO1xuICAgICAgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmRlc3Ryb3koKTtcbiAgICAgIGNvbXBsZXRlbHkgJiYgZW1wdHkodGhpcy5zcGxpZGVzKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBzdGF0ZS5zZXQoREVTVFJPWUVEKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXM7XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKF9TcGxpZGUsIFt7XG4gICAga2V5OiAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLl9vO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQob3B0aW9ucykgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHRoaXMuX0MuTWVkaWEuc2V0KG9wdGlvbnMsIHRydWUsIHRydWUpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICJsZW5ndGgiLFxuICAgIGdldDogZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9DLlNsaWRlcy5nZXRMZW5ndGgodHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogImluZGV4IixcbiAgICBnZXQ6IGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fQy5Db250cm9sbGVyLmdldEluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBfU3BsaWRlO1xufSgpO1xuXG52YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIFNwbGlkZSA9IF9TcGxpZGU7XG5TcGxpZGUuZGVmYXVsdHMgPSB7fTtcblNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuU1RBVEVTID0gU1RBVEVTO1xudmFyIENMQVNTX1JFTkRFUkVEID0gImlzLXJlbmRlcmVkIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG52YXIgUkVOREVSRVJfREVGQVVMVF9DT05GSUcgPSB7XG4gIGxpc3RUYWc6ICJ1bCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLFxuICBzbGlkZVRhZzogImxpIlxufTtcblxudmFyIFN0eWxlID0gLyojX19QVVJFX18qJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0eWxlKGlkLCBvcHRpb25zKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHRoaXMuc3R5bGVzID0ge307XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgdmFyIF9wcm90bzIgPSBTdHlsZS5wcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG90eXBlO1xuXG4gIF9wcm90bzIucnVsZSA9IGZ1bmN0aW9uIHJ1bGUoc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyLCBwcm9wLCB2YWx1ZSwgYnJlYWtwb2ludCkge1xuICAgIGJyZWFrcG9pbnQgPSBicmVhaycKICAgICAgICAgICAgICAgICAgICAgICAgYidwb2ludCB8fCAiZGVmYXVsdCI7XG4gICAgdmFyIHNlbGVjdG9ycyA9IHRoaXMuc3R5bGVzWycKICAgICAgICAgICAgICAgICAgICAgICAgYidicmVha3BvaW50XSA9IHRoaXMuc3R5bGVzW2JyZWFrcG9pbnRdIHx8IHt9O1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3R5bGVzID0gc2VsZWN0b3JzW3NlbGVjdG9yXSA9IHNlbGVjdG9yc1tzZWxlY3Rvcl0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IHt9O1xuICAgIHN0eWxlc1twcm9wXSA9IHZhbHVlO1xuICB9O1xuXG4gIF9wcm90bzInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xuXG4gICAgdmFyIGNzcyA9ICIiO1xuXG4gICAgaWYgKHRoaXMuc3R5bGVzLmRlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x0KSB7XG4gICAgICBjc3MgKz0gdGhpcy5idWlsZFNlbGVjdG9ycyh0aGlzLnN0eWxlcy5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmYXVsdCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5zdHlsZXMpLnNvcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KGZ1bmN0aW9uIChuLCBtKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMubWVkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidhUXVlcnkgPT09ICJtaW4iID8gK24gLSArbSA6ICttIC0gK247XG4gICAgfSkuZm9yRWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24gKGJyZWFrcG9pbnQpIHtcbiAgICAgIGlmIChicmVha3BvaW50ICE9PSAiZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZmF1bHQiKSB7XG4gICAgICAgIGNzcyArPSAiQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aScKICAgICAgICAgICAgICAgICAgICAgICAgYidkdGg6ICIgKyBicmVha3BvaW50ICsgInB4KSB7IjtcbiAgICAgICAgY3NzICs9IF90aGlzMicKICAgICAgICAgICAgICAgICAgICAgICAgYicuYnVpbGRTZWxlY3RvcnMoX3RoaXMyLnN0eWxlc1ticmVha3BvaW50XSk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3MgKz0gIn0iO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjc3M7XG4gIH07JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIF9wcm90bzIuYnVpbGRTZWxlY3RvcnMgPSBmdW5jdGlvbiBidWlsZFNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcnMoc2VsZWN0b3JzKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGNzcyA9ICIiO1xuICAgIGZvck93bihzZWxlY3RvcnMsIGZ1bmN0aW9uIChzdHlsZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3Rvcikge1xuICAgICAgc2VsZWN0b3IgPSAoIiMiICsgX3RoaXMzLmlkICsgIiAiICcKICAgICAgICAgICAgICAgICAgICAgICAgYicrIHNlbGVjdG9yKS50cmltKCk7XG4gICAgICBjc3MgKz0gc2VsZWN0b3IgKyAiIHsiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGZvck93bihzdHlsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgICAgICAgY3NzICs9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwcm9wICsgIjogIiArIHZhbHVlICsgIjsiO1xuICAgICAgICB9XG4gICAgICB9KTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBjc3MgKz0gIn0iO1xuICAgIH0pO1xuICAgIHJldHVybiBjc3M7XG4gIH07XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBTdHlsZTtcbn0oKTtcblxudmFyIFNwbGlkZVJlbmRlcmVyID0gLyojX18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNwbGlkZVJlbmRlcmVyKGNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cywgb3B0aW9ucywgY29uZmlnLCBkZWZhdWx0cykge1xuICAgIHRoaXMuc2xpZGVzID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFtdO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuYnJlYWtwb2ludHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gW107XG4gICAgbWVyZ2UoREVGQVVMVFMsIGRlZmF1bHRzIHx8IHt9KTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVyZ2UobWVyZ2UodGhpcy5vcHRpb25zLCBERUZBVUxUUyksIG9wdGlvbnMgfHwge30pOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0aGlzLmNvbnRlbnRzID0gY29udGVudHM7XG4gICAgdGhpcy5jb25maWcgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgYXNzaWduKHt9LCBSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRywgY29uZmlnIHx8IHt9KTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdGhpcy5pZCA9IHRoaXMuY29uZmlnLmlkIHx8IHVuaXF1ZUlkKCJzcGxpZGUiKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdGhpcy5TdHlsZSA9IG5ldyBTdHlsZSh0aGlzLmlkLCB0aGlzLm9wdGlvbnMpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB0aGlzLkRpcmVjdGlvbiA9IERpcmVjdGlvbihudWxsLCBudWxsLCB0aGlzLm9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zKTtcbiAgICBhc3NlcnQodGhpcy5jb250ZW50cy5sZW5ndGgsICJQcm92aWRlIGF0IGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FzdCAxIGNvbnRlbnQuIik7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUmVuZGVyZXIuY2xlYW4gPSBmdW5jdGlvbiBjbGVhbihzcGxpZGUpIHtcbiAgICB2YXIgX0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZTE0ID0gRXZlbnRJbnRlcmZhY2Uoc3BsaWRlKSxcbiAgICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX0V2ZW50SW50ZXJmYWNlMTQub247XG5cbiAgICB2YXIgcm9vdCA9IHNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdDtcbiAgICB2YXIgY2xvbmVzID0gcXVlcnlBbGwocm9vdCwgIi4iICsgQ0xBU1NfQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT05FKTtcbiAgICBvbihFVkVOVF9NT1VOVEVELCBmdW5jdGlvbiAoKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVtb3ZlKGNoaWxkKHJvb3QsICJzdHlsZSIpKTtcbiAgICB9KTtcbiAgICByZW1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGNsb25lcyk7XG4gIH07XG5cbiAgdmFyIF9wcm90bzMgPSBTcGxpZGVSZW5kZXJlci5wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG90eXBlO1xuXG4gIF9wcm90bzMuaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRoaXMucGFyc2VCcmVha3BvaW50cygpO1xuICAgIHRoaXMuaW5pdFNsaWRlcygpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB0aGlzLnJlZ2lzdGVyUm9vdFN0eWxlcygpO1xuICAgIHRoaXMucmVnaXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyVHJhY2tTdHlsZXMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU2xpZGVTdHlsZXMoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdGhpcy5yZWdpc3Rlckxpc3RTdHlsZXMoKTtcbiAgfTtcblxuICBfcHJvdG8zLicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbml0U2xpZGVzID0gZnVuY3Rpb24gaW5pdFNsaWRlcygpIHtcbiAgICB2YXIgX3RoaXM0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHRoaXM7XG5cbiAgICBwdXNoKHRoaXMuc2xpZGVzLCB0aGlzLmNvbnRlbnRzLm1hcCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24gKGNvbnRlbnQsIGluZGV4KSB7XG4gICAgICBjb250ZW50ID0gaXNTdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnKGNvbnRlbnQpID8ge1xuICAgICAgICBodG1sOiBjb250ZW50XG4gICAgICB9IDogYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRlbnQ7XG4gICAgICBjb250ZW50LnN0eWxlcyA9IGNvbnRlbnQuc3R5bGVzIHx8IHt9OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGNvbnRlbnQuYXR0cnMgPSBjb250ZW50LmF0dHJzIHx8IHt9O1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgX3RoaXM0LmNvdmVyKGNvbnRlbnQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpczQub3B0aW9ucy5jbGFzc2VzLnNsaWRlICsgIiAiICsgKGluZGV4ID09PSAwID8gQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX0FDVElWRSA6ICIiKTtcbiAgICAgIGFzc2lnbihjb250ZW50LmF0dHJzLCB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBjbGFzczogKGNsYXNzZXMgKyAiICIgKyAoY29udGVudC5hdHRycy5jbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgfHwgIiIpKS50cmltKCksXG4gICAgICAgIHN0eWxlOiBfdGhpczQuYnVpbGRTdHlsZXMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRlbnQuc3R5bGVzKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGVudDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSkpO1xuXG4gICAgaWYgKHRoaXMuaXNMb29wKCkpIHtcbiAgICAgIHRoaXMuZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVyYXRlQ2xvbmVzKHRoaXMuc2xpZGVzKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMycKICAgICAgICAgICAgICAgICAgICAgICAgYicucmVnaXN0ZXJSb290U3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJSb290U3R5bGVzKCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHRoaXMuYnJlYWtwb2ludHMuZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2goZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgd2lkdGggPSBfcmVmMlswXScKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWYyWzFdO1xuXG4gICAgICBfdGhpczUuU3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlLnJ1bGUoIiAiLCAibWF4LXdpZHRoIiwgdW5pdChvcHRpb25zLndpZHRoKSwgd2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyVHJhY2tTdHlsZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gZnVuY3Rpb24gcmVnaXN0ZXJUcmFja1N0eWxlcygpIHtcbiAgICB2YXIgX3RoaXM2ID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXM7XG5cbiAgICB2YXIgU3R5bGUyID0gdGhpcy5TdHlsZTtcbiAgICB2YXIgc2VsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdG9yID0gIi4iICsgQ0xBU1NfVFJBQ0s7XG4gICAgdGhpcy5icmVha3BvaW50cy5mb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciB3aWR0aCA9IF9yZWYzWzBdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjNbMV07XG4gICAgICBTdHlsZTIucnVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Uoc2VsZWN0b3IsIF90aGlzNi5yZXNvbHZlKCJwYWRkaW5nTGVmdCIpLCBfdGhpczYuY3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1BhZGRpbmcob3B0aW9ucywgZmFsc2UpLCB3aWR0aCk7XG4gICAgICBTdHlsZTIucnVsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IsIF90aGlzNi5yZXNvbHZlKCJwYWRkaW5nUmlnaHQiKSwgX3RoaXM2LmNzcycKICAgICAgICAgICAgICAgICAgICAgICAgYidQYWRkaW5nKG9wdGlvbnMsIHRydWUpLCB3aWR0aCk7XG4gICAgICBTdHlsZTIucnVsZShzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IsICJoZWlnaHQiLCBfdGhpczYuY3NzVHJhY2tIZWlnaHQob3B0aW9ucyksIHdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3Rlckxpc3RTdHlsZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gZnVuY3Rpb24gcmVnaXN0ZXJMaXN0U3R5bGVzKCkge1xuICAgIHZhciBfdGhpczcgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcztcblxuICAgIHZhciBTdHlsZTIgPSB0aGlzLlN0eWxlO1xuICAgIHZhciBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgPSAiLiIgKyBDTEFTU19MSVNUO1xuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2goZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICB2YXIgd2lkdGggPSBfcmVmNFswXSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWY0WzFdO1xuICAgICAgU3R5bGUyLnJ1bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHNlbGVjdG9yLCAidHJhbnNmb3JtIiwgX3RoaXM3LmJ1aWxkVHJhbnNsYXRlKG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzKSwgd2lkdGgpO1xuXG4gICAgICBpZiAoIV90aGlzNy5jc3NTbGlkZUhlaWdodChvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucykpIHtcbiAgICAgICAgU3R5bGUyLnJ1bGUoc2VsZWN0b3IsICJhc3BlY3QtcmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvIiwgX3RoaXM3LmNzc0FzcGVjdFJhdGlvKG9wdGlvbnMpLCB3aWR0aCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMucmVnaXN0ZXJTbGlkZVN0eWxlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBmdW5jdGlvbiByZWdpc3RlclNsaWRlU3R5bGVzKCkge1xuICAgIHZhciBfdGhpczggPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcztcblxuICAgIHZhciBTdHlsZTIgPSB0aGlzLlN0eWxlO1xuICAgIHZhciBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgPSAiLiIgKyBDTEFTU19TTElERTtcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgdmFyIHdpZHRoID0gX3JlZjVbMF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICAgIG9wdGlvbnMgPSBfcmVmNVsxXTtcbiAgICAgIFN0eWxlMi5ydWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShzZWxlY3RvciwgIndpZHRoIiwgX3RoaXM4LmNzc1NsaWRlV2lkdGgob3B0aW9ucyksICcKICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aCk7XG4gICAgICBTdHlsZTIucnVsZShzZWxlY3RvciwgImhlaWdodCIsIF90aGlzOCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuY3NzU2xpZGVIZWlnaHQob3B0aW9ucykgfHwgIjEwMCUiLCB3aWR0aCk7XG4gICAgICBTdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUyLnJ1bGUoc2VsZWN0b3IsIF90aGlzOC5yZXNvbHZlKCJtYXJnaW5SaWdodCIpLCB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25pdChvcHRpb25zLmdhcCkgfHwgIjBweCIsIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzZWxlY3RvciArICIgPiBpbWciLCAiZGlzcGxheSIsIG9wdGlvbnMuY292ZXIgPyAibm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmUiIDogImlubGluZSIsIHdpZHRoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLicKICAgICAgICAgICAgICAgICAgICAgICAgYididWlsZFRyYW5zbGF0ZSA9IGZ1bmN0aW9uIGJ1aWxkVHJhbnNsYXRlKG9wdGlvbnMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIF90aGlzJERpcmVjdGlvbiA9IHRoaXMuRGlyZWN0aW9uLFxuICAgICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzb2x2ZSA9IF90aGlzJERpcmVjdGlvbi5yZXNvbHZlLFxuICAgICAgICBvcmllbnQgPSBfdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMkRGlyZWN0aW9uLm9yaWVudDtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlcy5wdXNoKHRoaXMuY3NzT2Zmc2V0Q2xvbmVzKG9wdGlvbnMpKTtcbiAgICB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLnB1c2godGhpcy5jc3NPZmZzZXRHYXBzKG9wdGlvbnMpKTtcblxuICAgIGlmICh0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5pc0NlbnRlcihvcHRpb25zKSkge1xuICAgICAgdmFsdWVzLnB1c2godGhpcy5idWlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDc3NWYWx1ZShvcmllbnQoLTUwKSwgIiUiKSk7XG4gICAgICB2YWx1ZXMucHVzaC5hcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgYicodmFsdWVzLCB0aGlzLmNzc09mZnNldENlbnRlcihvcHRpb25zKSk7XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKEJvb2xlYW4pLm1hcChmdW5jdGlvbiAodmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gICAgICByZXR1cm4gInRyYW5zbGF0ZSIgKyByZXNvbHZlKCJYIikgKyAiKCIgKycKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFsdWUgKyAiKSI7XG4gICAgfSkuam9pbigiICIpO1xuICB9O1xuXG4gIF9wcm90bzMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc09mZnNldENsb25lcyA9IGZ1bmN0aW9uIGNzc09mZnNldENsb25lcyhvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBfdGhpcyREaXJlY3Rpb24yID0gdGhpcy5EaXJlY3Rpb24sXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZXNvbHZlID0gX3RoaXMkRGlyZWN0aW9uMi5yZXNvbHZlLFxuICAgICAgICBvcmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gX3RoaXMkRGlyZWN0aW9uMi5vcmllbnQ7XG4gICAgdmFyIGNsb25lQ291bnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5nZXRDbG9uZUNvdW50KCk7XG5cbiAgICBpZiAodGhpcy5pc0ZpeGVkV2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG9wdGlvbnMpKSB7XG4gICAgICB2YXIgX3RoaXMkcGFyc2VDc3NWYWx1ZSA9IHRoaXMucGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnNlQ3NzVmFsdWUob3B0aW9uc1tyZXNvbHZlKCJmaXhlZFdpZHRoIildKSxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFsdWUgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlLnZhbHVlLFxuICAgICAgICAgIHVuaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMiA9IF90aGlzJHBhcnNlQ3NzVmFsdWUudW5pdDtcblxuICAgICAgcmV0dXJuIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmJ1aWxkQ3NzVmFsdWUob3JpZW50KHZhbHVlKSAqIGNsb25lQ291bnQsIHVuaXQyKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuXG4gICAgdmFyIHBlcmNlbnQgPSAxMDAgKiBjbG9uZUNvdW50IC8gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMucGVyUGFnZTtcbiAgICByZXR1cm4gb3JpZW50KHBlcmNlbnQpICsgIiUiO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcblxuICBfcHJvdG8zLmNzc09mZnNldENlbnRlciA9IGZ1bmN0aW9uIGNzc09mZnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRDZW50ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyREaXJlY3Rpb24zID0gdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRGlyZWN0aW9uLFxuICAgICAgICByZXNvbHZlID0gX3RoaXMkRGlyZWN0aW9uMy5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSxcbiAgICAgICAgb3JpZW50ID0gX3RoaXMkRGlyZWN0aW9uMy5vcmllbnQ7XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKHRoaXMuaXNGaXhlZFdpZHRoKG9wdGlvbnMpKSB7XG4gICAgICB2YXIgX3RoaXMkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcnNlQ3NzVmFsdWUyID0gdGhpcy5wYXJzZUNzc1ZhbHVlKG9wdGlvbnNbcmVzb2x2ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImZpeGVkV2lkdGgiKV0pLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcGFyc2VDc3NWYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUyLnZhbHVlLFxuICAgICAgICAgIHVuaXQyID0gX3RoaXMkcGFyc2VDc3NWYWx1ZTIudW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQ7XG5cbiAgICAgIHJldHVybiBbdGhpcy5idWlsZENzc1ZhbHVlKG9yaWVudCh2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgLyAyKSwgdW5pdDIpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlLFxuICAgICAgICBnYXAgPSBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy5nYXA7XG4gICAgdmFsdWVzLnB1c2gob3JpZW50KDUwIC8gcGVyUGFnZSkgKyAiJSIpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIGlmIChnYXApIHtcbiAgICAgIHZhciBfdGhpcyRwYXJzZUNzc1ZhbHVlMyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSB0aGlzLnBhcnNlQ3NzVmFsdWUoZ2FwKSxcbiAgICAgICAgICBfdmFsdWUgPSBfdGhpcyQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyc2VDc3NWYWx1ZTMudmFsdWUsXG4gICAgICAgICAgX3VuaXQgPSBfdGhpcyRwYXJzZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NWYWx1ZTMudW5pdDtcblxuICAgICAgdmFyIGdhcE9mZnNldCA9IChfdmFsdWUgLyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGVyUGFnZSAtIF92YWx1ZSkgLyAyO1xuICAgICAgdmFsdWVzLnB1c2godGhpcy5idWlsZEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NWYWx1ZShvcmllbnQoZ2FwT2Zmc2V0KSwgX3VuaXQpKTtcbiAgICB9XG5cbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHZhbHVlcztcbiAgfTtcblxuICBfcHJvdG8zLmNzc09mZnNldEdhcHMgPSBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gY3NzT2Zmc2V0R2FwcyhvcHRpb25zKSB7XG4gICAgdmFyIGNsb25lQ291bnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5nZXRDbG9uZUNvdW50KCk7XG5cbiAgICBpZiAoY2xvbmVDb3VudCAmJiBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5nYXApIHtcbiAgICAgIHZhciBvcmllbnQgPSB0aGlzLkRpcmVjdGlvbi5vcmllbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuXG4gICAgICB2YXIgX3RoaXMkcGFyc2VDc3NWYWx1ZTQgPSB0aGlzLnBhcnNlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlKG9wdGlvbnMuZ2FwKSxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHBhcnNlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlNC52YWx1ZSxcbiAgICAgICAgICB1bml0MiA9IF90aGlzJHBhcnNlQ3NzVmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlNC51bml0O1xuXG4gICAgICBpZiAodGhpcy5pc0ZpeGVkV2lkdGgob3B0aW9ucykpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ3NzVmFsdWUob3JpZW50KHZhbHVlICogYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lQ291bnQpLCB1bml0Mik7XG4gICAgICB9XG5cbiAgICAgIHZhciBwZXJQYWdlID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMucGVyUGFnZTtcbiAgICAgIHZhciBnYXBzID0gY2xvbmVDb3VudCAvIHBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlO1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDc3NWYWx1ZShvcmllbnQoZ2FwcyAqIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSksIHVuaXQyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIiI7XG4gIH07XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIF9wcm90bzMucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUocHJvcCkge1xuICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gY2FtZWxUb0tlYmFiKHRoaXMuRGlyZWN0aW9uLnJlc29sdmUocHJvcCkpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8zLmNzc1BhZGRpbmcgPSBmdW5jdGlvbiBjc3NQYWRkaW5nKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLCByaWdodCkge1xuICAgIHZhciBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgcHJvcCA9IHRoaXMuRGlyZWN0aW9uLnJlc29sdmUocmlnaHQgPyAicmlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiA6ICJsZWZ0IiwgdHJ1ZSk7XG4gICAgcmV0dXJuIHBhZGRpbmcgJiYgdW5pdChwYWRkaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZ1twcm9wXSB8fCAoaXNPYmplY3QocGFkZGluZykgPyAwIDogcGFkZGluZykpIHx8ICIwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B4IjtcbiAgfTtcblxuICBfcHJvdG8zLmNzc1RyYWNrSGVpZ2h0ID0gZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1RyYWNrSGVpZ2h0KG9wdGlvbnMpIHtcbiAgICB2YXIgaGVpZ2h0ID0gIiI7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICBoZWlnaHQgPSB0aGlzLmNzc0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQob3B0aW9ucyk7XG4gICAgICBhc3NlcnQoaGVpZ2h0LCBcJyJoZWlnaHQiIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBtaXNzaW5nLlwnKTtcbiAgICAgIGhlaWdodCA9ICJjYWxjKCIgKyBoZWlnaHQgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiAtICIgKyB0aGlzLmNzc1BhZGRpbmcob3B0aW9ucywgZmFsc2UpICsgIiAtICIgKyB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5jc3NQYWRkaW5nKG9wdGlvbnMsIHRydWUpICsgIikiO1xuICAgIH1cblxuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gaGVpZ2h0O1xuICB9O1xuXG4gIF9wcm90bzMuY3NzSGVpZ2h0ID0gZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGNzc0hlaWdodChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHVuaXQob3B0aW9ucy5oZWlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0KTtcbiAgfTtcblxuICBfcHJvdG8zLmNzc1NsaWRlV2lkdGggPSBmdW5jdGlvbiBjcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzU2xpZGVXaWR0aChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b1dpZHRoICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/ICIiIDogdW5pdChvcHRpb25zLmZpeGVkV2lkdGgpIHx8ICh0aGlzLmlzVmVydGljYWwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgPyAiIiA6IHRoaXMuY3NzU2xpZGVTaXplKG9wdGlvbnMpKTtcbiAgfTtcblxuICBfcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3RvMy5jc3NTbGlkZUhlaWdodCA9IGZ1bmN0aW9uIGNzc1NsaWRlSGVpZ2h0KG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zKSB7XG4gICAgcmV0dXJuIHVuaXQob3B0aW9ucy5maXhlZEhlaWdodCkgfHwgKHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzVmVydGljYWwoKSA/IG9wdGlvbnMuYXV0b0hlaWdodCA/ICIiIDogdGhpcy5jc3NTbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVTaXplKG9wdGlvbnMpIDogdGhpcy5jc3NIZWlnaHQob3B0aW9ucykpO1xuICB9OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBfcHJvdG8zLmNzc1NsaWRlU2l6ZSA9IGZ1bmN0aW9uIGNzc1NsaWRlU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicob3B0aW9ucykge1xuICAgIHZhciBnYXAgPSB1bml0KG9wdGlvbnMuZ2FwKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuICJjYWxjKCgxMDAlIiArIChnYXAgJiYgIiArICIgKyBnYXApICsgIikvIiArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAob3B0aW9ucy5wZXJQYWdlIHx8IDEpICsgKGdhcCAmJiAiIC0gIiArIGdhcCkgKyAiKSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzQXNwZWN0UmF0aW8gPSBmdW5jdGlvbiBjc3NBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwZWN0UmF0aW8ob3B0aW9ucykge1xuICAgIHZhciBoZWlnaHRSYXRpbyA9IG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlaWdodFJhdGlvO1xuICAgIHJldHVybiBoZWlnaHRSYXRpbyA/ICIiICsgMSAvIGhlaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RSYXRpbyA6ICIiO1xuICB9O1xuXG4gIF9wcm90bzMuYnVpbGRDc3NWYWx1ZSA9IGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBidWlsZENzc1ZhbHVlKHZhbHVlLCB1bml0Mikge1xuICAgIHJldHVybiAiIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSArIHVuaXQyO1xuICB9O1xuXG4gIF9wcm90bzMucGFyc2VDc3NWYWx1ZSA9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBwYXJzZUNzc1ZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKGlzU3RyaW5nKHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpIHtcbiAgICAgIHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciB1bml0MiA9IHZhbHVlLnJlcGxhY2UoL1xcZCooXFwuXFxkKik/LywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIiKSB8fCAicHgiO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsXG4gICAgICAgIHVuaXQ6IHVuaXQyXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgdW5pdDogInB4IlxuICAgIH07XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9O1xuXG4gIF9wcm90bzMucGFyc2VCcmVha3BvaW50cyA9IGZ1bmN0aW9uIHBhcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUJyZWFrcG9pbnRzKCkge1xuICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBicmVha3BvaW50cyA9IHRoaXMub3B0aW9ucy5icmVha3BvaW50cztcbiAgICB0aGlzLmJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vha3BvaW50cy5wdXNoKFsiZGVmYXVsdCIsIHRoaXMub3B0aW9uc10pO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChicmVha3BvaW50cykge1xuICAgICAgZm9yT3duKGJyZWFrcG9pbnRzLCBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKG9wdGlvbnMsIHdpZHRoKSB7XG4gICAgICAgIF90aGlzOS5icmVha3BvaW50cy5wdXNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhbd2lkdGgsIG1lcmdlKG1lcmdlKHt9LCBfdGhpczkub3B0aW9ucyksIG9wdGlvbnMpXSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMuaXNGaXhlZFdpZHRoID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGlzRml4ZWRXaWR0aChvcHRpb25zKSB7XG4gICAgcmV0dXJuICEhb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNbdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSgiZml4ZWRXaWR0aCIpXTtcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvMy5pc0xvb3AgPSBmdW5jdGlvbiBpc0xvb3AoKSB7XG4gICAgcmV0dXJuIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLm9wdGlvbnMudHlwZSA9PT0gTE9PUDtcbiAgfTtcblxuICBfcHJvdG8zLmlzQ2VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciA9IGZ1bmN0aW9uIGlzQ2VudGVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5mbycKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXMgPT09ICJjZW50ZXIiKSB7XG4gICAgICBpZiAodGhpcy5pc0xvb3AoKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLnR5cGUgPT09IFNMSURFKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5vcHRpb25zLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmltU3BhY2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8zLmlzVmVydGljYWwgPSBmdW5jdGlvbiBpc1ZlcnRpY2FsKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRpcmVjdGlvbiA9PT0gVFRCO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8zLmJ1aWxkQ2xhc3NlcyA9IGZ1bmN0aW9uIGJ1aWxkQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiBbQ0xBU1NfUk9PVCwgQ0xBU1NfUk9PVCArICItLSIgKyBvcHRpb25zLnR5cGUsIENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19ST09UICsgIi0tIiArIG9wdGlvbnMuZGlyZWN0aW9uLCBvcHRpb25zLmRyYWcgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1JPT1QgKyAiLS1kcmFnZ2FibGUiLCBvcHRpb25zLmlzTmF2aWdhdGlvbiAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfUk9PVCArICItLW5hdiIsIENMQVNTX0FDVElWRSwgIXRoaXMuY29uZmlnLmhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RkZW4gJiYgQ0xBU1NfUkVOREVSRURdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90bzMuYnVpbGRBdHRycyA9IGZ1bmN0aW9uIGJ1aWxkQXR0cnMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHJzKSB7XG4gICAgdmFyIGF0dHIgPSAiIjtcbiAgICBmb3JPd24oYXR0cnMsIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgYXR0ciArPSB2YWx1ZSA/ICIgIiArIGNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbFRvS2ViYWIoa2V5KSArICI9XFwiIiArIHZhbHVlICsgIlxcIiIgOiAiIjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgcmV0dXJuIGF0dHIudHJpbSgpO1xuICB9O1xuXG4gIF9wcm90bzMuYnVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkU3R5bGVzID0gZnVuY3Rpb24gYnVpbGRTdHlsZXMoc3R5bGVzKSB7XG4gICAgdmFyIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSA9ICIiO1xuICAgIGZvck93bihzdHlsZXMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc3R5bGUgKz0gIiAiICsgY2FtZWxUb0tlYmFiKGtleSkgKyAiOiIgKyB2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKyAiOyI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0eWxlLnRyaW0oKTtcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvMy5yZW5kZXJTbGlkZXMgPSBmdW5jdGlvbiByZW5kZXJTbGlkZXMoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBfdGhpczEwID0gdGhpcztcblxuICAgIHZhciB0YWcgPSB0aGlzLmNvbmZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cuc2xpZGVUYWc7XG4gICAgcmV0dXJuIHRoaXMuc2xpZGVzLm1hcChmdW5jdGlvbiAoY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbnQpIHtcbiAgICAgIHJldHVybiAiPCIgKyB0YWcgKyAiICIgKyBfdGhpczEwLmJ1aWxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJzKGNvbnRlbnQuYXR0cnMpICsgIj4iICsgKGNvbnRlbnQuaHRtbCB8fCAiIikgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjwvIiArIHRhZyArICI+IjtcbiAgICB9KS5qb2luKCIiKTtcbiAgfTtcblxuICBfcHJvdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvMy5jb3ZlciA9IGZ1bmN0aW9uIGNvdmVyKGNvbnRlbnQpIHtcbiAgICB2YXIgc3R5bGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGNvbnRlbnQuc3R5bGVzLFxuICAgICAgICBfY29udGVudCRodG1sID0gY29udGVudC5odCcKICAgICAgICAgICAgICAgICAgICAgICAgYidtbCxcbiAgICAgICAgaHRtbCA9IF9jb250ZW50JGh0bWwgPT09IHZvaWQgMCA/ICIiIDogXycKICAgICAgICAgICAgICAgICAgICAgICAgYidjb250ZW50JGh0bWw7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvdmVyICYmICF0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zLmxhenlMb2FkKSB7XG4gICAgICB2YXIgc3JjID0gaHRtbC5tYXRjaCgvPCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbWcuKj9zcmNcXHMqPVxccyooW1wnIl0pKC4rPylcXDEuKj8+Lyk7XG5cbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAoc3JjICYmIHNyY1syXSkge1xuICAgICAgICBzdHlsZXMuYmFja2dyb3VuZCA9ICJjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyL2NvdmVyIG5vLXJlcGVhdCB1cmwoXCciICsgc3JjWzJdICsgIlwnKSI7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zLmdlbmVyYXRlQ2xvbmVzID0gZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGdlbmVyYXRlQ2xvbmVzKGNvbnRlbnRzKSB7XG4gICAgdmFyIGNsYXNzZXMgPSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zLmNsYXNzZXM7XG4gICAgdmFyIGNvdW50ID0gdGhpcy5nZXRDbG9uZUNvdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpO1xuICAgIHZhciBzbGlkZXMgPSBjb250ZW50cy5zbGljZSgpO1xuXG4gICAgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxlIChzbGlkZXMubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgIHB1c2goc2xpZGVzLCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzKTtcbiAgICB9XG5cbiAgICBwdXNoKHNsaWRlcy5zbGljZSgtY291bnQpLnJldmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlKCksIHNsaWRlcy5zbGljZSgwLCBjb3VudCkpLmZvckVhY2goZnVuY3Rpb24gKGNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBpbmRleCkge1xuICAgICAgdmFyIGF0dHJzID0gYXNzaWduKHt9LCBjb250ZW50LmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHRycywge1xuICAgICAgICBjbGFzczogY29udGVudC5hdHRycy5jbGFzcyArICIgIiArIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc2VzLmNsb25lXG4gICAgICB9KTtcbiAgICAgIHZhciBjbG9uZSA9IGFzc2lnbignCiAgICAgICAgICAgICAgICAgICAgICAgIGIne30sIGNvbnRlbnQsIHtcbiAgICAgICAgYXR0cnM6IGF0dHJzXG4gICAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpbmRleCA8IGNvdW50ID8gY29udGVudHMudW5zaGlmdChjbG9uZSkgOiBjb250ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMucHVzaChjbG9uZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5nZXRDbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidDb3VudCA9IGZ1bmN0aW9uIGdldENsb25lQ291bnQoKSB7XG4gICAgaWYgKHRoaXMuaXNMbycKICAgICAgICAgICAgICAgICAgICAgICAgYidvcCgpKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChvcHRpb25zLmNsb25lcykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5jbG9uZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGVyUGFnZSA9IG1heC5hcHBseSh2b2lkIDAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLmJyZWFrcG9pbnRzLm1hcChmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zMiA9IF9yZWY2WzFdO1xuICAgICAgICByZXR1cm4gb3B0aW9uczIucGVyUGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gcGVyUGFnZSAqICgob3B0aW9ucy5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpY2tNYXhQYWdlcyB8fCAxKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcblxuICBfcHJvdG8zLnJlbmRlckFycm93cyA9IGZ1bmN0aW9uIHJlbmRlckFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3MoKSB7XG4gICAgdmFyIGh0bWwgPSAiIjtcbiAgICBodG1sICs9ICI8ZGl2IGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncz1cXCIiICsgdGhpcy5vcHRpb25zLmNsYXNzZXMuYXJyb3dzICsgIlxcIj4iO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBodG1sICs9IHRoaXMucmVuZGVyQXJyb3codHJ1ZSk7XG4gICAgaHRtbCArPSB0aGlzLnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXJBcnJvdyhmYWxzZSk7XG4gICAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGh0bWw7XG4gIH07XG5cbiAgX3Byb3RvMy5yZW5kZXJBcnJvdyA9IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW5kZXJBcnJvdyhwcmV2KSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLFxuICAgICAgICBjbGFzc2VzID0gX3RoaXMkb3B0aW9ucy5jbGFzc2VzLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgaTE4biA9IF90aGlzJG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgYXR0cnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0ge1xuICAgICAgY2xhc3M6IGNsYXNzZXMuYXJyb3cgKyAiICIgKyAocHJldiA/IGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLnByZXYgOiBjbGFzc2VzLm5leHQpLFxuICAgICAgdHlwZTogImJ1dHRvbiIsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgYXJpYUxhYmVsOiBwcmV2ID8gaTE4bi5wcmV2IDogaTE4bi5uZXh0XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG4gICAgcmV0dXJuICI8YnV0dG9uICIgKyB0aGlzLmJ1aWxkQXR0cnMoYXR0cnMpICsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICI+PHN2ZyB4bWxucz1cXCIiICsgWE1MX05BTUVfU1BBQ0UgKyAiXFwiIHZpZXdCb3gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIjAgMCAiICsgU0laRSArICIgIiArIFNJWkUgKyAiXFwiIHdpZHRoPVxcIiIgKyBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0laRSArICJcXCIgaGVpZ2h0PVxcIiIgKyBTSVpFICsgIlxcIj48cGF0aCBkPVxcIiIgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHRoaXMub3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCkgKyAiXFwiIC8+PC9zdmc+PC9idXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9uPiI7XG4gIH07XG5cbiAgX3Byb3RvMy5odG1sID0gZnVuY3Rpb24gaHRtbCgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIF90aGlzJGNvbmZpZyA9IHRoaXMuY29uZmlnLFxuICAgICAgICByb290Q2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzID0gX3RoaXMkY29uZmlnLnJvb3RDbGFzcyxcbiAgICAgICAgbGlzdFRhZyA9IF90aGlzJCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25maWcubGlzdFRhZyxcbiAgICAgICAgYXJyb3dzID0gX3RoaXMkY29uZmlnLmFycm93cycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIGJlZm9yZVRyYWNrID0gX3RoaXMkY29uZmlnLmJlZm9yZVRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgYWZ0ZXJUcmFjayA9IF90aGlzJGNvbmZpZy5hZnRlclRyYWNrLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgc2xpZGVyID0gX3RoaXMkY29uZmlnLnNsaWRlcixcbiAgICAgICAgYmVmb3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlciA9IF90aGlzJGNvbmZpZy5iZWZvcmVTbGlkZXIsXG4gICAgICAgIGFmdGVyU2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciA9IF90aGlzJGNvbmZpZy5hZnRlclNsaWRlcjtcbiAgICB2YXIgaHRtbCA9ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgICBodG1sICs9ICI8ZGl2IGlkPVxcIiIgKyB0aGlzLmlkICsgIlxcIiBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M9XFwiIiArIHRoaXMuYnVpbGRDbGFzc2VzKCkgKyAiICIgKyAocm9vdENsYXNzIHx8ICIiJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgKyAiXFwiPiI7XG4gICAgaHRtbCArPSAiPHN0eWxlPiIgKyB0aGlzLlN0eWxlLmJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZCgpICsgIjwvc3R5bGU+IjtcblxuICAgIGlmIChzbGlkZXIpIHtcbiAgICAgIGh0bScKICAgICAgICAgICAgICAgICAgICAgICAgYidsICs9IGJlZm9yZVNsaWRlciB8fCAiIjtcbiAgICAgIGh0bWwgKz0gIjxkaXYgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzPVxcInNwbGlkZV9fc2xpZGVyXFwiPiI7XG4gICAgfVxuXG4gICAgaHRtbCArPSBiZWZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlVHJhY2sgfHwgIiI7XG5cbiAgICBpZiAoYXJyb3dzKSB7XG4gICAgICBodG1sICs9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLnJlbmRlckFycm93cygpO1xuICAgIH1cblxuICAgIGh0bWwgKz0gIjxkaXYgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzPVxcInNwbGlkZV9fdHJhY2tcXCI+IjtcbiAgICBodG1sICs9ICI8IiArIGxpc3RUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnICsgIiBjbGFzcz1cXCJzcGxpZGVfX2xpc3RcXCI+IjtcbiAgICBodG1sICs9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLnJlbmRlclNsaWRlcygpO1xuICAgIGh0bWwgKz0gIjwvIiArIGxpc3RUYWcgKyAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJz4iO1xuICAgIGh0bWwgKz0gIjwvZGl2PiI7XG4gICAgaHRtbCArPSBhZnRlclRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCAiIjtcblxuICAgIGlmIChzbGlkZXIpIHtcbiAgICAgIGh0bWwgKz0gIjwvZGl2PicKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICAgICAgaHRtbCArPSBhZnRlclNsaWRlciB8fCAiIjtcbiAgICB9XG5cbiAgICBoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RtbCArPSAiPC9kaXY+IjtcbiAgICByZXR1cm4gaHRtbDtcbiAgfTtcblxuICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZVJlbmRlcmVyO1xufSgpO1xuXG5leHBvcnQgeyBDTEFTU0VTLCBDTEFTU19BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NUSVZFLCBDTEFTU19BUlJPVywgQ0xBU1NfQVJST1dTLCBDTEFTU19BUlJPV19ORVhULCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfQVJST1dfUFJFViwgQ0xBU1NfQ0xPTkUsIENMQVNTX0NPTlRBSU5FUiwgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX0ZPQ1VTX0lOLCBDTEFTU19JTklUSUFMSVpFRCwgQ0xBU1NfTElTVCwgQ0xBU1NfTE9BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RJTkcsIENMQVNTX05FWFQsIENMQVNTX09WRVJGTE9XLCBDTEFTU19QQUdJTkFUSU9OLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfUEFHSU5BVElPTl9QQUdFLCBDTEFTU19QUkVWLCBDTEFTU19QUk9HUkVTUywgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1BST0dSRVNTX0JBUiwgQ0xBU1NfUk9PVCwgQ0xBU1NfU0xJREUsIENMQVNTX1NQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lOTkVSLCBDTEFTU19TUiwgQ0xBU1NfVE9HR0xFLCBDTEFTU19UT0dHTEVfUEFVU0UsIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19UT0dHTEVfUExBWSwgQ0xBU1NfVFJBQ0ssIENMQVNTX1ZJU0lCTEUsIERFRkFVTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUUywgRVZFTlRfQUNUSVZFLCBFVkVOVF9BUlJPV1NfTU9VTlRFRCwgRVZFTlRfQVJST1dTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19VUERBVEVELCBFVkVOVF9BVVRPUExBWV9QQVVTRSwgRVZFTlRfQVVUT1BMQVlfUExBWSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcsIEVWRU5UX0NMSUNLLCBFVkVOVF9ERVNUUk9ZLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfRFJBRywgRVZFTlRfRFJBR0dFRCwgRVZFTlRfRFJBR0dJTkcsIEVWRU5UX0VOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RfSU5ERVhfQ0hBTkdFRCwgRVZFTlRfSElEREVOLCBFVkVOVF9JTkFDVElWRSwgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0xBWllMT0FEX0xPQURFRCwgRVZFTlRfTU9VTlRFRCwgRVZFTlRfTU9WRSwgRVZFTlRfTScKICAgICAgICAgICAgICAgICAgICAgICAgYidPVkVELCBFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQsIEVWRU5UX09WRVJGTE9XLCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUEFHSU5BVElPTl9NT1VOVEVELCBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQsIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9SRUFEWSwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfUkVTSVpFLCBFVkVOVF9SRVNJWkVELCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfU0NST0xMLCBFVkVOVF9TQ1JPTExFRCwgRVZFTlRfU0hJRlRFRCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NMSURFX0tFWURPV04sIEVWRU5UX1VQREFURUQsIEVWRU5UX1ZJU0lCTEUsIEV2ZW50QmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlciwgRXZlbnRJbnRlcmZhY2UsIEZBREUsIExPT1AsIExUUiwgUlRMLCBSZXF1ZXN0SScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsLCBTTElERSwgU1RBVFVTX0NMQVNTRVMsIFNwbGlkZSwgU3BsaWRlUmVuZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyLCBTdGF0ZSwgVFRCLCBUaHJvdHRsZSwgU3BsaWRlIGFzIGRlZmF1bHQgfTtcbicsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUuZXNtLmpzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgT2JqZWN0LmRlZmluZVByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsgd3JpdGFibGU6IGZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbi8qIVxuICogU3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqc1xuICogVmVyc2lvbiAgOiA0LjEuNFxuICogTGljZW5zZSAgOiBNSVRcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb3B5cmlnaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhXG4gKi9cbnZhciBNRURJQV9QUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRkVSU19SRURVQ0VEX01PVElPTiA9ICIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlZHVjZSkiO1xudmFyIENSRUFURUQgPSAxO1xudmFyIE1PVU5URUQgPSAyOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbnZhciBJRExFID0gMztcbnZhciBNT1ZJTkcgPSA0O1xudmFyIFNDUk9MTElORycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSA1O1xudmFyIERSQUdHSU5HID0gNjtcbnZhciBERVNUUk9ZRUQgPSA3O1xudicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBTVEFURVMgPSB7XG4gIENSRUFURUQ6IENSRUFURUQsXG4gIE1PVU5URUQ6IE1PVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVEVELFxuICBJRExFOiBJRExFLFxuICBNT1ZJTkc6IE1PVklORyxcbiAgU0NSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMTElORzogU0NST0xMSU5HLFxuICBEUkFHR0lORzogRFJBR0dJTkcsXG4gIERFU1RSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidZRUQ6IERFU1RST1lFRFxufTtcblxuZnVuY3Rpb24gZW1wdHkoYXJyYXkpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFycmF5Lmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIHNsaWNlKGFycmF5TGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2UsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuY2FsbChhcnJheUxpa2UsIHN0YXJ0LCBlbmQpO1xufVxuXG5mdW5jdGlvbiBhcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbHkoZnVuYykge1xuICByZXR1cm4gZnVuYy5iaW5kLmFwcGx5KGZ1bmMsIFtudWxsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10uY29uY2F0KHNsaWNlKGFyZ3VtZW50cywgMSkpKTtcbn1cblxudmFyIG5leHRUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ljayA9IHNldFRpbWVvdXQ7XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuZnVuY3Rpb24gcmFmKGZ1bmMpIHtcbiAgcmV0dXJuIHJlcXVlc3RBbmltJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0aW9uRnJhbWUoZnVuYyk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZih0eXBlLCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ViamVjdCkge1xuICByZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09IHR5cGU7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG5mdW5jdGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAhaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTnVsbChzdWJqZWN0KSAmJiB0eXBlT2YoIm9iamVjdCIsIHN1YmplY3QpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xudmFyIGlzRnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uID0gYXBwbHkodHlwZU9mLCAiZnVuY3Rpb24iKTtcbnZhciBpc1N0cmluZyA9IGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBseSh0eXBlT2YsICJzdHJpbmciKTtcbnZhciBpc1VuZGVmaW5lZCA9IGFwcGx5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eXBlT2YsICJ1bmRlZmluZWQiKTtcblxuZnVuY3Rpb24gaXNOdWxsKHN1YmplY3QpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIHJldHVybiBzdWJqZWN0ID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MRWxlbWVudChzdWJqZWN0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN1YmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluc3RhbmNlb2YgKHN1YmplY3Qub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgd2luZG93KS5IVE1MRWxlbWVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZm9yRWFjaCh2YWx1ZXMsIGl0ZXJhdGVlKSB7XG4gIHRvQXJyYXkodicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlcykuZm9yRWFjaChpdGVyYXRlZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyhhcnJheSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YodmFsdWUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA+IC0xO1xufVxuXG5mdW5jdGlvbiBwdXNoKGFycmF5LCBpdGVtcykge1xuICBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkucHVzaC5hcHBseShhcnJheSwgdG9BcnJheShpdGVtcykpO1xuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5O1xufVxuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhlbG0sIGNsYXNzZXMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhZGQpIHtcbiAgaWYgKGVsbSkge1xuICAgIGZvckVhY2goY2xhc3NlcywgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIChuYW1lKSB7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBlbG0uY2xhc3NMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdFthZGQgPyAiYWRkIiA6ICJyZW1vdmUiXShuYW1lKTtcbiAgICAgIH1cbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ2xhc3MoZWxtLCBjbGFzc2VzKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB0b2dnbGVDbGFzcyhlbG0sIGlzU3RyaW5nKGNsYXNzZXMpID8gY2xhc3Nlcy5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaXQoIiAiKSA6IGNsYXNzZXMsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBhcHBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgZm9yRWFjaChjaGlsZHJlbiwgcGFyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5hcHBlbmRDaGlsZC5iaW5kKHBhcmVudCkpO1xufVxuXG5mdW5jdGlvbiBiZWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JlKG5vZGVzLCByZWYpIHtcbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24gKG5vZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gICAgdmFyIHBhcmVudCA9IChyZWYgfHwgbm9kZSkucGFyZW50Tm9kZTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCByZWYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXMoZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQoZWxtKSAmJiAoZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbVsibXNNYXRjaGVzU2VsZWN0b3IiXSB8fCBlbG0ubWF0Y2hlcykuY2FsbChlbG0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKHBhcmVudCwgc2VsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdG9yKSB7XG4gIHZhciBjaGlsZHJlbjIgPSBwYXJlbnQgPyBzbGljZShwYXJlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNoaWxkcmVuKSA6IFtdO1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbjIuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyhjaGlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsIHNlbGVjdG9yKTtcbiAgfSkgOiBjaGlsZHJlbjI7XG59XG5cbmZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaGlsZChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA/IGNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZHJlbihwYXJlbnQsIHNlbGVjdG9yKVswXSA6IHBhcmVudC5maXJzdEVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Q2hpbGQ7XG59XG5cbnZhciBvd25LZXlzID0gT2JqZWN0LmtleXM7XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSwgcmlnaHQpIHtcbiAgaWYgKG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QpIHtcbiAgICAocmlnaHQgPyBvd25LZXlzKG9iamVjdCkucmV2ZXJzZSgpIDogbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3bktleXMob2JqZWN0KSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V5ICE9PSAiX19wcm90b19fIiAmJiBpdGVyYXRlZShvYmplY3Rba2V5XSwga2V5KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gYXNzaWduKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICBmb3JPd24oc291cmNlLCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIG1lcmdlKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIChzb3VyY2UpIHtcbiAgICBmb3JPd24oc291cmNlLCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgb2JqZWN0W2tleV0gPSB2YWx1ZS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gbWVyZ2UoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t9LCBpc09iamVjdChvYmplY3Rba2V5XSkgPyBvYmplY3Rba2V5XSA6IHt9LCB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXMpIHtcbiAgZm9yRWFjaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5cyB8fCBvd25LZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXRlIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZShlbG1zLCBhdHRycykge1xuICBmb3JFYWNoKGVsbXMsIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZWxtKSB7XG4gICAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGF0dHIpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbG0gJiYgZWxtLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICB9KTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUoZWxtcywgYXR0cnMsIHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSkge1xuICBpZiAoaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgZm9yT3duKGF0dHJzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gKHZhbHVlMiwgbmFtZSkge1xuICAgICAgc2V0QXR0cmlidXRlKGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21zLCBuYW1lLCB2YWx1ZTIpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKGVsbXMsIGZ1bmN0aW9uIChlbG0pIHtcbiAgICAgIGlzTnVsbCh2YWx1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IHZhbHVlID09PSAiIiA/IHJlbW92ZUF0dHJpYnV0ZShlbG0sIGF0dHJzKSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbG0uc2V0QXR0cmlidXRlKGF0dHJzLCBTdHJpbmcodmFsdWUpKTtcbiAgICB9KTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlKHRhZywgYXR0cnMsIHBhcmVudCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKGF0dHJzKSB7XG4gICAgaXNTdHJpbmcoYXR0cnMpID8gYWRkQ2xhc3MoZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSwgYXR0cnMpIDogc2V0QXR0cmlidXRlKGVsbSwgYXR0cnMpO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudCAmJiBhcHBlbmQocGFyZW50LCBlbG0pO1xuICByZXR1cm4gZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gc3R5bGUoZWxtLCBwcm9wLCB2YWx1ZSkge1xuICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiBnZXRDb21wdXRlZFN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZShlbG0pW3Byb3BdO1xuICB9XG5cbiAgaWYgKCFpc051bGwodmFsdWUpKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGVsbS5zdHlsZVtwcm9wXSA9ICIiICsgdmFsdWU7XG4gIH1cbn1cblxuZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGRpc3BsYXkoZWxtLCBkaXNwbGF5Mikge1xuICBzdHlsZShlbG0sICJkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheSIsIGRpc3BsYXkyKTtcbn1cblxuZnVuY3Rpb24gZm9jdXMoZWxtKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBlbG1bInNldEFjdGl2ZSJdICYmIGVsbVsic2V0QWN0aXZlIl0oKSB8fCBlbG0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvY3VzKHtcbiAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gIH0pO1xufVxuXG5mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZ2V0QXR0cmlidXRlKGVsbSwgYXR0cikge1xuICByZXR1cm4gZWxtLmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBdHRyaWJ1dGUoYXR0cik7XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsbSwgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzTmFtZSkge1xuICByZXR1cm4gZWxtICYmIGVsbS5jbGFzc0xpc3QuY29udGFpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zKGNsYXNzTmFtZSk7XG59XG5cbmZ1bmN0aW9uIHJlY3QodGFyZ2V0KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gcmVtb3ZlKG5vZGVzKSB7XG4gIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAobm9kZSkge1xuICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH0pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gcGFyc2VIdG1sKGh0bWwpIHtcbiAgcmV0dXJuIGNoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZChuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICJ0ZXh0L2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG1sIikuYm9keSk7XG59XG5cbmZ1bmN0aW9uIHByZXZlbnQoZSwgc3RvcFByb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdhdGlvbikge1xuICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgaWYgKHN0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUHJvcGFnYXRpb24pIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyeShwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBwYXJlbnQgJiYgcGFyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gcXVlcnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gc2xpYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkgOiBbXTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICB0b2cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1lT2YoZSkge1xuICByZXR1cm4gZS50aW1lU3RhbXA7XG59XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1bml0KHZhbHVlKSB7XG4gIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiB2YWx1ZSA/IHZhbHVlICsgInB4IiA6ICIiO1xufVxuXG52YXIgUFJPSkVDVF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ09ERSA9ICJzcGxpZGUiO1xudmFyIERBVEFfQVRUUklCVVRFID0gImRhdGEtIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUk9KRUNUX0NPREU7XG5cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCJbIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyBQUk9KRUNUX0NPREUgKyAiXSAiICsgKG1lc3NhZ2UgfHwgIiIpKTtcbiAgfVxufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxudmFyIG1pbiA9IE1hdGgubWluLFxuICAgIG1heCA9IE1hdGgubWF4LFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmbG9vciA9IE1hdGguZmxvb3IsXG4gICAgY2VpbCA9IE1hdGguY2VpbCxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWJzID0gTWF0aC5hYnM7XG5cbmZ1bmN0aW9uIGFwcHJveGltYXRlbHlFcXVhbCh4LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSwgZXBzaWxvbikge1xuICByZXR1cm4gYWJzKHggLSB5KSA8IGVwc2lsb247JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiBiZXR3ZWVuKG51bWJlciwgeCwgeSwgZXhjbHVzaXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgdmFyIG1heGltdW0gPSBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F4KHgsIHkpO1xuICByZXR1cm4gZXhjbHVzaXZlID8gbWluaW11bSA8IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgbnVtYmVyIDwgbWF4aW11bSA6IG1pbmltdW0gPD0gbnVtYmVyICYmIG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgPD0gbWF4aW11bTtcbn1cblxuZnVuY3Rpb24gY2xhbXAobnVtYmVyLCB4LCB5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgdmFyIG1heGltdW0gPSBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F4KHgsIHkpO1xuICByZXR1cm4gbWluKG1heChtaW5pbXVtLCBudW1iZXIpLCBtYXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW11bSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4gKyh4ID4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzApIC0gKyh4IDwgMCk7XG59XG5cbmZ1bmN0aW9uIGNhbWVsVG9LZWJhYihzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL2csICIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGZvcm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXQoc3RyaW5nLCByZXBsYWNlbWVudHMpIHtcbiAgZm9yRWFjaChyZXBsYWNlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBmdW5jdGlvbiAocmVwbGFjZW1lbnQpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlcGxhY2UoIiVzIiwgIiIgKyByZXBsYWNlbWVudCk7XG4gIH0pO1xuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcbn1cblxuZnVuY3Rpb24gcGFkKG51bWJlcikge1xuICByZXR1cm4gbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciA8IDEwID8gIjAiICsgbnVtYmVyIDogIiIgKyBudW1iZXI7XG59XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgaWRzID0ge307XG5cbmZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuICIiICsgcHJlZml4ICsgcGFkKGlkc1twcmVmaXhdID0gKGlkc1twcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZml4XSB8fCAwKSArIDEpO1xufVxuXG5mdW5jdGlvbiBFdmVudEJpbmRlcigpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcblxuICBmdW5jdGlvbiBiaW5kKHRhcmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRzLCBldmVudHMsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgZm9yRWFjaEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCh0YXJnZXRzLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNwYWNlKSB7XG4gICAgICB2YXIgaXNFdmVudFRhcmdldCA9ICgiYWRkRXZlbnRMaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVuZXIiIGluIHRhcmdldCk7XG4gICAgICB2YXIgcmVtb3ZlciA9IGlzRXZlbnRUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0ID8gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0YXJnZXQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMpIDogdGFyZ2V0WyJyZW1vdmVMaXN0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIiXS5iaW5kKHRhcmdldCwgY2FsbGJhY2spO1xuICAgICAgaXNFdmVudFRhcmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zKSA6IHRhcmdldFsiYWRkTGlzdGVuZXIiXShjYWxsYmFjayk7XG4gICAgICBsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVuZXJzLnB1c2goW3RhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSwgY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCByZW1vdmVyXSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1bmJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldHMsIGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICBmb3JFYWNoRXZlbnQodGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmdldHMsIGV2ZW50cywgZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChsaXN0ZW5lcikge1xuICAgICAgICBpZiAobGlzdGVuZXJbMF0gPT09IHRhcmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgJiYgbGlzdGVuZXJbMV0gPT09IGV2ZW50ICYmIGxpc3RlbmVyWzJdID09PSBuYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNwYWNlICYmICghY2FsbGJhY2sgfHwgbGlzdGVuZXJbM10gPT09IGNhbGxiYWNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpIHtcbiAgICAgICAgICBsaXN0ZW5lcls0XSgpO1xuICAgICAgICAgIHJldHVybiBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKHRhcmdldCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHR5cGUsIGRldGFpbCkge1xuICAgIHZhciBlO1xuICAgIHZhciBidWJibGVzID0gdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XG5cbiAgICBpZiAodHlwZW9mIEN1c3RvbUV2ZW50ID09PSAiZnVuY3Rpb24iKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgZSA9IG5ldyBDdXN0b21FdmVudCh0eXBlLCB7XG4gICAgICAgIGJ1YmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVzOiBidWJibGVzLFxuICAgICAgICBkZXRhaWw6IGRldGFpbFxuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDdXN0b21FdmVudCIpO1xuICAgICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgYnViJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JsZXMsIGZhbHNlLCBkZXRhaWwpO1xuICAgIH1cblxuICAgIHRhcmdldC5kaXNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hFdmVudChlKTtcbiAgICByZXR1cm4gZTtcbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoRXZlbnQodGFyZ2V0cywgZXZlbnRzLCBpdGVyYXRlZSkge1xuICAgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKHRhcmdldHMsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIHRhcmdldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uIChldmVudHMyKSB7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudHMyLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROUykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBldmVudE5TLnNwbGl0KCIuIik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGl0ZXJhdGVlKHRhcmdldCwgZnJhZ21lbnRbMF0sIGZyYWdtZW50WzFdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gZGVzdHJveSgpIHtcbiAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGRhdGEpIHtcbiAgICAgIGRhdGFbNF0oKTtcbiAgICB9KTtcbiAgICBlbXB0eSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdGVuZXJzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmluZDogYmluZCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdW5iaW5kOiB1bmJpbmQsXG4gICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95OiBkZXN0cm95XG4gIH07XG59XG5cbnZhciBFVkVOVF9NT1VOVEVEID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJtb3VudGVkIjtcbnZhciBFVkVOVF9SRUFEWSA9ICJyZWFkeSI7XG52YXIgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX01PVkUgPSAibW92ZSI7XG52YXIgRVZFTlRfTU9WRUQgPSAibW92ZWQiO1xudmFyIEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9DTElDSyA9ICJjbGljayI7XG52YXIgRVZFTlRfQUNUSVZFID0gImFjdGl2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX0lOQUNUSVZFID0gImluYWN0aXZlIjtcbnZhciBFVkVOVF9WSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTSUJMRSA9ICJ2aXNpYmxlIjtcbnZhciBFVkVOVF9ISURERU4gPSAiaGlkZGVuIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgRVZFTlRfUkVGUkVTSCA9ICJyZWZyZXNoIjtcbnZhciBFVkVOVF9VUERBVEVEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJ1cGRhdGVkIjtcbnZhciBFVkVOVF9SRVNJWkUgPSAicmVzaXplIjtcbnZhciBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfUkVTSVpFRCA9ICJyZXNpemVkIjtcbnZhciBFVkVOVF9EUkFHID0gImRyYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbnZhciBFVkVOVF9EUkFHR0lORyA9ICJkcmFnZ2luZyI7XG52YXIgRVZFTlRfRFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUdHRUQgPSAiZHJhZ2dlZCI7XG52YXIgRVZFTlRfU0NST0xMID0gInNjcm9sbCI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEVWRU5UX1NDUk9MTEVEID0gInNjcm9sbGVkIjtcbnZhciBFVkVOVF9PVkVSRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMT1cgPSAib3ZlcmZsb3ciO1xudmFyIEVWRU5UX0RFU1RST1kgPSAiZGVzdHJveSI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIEVWRU5UX0FSUk9XU19NT1VOVEVEID0gImFycm93czptb3VudGVkIjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgRVZFTlRfQVJST1dTX1VQREFURUQgPSAiYXJyb3dzOnVwZGF0ZWQiO1xudmFyIEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9QQUdJTkFUSU9OX01PVU5URUQgPSAicGFnaW5hdGlvbjptb3VudGVkIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgRVZFTlRfUEFHSU5BVElPTl9VUERBVEVEID0gInBhZ2luYXRpb246dXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQiO1xudmFyIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCA9ICJuYXZpZ2F0aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudGVkIjtcbnZhciBFVkVOVF9BVVRPUExBWV9QTEFZID0gImF1dG9wbGF5OnBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5IjtcbnZhciBFVkVOVF9BVVRPUExBWV9QTEFZSU5HID0gImF1dG9wbGF5OnBsYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nIjtcbnZhciBFVkVOVF9BVVRPUExBWV9QQVVTRSA9ICJhdXRvcGxheTpwYXVzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX0xBWllMT0FEX0xPQURFRCA9ICJsYXp5bG9hZDpsb2FkZWQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBFVkVOVF9TTElERV9LRVlET1dOID0gInNrIjtcbnZhciBFVkVOVF9TSElGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCA9ICJzaCI7XG52YXIgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQgPSAiZWkiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZnVuY3Rpb24gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMikge1xuICB2YXIgYnVzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIgPyBTcGxpZGUyLmV2ZW50LmJ1cyA6IGRvY3VtZW50LmNyZWF0ZURvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWVudEZyYWdtZW50KCk7XG4gIHZhciBiaW5kZXIgPSBFdmVudEJpbmRlcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcblxuICBmdW5jdGlvbiBvbihldmVudHMsIGNhbGxiYWNrKSB7XG4gICAgYmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlci5iaW5kKGJ1cywgdG9BcnJheShldmVudHMpLmpvaW4oIiAiKSwgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIChlKSB7XG4gICAgICBjYWxsYmFjay5hcHBseShjYWxsYmFjaywgaXNBcnJheSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5kZXRhaWwpID8gZS5kZXRhaWwgOiBbXSk7XG4gICAgfSk7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZW1pdChldmVudCkge1xuICAgIGJpbmRlci5kaXNwYXRjaChidXMsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCwgc2xpY2UoYXJndW1lbnRzLCAxKSk7XG4gIH1cblxuICBpZiAoU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIpIHtcbiAgICBTcGxpZGUyLmV2ZW50Lm9uKEVWRU5UX0RFU1RST1ksIGJpbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZGVzdHJveSk7XG4gIH1cblxuICByZXR1cm4gYXNzaWduKGJpbmRlciwge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBidXM6IGJ1cyxcbiAgICBvbjogb24sXG4gICAgb2ZmOiBhcHBseShiaW5kZXIudW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmluZCwgYnVzKSxcbiAgICBlbWl0OiBlbWl0XG4gIH0pO1xufVxuXG5mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUmVxdWVzdEludGVydmFsKGludGVydmFsLCBvbkludGVydmFsLCBvblVwZGF0ZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxpbWl0KSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdztcbiAgdmFyIHN0YXJ0VGltZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciByYXRlID0gMDtcbiAgdmFyIGlkO1xuICB2YXIgcGF1c2VkID0gdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XG4gIHZhciBjb3VudCA9IDA7XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoIXBhdXNlZCkge1xuICAgICAgcmF0ZSA9IGludGVydmFsID8gbWluKCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbm93KCkgLSBzdGFydFRpbWUpIC8gaW50ZXJ2YWwsIDEpIDogMTtcbiAgICAgIG9uVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZSAmJiBvblVwZGF0ZShyYXRlKTtcblxuICAgICAgaWYgKHJhdGUgPj0gMSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgb25JbnRlcnZhbCgpO1xuICAgICAgICBzdGFydFRpbWUgPSBub3coKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgICAgICAgaWYgKGxpbWl0ICYmICsrY291bnQgPj0gbGltaXQpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGlkID0gcmFmKHVwZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHN0YXJ0KHJlc3VtZSkge1xuICAgIHJlc3VtZSB8fCBjYW5jZWwoKTtcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnRUaW1lID0gbm93KCkgLSAocmVzdW1lID8gcmF0ZSAqIGludGVydmFsIDogMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgIGlkID0gcmFmKHVwZGF0ZSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG5cbiAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcGF1c2VkID0gdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiByZXdpbmQoKSB7XG4gICAgc3RhcnRUaW1lID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG5vdygpO1xuICAgIHJhdGUgPSAwO1xuXG4gICAgaWYgKG9uVXBkYXRlKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb25VcGRhdGUocmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbmNlbCgpIHtcbiAgICBpZCAmJiBjYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJhdGUgPSAwO1xuICAgIGlkID0gMDtcbiAgICBwYXVzZWQgPSB0cnVlO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIGZ1bmN0aW9uIHNldCh0aW1lKSB7XG4gICAgaW50ZXJ2YWwgPSB0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUGF1c2VkKCkge1xuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2VkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJld2luZDogcmV3aW5kLFxuICAgIHBhdXNlOiBwYXVzZSxcbiAgICBjYW5jZWw6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYW5jZWwsXG4gICAgc2V0OiBzZXQsXG4gICAgaXNQYXVzZWQ6IGlzUGF1c2VkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xufVxuXG5mdW5jdGlvbiBTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBzdGF0ZSA9IGluaXRpYWxTdGF0ZTtcblxuICBmdW5jdGlvbiBzZXQodmFsdWUpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgc3RhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzKHN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgICByZXR1cm4gaW5jbHVkZXModG9BcnJheShzdGF0ZXMpLCBzdGF0ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXQ6IHNldCxcbiAgICBpczogaXNcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG59XG5cbmZ1bmN0aW9uIFRocm90dGxlKGZ1bmMsIGR1cmF0aW9uKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoZHVyYXRpb24gfHwgMCwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmMsIG51bGwsIDEpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGludGVydicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbC5pc1BhdXNlZCgpICYmIGludGVydmFsLnN0YXJ0KCk7XG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBNZWRpYShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHN0YXRlID0gU3BsaWRlMi5zdGF0ZTtcbiAgdmFyIGJyZWFrcG9pbnRzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMuYnJlYWtwb2ludHMgfHwge307XG4gIHZhciByZWR1Y2VkTW90aW9uID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMucmVkdWNlZE1vdGlvbiB8fCB7fTtcbiAgdmFyIGJpbmRlciA9IEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEJpbmRlcigpO1xuICB2YXIgcXVlcmllcyA9IFtdO1xuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXR1cCgpIHtcbiAgICB2YXIgaXNNaW4gPSBvcHRpb25zLm1lZGlhUXVlcnkgPT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAibWluIjtcbiAgICBvd25LZXlzKGJyZWFrcG9pbnRzKS5zb3J0KGZ1bmN0aW9uICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgbSkge1xuICAgICAgcmV0dXJuIGlzTWluID8gK24gLSArbSA6ICttIC0gK247XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmVnaXN0ZXIoYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWFrcG9pbnRzW2tleV0sICIoIiArIChpc01pbiA/ICJtaW4iIDogIm1heCIpICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICItd2lkdGg6IiArIGtleSArICJweCkiKTtcbiAgICB9KTtcbiAgICByZWdpc3RlcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVkdWNlZE1vdGlvbiwgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTik7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHVwZGF0ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveShjb21wbGV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidseSkge1xuICAgIGlmIChjb21wbGV0ZWx5KSB7XG4gICAgICBiaW5kZXIuZGVzdHJveScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcihvcHRpb25zMiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5TGlzdCA9IG1hdGNoTWVkaWEocXVlcnkpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBiaW5kZXIuYmluZChxdWVyeUxpc3QsICJjaGFuZ2UiLCB1cGRhdGUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBxdWVyaWVzLnB1c2goW29wdGlvbnMyLCBxdWVyeUxpc3RdKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdmFyIGRlc3Ryb3llZCA9IHN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyhERVNUUk9ZRUQpO1xuICAgIHZhciBkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb247XG4gICAgdmFyIG1lcmdlZCA9IHF1ZXJpZXMucmVkdWNlKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobWVyZ2VkMiwgZW50cnkpIHtcbiAgICAgIHJldHVybiBtZXJnZShtZXJnZWQyLCBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cnlbMV0ubWF0Y2hlcyA/IGVudHJ5WzBdIDoge30pO1xuICAgIH0sIHt9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgb21pdChvcHRpb25zKTtcbiAgICBzZXQobWVyZ2VkKTtcblxuICAgIGlmIChvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5kZXN0cm95KSB7XG4gICAgICBTcGxpZGUyLmRlc3Ryb3kob3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSA9PT0gImNvbXBsZXRlbHkiKTtcbiAgICB9IGVsc2UgaWYgKGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5ZWQpIHtcbiAgICAgIGRlc3Ryb3kodHJ1ZSk7XG4gICAgICBTcGxpZGUyLm1vdW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3Rpb24gIT09IG9wdGlvbnMuZGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiAmJiBTcGxpZGUyLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gcmVkdWNlKGVuYWJsZSkge1xuICAgIGlmIChtYXRjaE1lZGlhKE1FRElBXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUkVGRVJTX1JFRFVDRURfTU9USU9OKS5tYXRjaGVzKSB7XG4gICAgICBlbmFibGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gbWVyZ2Uob3B0aW9ucywgcmVkdWNlZE1vdGlvbikgOiBvbWl0KG9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvd25LZXlzKHJlZHVjZWRNb3Rpb24pKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gc2V0KG9wdHMsIGJhc2UsIG5vdGlmeSkge1xuICAgIG1lcmdlKG9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRzKTtcbiAgICBiYXNlICYmIG1lcmdlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucyksIG9wdHMpO1xuXG4gICAgaWYgKG5vdGlmeSB8fCAhc3RhdGUuaXMoQ1JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FURUQpKSB7XG4gICAgICBTcGxpZGUyLmVtaXQoRVZFTlRfVVBEQVRFRCwgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2V0dXA6IHNldHVwLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHJlZHVjZTogcmVkdWNlLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXQ6IHNldFxuICB9O1xufVxuXG52YXIgQVJST1cgPSAiQXJyb3ciO1xudmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBUlJPV19MRUZUID0gQVJST1cgKyAiTGVmdCI7XG52YXIgQVJST1dfUklHSFQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1cgKyAiUmlnaHQiO1xudmFyIEFSUk9XX1VQID0gQVJST1cgKyAiVXAiO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBBUlJPV19ET1dOID0gQVJST1cgKyAiRG93biI7XG52YXIgTFRSID0gImx0ciI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIFJUTCA9ICJydGwiO1xudmFyIFRUQiA9ICJ0dGIiO1xudmFyIE9SSUVOVEFUSU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTl9NQVAgPSB7XG4gIHdpZHRoOiBbImhlaWdodCJdLFxuICBsZWZ0OiBbInRvcCIsICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlnaHQiXSxcbiAgcmlnaHQ6IFsiYm90dG9tIiwgImxlZnQiXSxcbiAgeDogWyJ5Il0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICBYOiBbIlkiXSxcbiAgWTogWyJYIl0sXG4gIEFycm93TGVmdDogW0FSUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV19VUCwgQVJST1dfUklHSFRdLFxuICBBcnJvd1JpZ2h0OiBbQVJST1dfRE9XTiwgQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSUk9XX0xFRlRdXG59O1xuXG5mdW5jdGlvbiBEaXJlY3Rpb24oU3BsaWRlMiwgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIGZ1bmN0aW9uIHJlc29sdmUocHJvcCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F4aXNPbmx5LCBkaXJlY3Rpb24pIHtcbiAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBpbmRleCA9IGRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPT09IFJUTCAmJiAhYXhpc09ubHkgPyAxIDogZGlyZWN0aW9uID09PSBUVEIgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCA6IC0xO1xuICAgIHJldHVybiBPUklFTlRBVElPTl9NQVBbcHJvcF0gJiYgT1JJRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVEFUSU9OX01BUFtwcm9wXVtpbmRleF0gfHwgcHJvcC5yZXBsYWNlKC93aWR0aHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVmdHxyaWdodC9pLCBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCkge1xuICAgICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciByZXBsYWNlbWVudCA9IE9SSUVOVEFUSU9OX01BUFttYXRjaC50b0xvd2VyQ2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2UoKV1baW5kZXhdIHx8IG1hdGNoO1xuICAgICAgcmV0dXJuIG9mZnNldCA+IDAgPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVwbGFjZW1lbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXBsYWNlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuc2xpY2UoMSkgOiByZXBsYWNlbWVudDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBvcmllbnQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgKiAob3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uID09PSBSVEwgPyAxIDogLTEpO1xuICB9XG5cbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XG4gICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICBvcmllbnQ6IG9yaWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfTtcbn1cblxudmFyIFJPTEUgPSAicm9sZSI7XG52YXIgVEFCX0lOREVYID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJ0YWJpbmRleCI7XG52YXIgRElTQUJMRUQgPSAiZGlzYWJsZWQiO1xudmFyIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BSRUZJWCA9ICJhcmlhLSI7XG52YXIgQVJJQV9DT05UUk9MUyA9IEFSSUFfUFJFRkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWCArICJjb250cm9scyI7XG52YXIgQVJJQV9DVVJSRU5UID0gQVJJQV9QUkVGSVggKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgImN1cnJlbnQiO1xudmFyIEFSSUFfU0VMRUNURUQgPSBBUklBX1BSRUZJWCArICJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0ZWQiO1xudmFyIEFSSUFfTEFCRUwgPSBBUklBX1BSRUZJWCArICJsYWJlbCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEFSSUFfTEFCRUxMRURCWSA9IEFSSUFfUFJFRklYICsgImxhYmVsbGVkYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IjtcbnZhciBBUklBX0hJRERFTiA9IEFSSUFfUFJFRklYICsgImhpZGRlbiI7XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIEFSSUFfT1JJRU5UQVRJT04gPSBBUklBX1BSRUZJWCArICJvcmllbnRhdGlvbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEFSSUFfUk9MRURFU0NSSVBUSU9OID0gQVJJQV9QUkVGSVggKyAicm9sZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXNjcmlwdGlvbiI7XG52YXIgQVJJQV9MSVZFID0gQVJJQV9QUkVGSVggKyAibGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UiO1xudmFyIEFSSUFfQlVTWSA9IEFSSUFfUFJFRklYICsgImJ1c3kiO1xudmFyIEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX0FUT01JQyA9IEFSSUFfUFJFRklYICsgImF0b21pYyI7XG52YXIgQUxMX0FUVFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUJVVEVTID0gW1JPTEUsIFRBQl9JTkRFWCwgRElTQUJMRUQsIEFSSUFfQ09OVFJPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xTLCBBUklBX0NVUlJFTlQsIEFSSUFfTEFCRUwsIEFSSUFfTEFCRUxMRURCWSwgQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSSUFfSElEREVOLCBBUklBX09SSUVOVEFUSU9OLCBBUklBX1JPTEVERVNDUklQVEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT05dO1xudmFyIENMQVNTX1BSRUZJWCA9IFBST0pFQ1RfQ09ERSArICJfXyI7XG52YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNUQVRVU19DTEFTU19QUkVGSVggPSAiaXMtIjtcbnZhciBDTEFTU19ST09UID0gUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST0pFQ1RfQ09ERTtcbnZhciBDTEFTU19UUkFDSyA9IENMQVNTX1BSRUZJWCArICJ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhY2siO1xudmFyIENMQVNTX0xJU1QgPSBDTEFTU19QUkVGSVggKyAibGlzdCI7XG52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIENMQVNTX1NMSURFID0gQ0xBU1NfUFJFRklYICsgInNsaWRlIjtcbnZhciBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQ0xPTkUgPSBDTEFTU19TTElERSArICItLWNsb25lIjtcbnZhciBDTEFTU19DTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVEFJTkVSID0gQ0xBU1NfU0xJREUgKyAiX19jb250YWluZXIiO1xudmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPV1MgPSBDTEFTU19QUkVGSVggKyAiYXJyb3dzIjtcbnZhciBDTEFTU19BUlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT1cgPSBDTEFTU19QUkVGSVggKyAiYXJyb3ciO1xudmFyIENMQVNTX0FSUk9XX1BSRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWID0gQ0xBU1NfQVJST1cgKyAiLS1wcmV2IjtcbnZhciBDTEFTU19BUlJPV19ORVhUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENMQVNTX0FSUk9XICsgIi0tbmV4dCI7XG52YXIgQ0xBU1NfUEFHSU5BVElPTiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDTEFTU19QUkVGSVggKyAicGFnaW5hdGlvbiI7XG52YXIgQ0xBU1NfUEFHSU5BVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJT05fUEFHRSA9IENMQVNTX1BBR0lOQVRJT04gKyAiX19wYWdlIjtcbnZhciBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUFJPR1JFU1MgPSBDTEFTU19QUkVGSVggKyAicHJvZ3Jlc3MiO1xudmFyIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19QUk9HUkVTU19CQVIgPSBDTEFTU19QUk9HUkVTUyArICJfX2JhciI7XG52YXIgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1RPR0dMRSA9IENMQVNTX1BSRUZJWCArICJ0b2dnbGUiO1xudmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19UT0dHTEVfUExBWSA9IENMQVNTX1RPR0dMRSArICJfX3BsYXkiO1xudmFyIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19UT0dHTEVfUEFVU0UgPSBDTEFTU19UT0dHTEUgKyAiX19wYXVzZSI7XG52YXIgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1NQSU5ORVIgPSBDTEFTU19QUkVGSVggKyAic3Bpbm5lciI7XG52YXIgQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX1NSID0gQ0xBU1NfUFJFRklYICsgInNyIjtcbnZhciBDTEFTU19JTklUSUFMSVonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUQgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImluaXRpYWxpemVkIjtcbnZhciBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfQUNUSVZFID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJhY3RpdmUiO1xudmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19QUkVWID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJwcmV2IjtcbnZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfTkVYVCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibmV4dCI7XG52YXIgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1ZJU0lCTEUgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgInZpc2libGUiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBDTEFTU19MT0FESU5HID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJsb2FkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyI7XG52YXIgQ0xBU1NfRk9DVVNfSU4gPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJmb2N1cy1pbiI7XG52YXIgQ0xBU1NfT1ZFUkZMT1cgPSBTVEFUVVNfQ0xBU1NfUFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUZJWCArICJvdmVyZmxvdyI7XG52YXIgU1RBVFVTX0NMQVNTRVMgPSBbQ0xBU1NfQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDVElWRSwgQ0xBU1NfVklTSUJMRSwgQ0xBU1NfUFJFViwgQ0xBU1NfTkVYVCwgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX0xPQURJTkcsIENMQVNTX0ZPQ1VTX0lOLCBDTEFTU19PVkVSRkxPV107XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIENMQVNTRVMgPSB7XG4gIHNsaWRlOiBDTEFTU19TTElERSxcbiAgY2xvbmU6IENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19DTE9ORSxcbiAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gIGFycm93OiBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQVJST1csXG4gIHByZXY6IENMQVNTX0FSUk9XX1BSRVYsXG4gIG5leHQ6IENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPV19ORVhULFxuICBwYWdpbmF0aW9uOiBDTEFTU19QQUdJTkFUSU9OLFxuICBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZTogQ0xBU1NfUEFHSU5BVElPTl9QQUdFLFxuICBzcGlubmVyOiBDTEFTU19TUElOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05FUlxufTtcblxuZnVuY3Rpb24gY2xvc2VzdChmcm9tLCBzZWxlY3Rvcikge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKGlzRnVuY3Rpb24oZnJvbS5jbG9zZXN0KSkge1xuICAgIHJldHVybiBmcm9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgfVxuXG4gIHZhciBlbG0gPSBmcm9tO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB3aGlsZSAoZWxtICYmIGVsbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgIGlmIChtYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Y2hlcyhlbG0sIHNlbGVjdG9yKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVsbSA9IGVsbS5wYXJlbnRFbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG07XG59XG5cbnZhciBGUklDVElPTiA9IDU7XG52YXIgTE9HX0lOVEVSVkFMID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIwMDtcbnZhciBQT0lOVEVSX0RPV05fRVZFTlRTID0gInRvdWNoc3RhcnQgbW91c2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZG93biI7XG52YXIgUE9JTlRFUl9NT1ZFX0VWRU5UUyA9ICJ0b3VjaG1vdmUgbW91cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbW92ZSI7XG52YXIgUE9JTlRFUl9VUF9FVkVOVFMgPSAidG91Y2hlbmQgdG91Y2hjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2VsIG1vdXNldXAgY2xpY2siO1xuXG5mdW5jdGlvbiBFbGVtZW50cyhTcGxpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZS5vbixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UuYmluZDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIHJvb3QgPSBTcGxpZGUyLnJvb3Q7XG4gIHZhciBpMThuID0gb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMuaTE4bjtcbiAgdmFyIGVsZW1lbnRzID0ge307XG4gIHZhciBzbGlkZXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW107XG4gIHZhciByb290Q2xhc3NlcyA9IFtdO1xuICB2YXIgdHJhY2tDbGFzc2VzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFtdO1xuICB2YXIgdHJhY2s7XG4gIHZhciBsaXN0O1xuICB2YXIgaXNVc2luZ0snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXk7XG5cbiAgZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgY29sbGVjdCgpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbml0KCk7XG4gICAgdXBkYXRlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgZGVzdHJveSk7XG4gICAgb24oRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUX1JFRlJFU0gsIHNldHVwKTtcbiAgICBvbihFVkVOVF9VUERBVEVELCB1cGRhdGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBiaW5kKGRvY3VtZW50LCBQT0lOVEVSX0RPV05fRVZFTlRTICsgIiBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZG93biIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpc1VzaW5nS2V5ID0gZS50eXBlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0gImtleWRvd24iO1xuICAgIH0sIHtcbiAgICAgIGNhcHR1cmU6IHRydWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSk7XG4gICAgYmluZChyb290LCAiZm9jdXNpbiIsIGZ1bmN0aW9uICgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB0b2dnbGVDbGFzcyhyb290LCBDTEFTU19GT0NVU19JTiwgISFpc1VzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ0tleSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KGNvbXBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0ZWx5KSB7XG4gICAgdmFyIGF0dHJzID0gQUxMX0FUVFJJQlVURVMuY29uY2F0KCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGUiKTtcbiAgICBlbXB0eShzbGlkZXMpO1xuICAgIHJlbW92ZUNsYXNzKHJvb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCByb290Q2xhc3Nlcyk7XG4gICAgcmVtb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZShbdHJhY2ssIGxpc3RdLCBhdHRycyk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJlbW92ZUF0dHJpYnV0ZShyb290LCBjb21wbGV0ZWx5ID8gYXR0cnMgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWyJzdHlsZSIsIEFSSUFfUk9MRURFU0NSSVBUSU9OXSk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gdXBkYXRlKCkge1xuICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvb3RDbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyk7XG4gICAgcmVtb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3Nlcyk7XG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3RDbGFzc2VzID0gZ2V0Q2xhc3NlcyhDTEFTU19ST09UKTtcbiAgICB0cmFja0NsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzID0gZ2V0Q2xhc3NlcyhDTEFTU19UUkFDSyk7XG4gICAgYWRkQ2xhc3Mocm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3QsIHJvb3RDbGFzc2VzKTtcbiAgICBhZGRDbGFzcyh0cmFjaywgdHJhY2tDbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyk7XG4gICAgc2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUwsIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhYmVsKTtcbiAgICBzZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTExFREJZLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5sYWJlbGxlZGJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbGxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIHRyYWNrID0gZmluZCgiLiIgKyBDTEFTU19UUkFDSyk7XG4gICAgbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgPSBjaGlsZCh0cmFjaywgIi4iICsgQ0xBU1NfTElTVCk7XG4gICAgYXNzZXJ0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmFjayAmJiBsaXN0LCAiQSB0cmFjay9saXN0IGVsZW1lbnQgaXMgbWlzc2luZy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIik7XG4gICAgcHVzaChzbGlkZXMsIGNoaWxkcmVuKGxpc3QsICIuIiArIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTTElERSArICI6bm90KC4iICsgQ0xBU1NfQ0xPTkUgKyAiKSIpKTtcbiAgICBmb3JPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3duKHtcbiAgICAgIGFycm93czogQ0xBU1NfQVJST1dTLFxuICAgICAgcGFnaW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ246IENMQVNTX1BBR0lOQVRJT04sXG4gICAgICBwcmV2OiBDTEFTU19BUlJPV19QUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVixcbiAgICAgIG5leHQ6IENMQVNTX0FSUk9XX05FWFQsXG4gICAgICBiYXI6IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19QUk9HUkVTU19CQVIsXG4gICAgICB0b2dnbGU6IENMQVNTX1RPR0dMRVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBmdW5jdGlvbiAoY2xhc3NOYW1lLCBrZXkpIHtcbiAgICAgIGVsZW1lbnRzW2tleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddID0gZmluZCgiLiIgKyBjbGFzc05hbWUpO1xuICAgIH0pO1xuICAgIGFzc2lnbihlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMsIHtcbiAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICB0cmFjazogdHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrLFxuICAgICAgbGlzdDogbGlzdCxcbiAgICAgIHNsaWRlczogc2xpZGVzXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgaWQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcm9vdC5pZCB8fCB1bmlxdWVJZChQUk9KRUNUX0NPREUpO1xuICAgIHZhciByb2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG9wdGlvbnMucm9sZTtcbiAgICByb290LmlkID0gaWQ7XG4gICAgdHJhY2suaWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHJhY2suaWQgfHwgaWQgKyAiLXRyYWNrIjtcbiAgICBsaXN0LmlkID0gbGlzdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQgfHwgaWQgKyAiLWxpc3QiO1xuXG4gICAgaWYgKCFnZXRBdHRyaWJ1dGUocm9vdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFJPTEUpICYmIHJvb3QudGFnTmFtZSAhPT0gIlNFQ1RJT04iICYmIHJvbGUpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBzZXRBdHRyaWJ1dGUocm9vdCwgUk9MRSwgcm9sZSk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBX1JPTEVERVNDUklQVElPTiwgaTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOG4uY2Fyb3VzZWwpO1xuICAgIHNldEF0dHJpYnV0ZShsaXN0LCBST0xFLCAicHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRhdGlvbiIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZChzZWxlY3RvcikgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZWxtID0gcXVlcnkocm9vdCwgc2VsZWN0b3IpO1xuICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxtICYmIGNsb3Nlc3QoZWxtLCAiLiIgKyBDTEFTU19ST09UKSA9PT0gcm9vdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBlbG0gOiB2b2lkIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDbGFzc2VzKGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNlKSB7XG4gICAgcmV0dXJuIFtiYXNlICsgIi0tIiArIG9wdGlvbnMudHlwZSwgYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2UgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuZHJhZyAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmFzZSArICItLWRyYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmIGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlICsgIi0tbmF2IiwgYmFzZSA9PT0gQ0xBU1NfUk9PVCAmJiBDTEFTU19BQ1RJVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFXTtcbiAgfVxuXG4gIHJldHVybiBhc3NpZ24oZWxlbWVudHMsIHtcbiAgICBzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXA6IHNldHVwLFxuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneVxuICB9KTtcbn1cblxudmFyIFNMSURFID0gInNsaWRlIjtcbnZhciBMT09QID0gIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb29wIjtcbnZhciBGQURFID0gImZhZGUiO1xuXG5mdW5jdGlvbiBTbGlkZSQxKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUyLCBpbmRleCwgc2xpZGVJbmRleCwgc2xpZGUpIHtcbiAgdmFyIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24gPSBldmVudC5vbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0ID0gZXZlbnQuZW1pdCxcbiAgICAgIGJpbmQgPSBldmVudC5iaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDtcbiAgdmFyIENvbXBvbmVudHMgPSBTcGxpZGUyLkNvbXBvbmVudHMsXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCA9IFNwbGlkZTIucm9vdCxcbiAgICAgIG9wdGlvbnMgPSBTcGxpZGUyLm9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zO1xuICB2YXIgaXNOYXZpZ2F0aW9uID0gb3B0aW9ucy5pc05hdmlnYXRpb24sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdXBkYXRlT25Nb3ZlID0gb3B0aW9ucy51cGRhdGVPbk1vdmUsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaTE4biA9IG9wdGlvbnMuaTE4bixcbiAgICAgIHBhZ2luYXRpb24gPSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5wYWdpbmF0aW9uLFxuICAgICAgc2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpZGVGbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdXM7XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gIHZhciBzdHlsZXMgPSBnZXRBdHRyaWJ1dGUoc2xpZGUsICJzdHlsZSIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGxhYmVsID0gZ2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0xBQkVMKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpc0Nsb25lID0gc2xpZGVJbmRleCA+IC0xO1xuICB2YXIgY29udGFpbmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGNoaWxkKHNsaWRlLCAiLiIgKyBDTEFTU19DT05UQUlORVIpO1xuICB2YXIgZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3llZDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpZiAoIWlzQ2xvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lKSB7XG4gICAgICBzbGlkZS5pZCA9IHJvb3QuaWQgKyAiLXNsaWRlIiArIHBhZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXggKyAxKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgcGFnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpb24gPyAidGFicGFuZWwiIDogImdyb3VwIik7XG4gICAgICBzZXRBdHRyaWJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKHNsaWRlLCBBUklBX1JPTEVERVNDUklQVElPTiwgaTE4bi5zbGlkZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0xBQkVMLCBsYWJlbCB8fCBmb3JtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0KGkxOG4uc2xpZGVMYWJlbCwgW2luZGV4ICsgMSwgU3BsaWRlMi5sZW5ndGhdKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH1cblxuICAgIGxpc3RlbigpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbigpIHtcbiAgICBiaW5kKHNsaWRlLCAiY2xpY2siLCBhcHBseShlbWl0LCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQ0xJQ0ssIHNlbGYpKTtcbiAgICBiaW5kKHNsaWRlLCAia2V5ZG93biIsIGFwcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneShlbWl0LCBFVkVOVF9TTElERV9LRVlET1dOLCBzZWxmKSk7XG4gICAgb24oW0VWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1ZFRCwgRVZFTlRfU0hJRlRFRCwgRVZFTlRfU0NST0xMRURdLCB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICBvbihFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQsIGluaXROYXZpZ2F0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbik7XG5cbiAgICBpZiAodXBkYXRlT25Nb3ZlKSB7XG4gICAgICBvbihFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfTU9WRSwgb25Nb3ZlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpIHtcbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xuICAgIGV2ZW50LmRlc3Ryb3koKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmVtb3ZlQ2xhc3Moc2xpZGUsIFNUQVRVU19DTEFTU0VTKTtcbiAgICByZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlQXR0cmlidXRlKHNsaWRlLCBBTExfQVRUUklCVVRFUyk7XG4gICAgc2V0QXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYnV0ZShzbGlkZSwgInN0eWxlIiwgc3R5bGVzKTtcbiAgICBzZXRBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlLCBBUklBX0xBQkVMLCBsYWJlbCB8fCAiIik7XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gaW5pdE5hdmlnYXRpb24oKSB7XG4gICAgdmFyIGNvbnRyb2xzID0gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuc3BsaWRlcy5tYXAoZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgdmFyIFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIgPSB0YXJnZXQuc3BsaWRlLkNvbXBvbmVudHMuU2xpZGVzLmdldEF0KGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCk7XG4gICAgICByZXR1cm4gU2xpZGUyID8gU2xpZGUyLnNsaWRlLmlkIDogIiI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0pLmpvaW4oIiAiKTtcbiAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQkVMLCBmb3JtYXQoaTE4bi5zbGlkZVgsIChpc0Nsb25lID8gc2xpZGVJbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpbmRleCkgKyAxKSk7XG4gICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0NPTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUUk9MUywgY29udHJvbHMpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlRm9jdXMgPyAiYnV0dG9uIiA6ICIiKTtcbiAgICBzbGlkZUZvY3VzICYmIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1vdmVBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OKTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiBvbk1vdmUoKSB7XG4gICAgaWYgKCFkZXN0cm95ZWQpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKCkge1xuICAgIGlmICghZGVzdHJveWVkKSB7XG4gICAgICB2YXIgY3VyciA9IFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLmluZGV4O1xuICAgICAgdXBkYXRlQWN0aXZpdHkoKTtcbiAgICAgIHVwZGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VWaXNpYmlsaXR5KCk7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfUFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVYsIGluZGV4ID09PSBjdXJyIC0gMSk7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX05FWFQsIGluZGV4ID09PSBjdXJyICsgMSk7XG4gICAgfVxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZUFjdGl2aXR5KCkge1xuICAgIHZhciBhY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlID0gaXNBY3RpdmUoKTtcblxuICAgIGlmIChhY3RpdmUgIT09IGhhc0NsYXNzKHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgQ0xBU1NfQUNUSVZFKSkge1xuICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19BQ1RJVkUsIGFjdGl2ZSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX0NVUlJFTlQsIGlzTmF2aWdhdGlvbiAmJiBhY3RpdmUgfHwgIiIpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVtaXQoYWN0aXZlID8gRVZFTlRfQUNUSVZFIDogRVZFTlRfSU5BQ1RJVkUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxmKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVWaXNpYmlsaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpIHtcbiAgICB2YXIgdmlzaWJsZSA9IGlzVmlzaWJsZSgpO1xuICAgIHZhciBoaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVuID0gIXZpc2libGUgJiYgKCFpc0FjdGl2ZSgpIHx8IGlzQ2xvbmUpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICghU3BsaWRlMi5zdGF0ZS5pcyhbTU9WSU5HLCBTQ1JPTExJTkddKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9ISURERU4sIGhpZGRlbiB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiIpO1xuICAgIH1cblxuICAgIHNldEF0dHJpYnV0ZShxdWVyeUFsbChzbGlkZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuZm9jdXNhYmxlTm9kZXMgfHwgIiIpLCBUQUJfSU5ERVgsIGhpZGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gPyAtMSA6ICIiKTtcblxuICAgIGlmIChzbGlkZUZvY3VzKSB7XG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXR0cmlidXRlKHNsaWRlLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogMCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cblxuICAgIGlmICh2aXNpYmxlICE9PSBoYXNDbGFzcyhzbGlkZSwgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1ZJU0lCTEUpKSB7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfVklTSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCTEUsIHZpc2libGUpO1xuICAgICAgZW1pdCh2aXNpYmxlID8gRVZFTlRfVklTSUJMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UgOiBFVkVOVF9ISURERU4sIHNlbGYpO1xuICAgIH1cblxuICAgIGlmICghdmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2libGUgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gc2xpZGUpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgU2xpZGUyID0gQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQoU3BsaWRlMi5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgpO1xuICAgICAgU2xpZGUyICYmIGZvY3VzKFNsaWRlMi5zbGlkZSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlJDEocHJvcCwgdmFsdWUsIHVzZUNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250YWluZXIpIHtcbiAgICBzdHlsZSh1c2VDb250YWluZXIgJiYgY29udGFpbmVyIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCBzbGlkZSwgcHJvcCwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNBY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlKCkge1xuICAgIHZhciBjdXJyID0gU3BsaWRlMi5pbmRleDtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnIgPT09IGluZGV4IHx8IG9wdGlvbnMuY2xvbmVTdGF0dXMgJiYgY3VyciA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09IHNsaWRlSW5kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBpc1Zpc2libGUoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGlmIChTcGxpZGUyLmlzKEZBREUpKSB7XG4gICAgICByZXR1cm4gaXNBY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlKCk7XG4gICAgfVxuXG4gICAgdmFyIHRyYWNrUmVjdCA9IHJlY3QoQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMuRWxlbWVudHMudHJhY2spO1xuICAgIHZhciBzbGlkZVJlY3QgPSByZWN0KHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSk7XG4gICAgdmFyIGxlZnQgPSByZXNvbHZlKCJsZWZ0IiwgdHJ1ZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciByaWdodCA9IHJlc29sdmUoInJpZ2h0IiwgdHJ1ZSk7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmbG9vcih0cmFja1JlY3RbbGVmdF0pIDw9IGNlaWwoc2xpZGVSZWN0W2xlZnRdKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgZmxvb3Ioc2xpZGVSZWN0W3JpZ2h0XSkgPD0gY2VpbCh0cmFja1JlY3RbcmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0XSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1dpdGhpbihmcm9tLCBkaXN0YW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICB2YXIgZGlmZiA9IGFicyhmcm9tIC0gaW5kZXgpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmICghaXNDbG9uZSAmJiAob3B0aW9ucy5yZXdpbmQgfHwgU3BsaWRlMi5pcyhMTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPUCkpKSB7XG4gICAgICBkaWZmID0gbWluKGRpZmYsIFNwbGlkZTIubGVuZ3RoIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpZmYpO1xuICAgIH1cblxuICAgIHJldHVybiBkaWZmIDw9IGRpc3RhbmNlO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIHZhciBzZWxmID0ge1xuICAgIGluZGV4OiBpbmRleCxcbiAgICBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVJbmRleDogc2xpZGVJbmRleCxcbiAgICBzbGlkZTogc2xpZGUsXG4gICAgY29udGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lcjogY29udGFpbmVyLFxuICAgIGlzQ2xvbmU6IGlzQ2xvbmUsXG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHVwZGF0ZTogdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSxcbiAgICBzdHlsZTogc3R5bGUkMSxcbiAgICBpc1dpdGhpbjogaXNXaXRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXG4gIH07XG4gIHJldHVybiBzZWxmO1xufVxuXG5mdW5jdGlvbiBTbGlkZXMoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlMiA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlMi5vbixcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UyLmVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0LFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTIuYmluZDtcblxuICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIF9Db21wb25lbnRzMiRFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHNsaWRlcyA9IF9Db21wb25lbnRzMiRFbGVtZW50cy5zbGlkZXMsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZW50cy5saXN0O1xuICB2YXIgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlczIgPSBbXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIG9uKEVWRU5UX1JFRlJFU0gsIGRlc3Ryb3kpO1xuICAgIG9uKEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZSRVNILCBpbml0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZSwgaW5kZXgpIHtcbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpc3RlcihzbGlkZSwgaW5kZXgsIC0xKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBkZXN0cm95KCkge1xuICAgIGZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgU2xpZGUyLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgICBlbXB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koU2xpZGVzMik7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICBTbGlkZTIudXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXIoc2xpZGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCwgc2xpZGVJbmRleCkge1xuICAgIHZhciBvYmplY3QgPSBTbGlkZSQxKFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLCBpbmRleCwgc2xpZGVJbmRleCwgc2xpZGUpO1xuICAgIG9iamVjdC5tb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQoKTtcbiAgICBTbGlkZXMyLnB1c2gob2JqZWN0KTtcbiAgICBTbGlkZXMyLnNvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmN0aW9uIChTbGlkZTEsIFNsaWRlMikge1xuICAgICAgcmV0dXJuIFNsaWRlMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuaW5kZXggLSBTbGlkZTIuaW5kZXg7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gZ2V0KGV4Y2x1ZGVDbG9uZXMpIHtcbiAgICByZXR1cm4gZXhjbHVkZUNsb25lcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyBmaWx0ZXIoZnVuY3Rpb24gKFNsaWRlMikge1xuICAgICAgcmV0dXJuICFTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLmlzQ2xvbmU7XG4gICAgfSkgOiBTbGlkZXMyO1xuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGdldEluKHBhZ2UpIHtcbiAgICB2YXIgQ29udHJvbGxlciA9IENvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5Db250cm9sbGVyO1xuICAgIHZhciBpbmRleCA9IENvbnRyb2xsZXIudG9JbmRleCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnZSk7XG4gICAgdmFyIG1heCA9IENvbnRyb2xsZXIuaGFzRm9jdXMoKSA/IDEgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5wZXJQYWdlO1xuICAgIHJldHVybiBmaWx0ZXIoZnVuY3Rpb24gKFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKFNsaWRlMi5pbmRleCwgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBpbmRleCArIG1heCAtIDEpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEF0KGluZGV4KSB7XG4gICAgcmV0dXJuIGZpbHRlcihpbmRleClbMF07XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gYWRkKGl0ZW1zLCBpbmRleCkge1xuICAgIGZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKGl0ZW1zLCBmdW5jdGlvbiAoc2xpZGUpIHtcbiAgICAgIGlmIChpc1N0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoc2xpZGUpKSB7XG4gICAgICAgIHNsaWRlID0gcGFyc2VIdG1sKHNsaWRlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICAgIGlmIChpc0hUTUxFbGVtZW50KHNsaWRlKSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIHJlZiA9IHNsaWRlc1tpbmRleF07XG4gICAgICAgIHJlZiA/IGJlZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uoc2xpZGUsIHJlZikgOiBhcHBlbmQobGlzdCwgc2xpZGUpO1xuICAgICAgICBhZGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xhc3Moc2xpZGUsIG9wdGlvbnMuY2xhc3Nlcy5zbGlkZSk7XG4gICAgICAgIG9icycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZlSW1hZ2VzKHNsaWRlLCBhcHBseShlbWl0LCBFVkVOVF9SRVNJWkUpKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgfSk7XG4gICAgZW1pdChFVkVOVF9SRUZSRVNIKTtcbiAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiByZW1vdmUkMShtYXRjaGVyKSB7XG4gICAgcmVtb3ZlKGZpbHRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobWF0Y2hlcikubWFwKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIHJldHVybiBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLnNsaWRlO1xuICAgIH0pKTtcbiAgICBlbWl0KEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvckVhY2gkMShpdGVyYXRlZSwgZXhjbHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVDbG9uZXMpIHtcbiAgICBnZXQoZXhjbHVkZUNsb25lcykuZm9yRWFjaChpdGVyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsdGVyKG1hdGNoZXIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIFNsaWRlczIuZmlsdGVyKGlzRnVuY3Rpb24obWF0Y2hlcikgPyBtYXRjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlciA6IGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIHJldHVybiBpc1N0cmluZygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF0Y2hlcikgPyBtYXRjaGVzKFNsaWRlMi5zbGlkZSwgbWF0Y2hlcikgOiBpbmNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VkZXModG9BcnJheShtYXRjaGVyKSwgU2xpZGUyLmluZGV4KTtcbiAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBzdHlsZShwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmVyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICBTbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlKHByb3AsIHZhbHVlLCB1c2VDb250YWluZXIpO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIG9ic2VydmVJbWFnZXMoZWxtLCBjYWxsYmFjaykgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgaW1hZ2VzID0gcXVlcnlBbGwoZWxtLCAiaW1nIik7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW5ndGggPSBpbWFnZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgYmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QoaW1nLCAibG9hZCBlcnJvciIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCEgLS1sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGVuZ3RoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleGNsdWRlQ2xvbmVzKSB7XG4gICAgcmV0dXJuIGV4Y2x1ZGVDbG9uZXMgPyBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmxlbmd0aCA6IFNsaWRlczIubGVuZ3RoO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzRW5vdWdoKCkge1xuICAgIHJldHVybiBTbGlkZXMyLmxlbmd0aCA+IG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnBlclBhZ2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaXN0ZXI6IHJlZ2lzdGVyLFxuICAgIGdldDogZ2V0LFxuICAgIGdldEluOiBnZXRJbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgZ2V0QXQ6IGdldEF0LFxuICAgIGFkZDogYWRkLFxuICAgIHJlbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHJlbW92ZSQxLFxuICAgIGZvckVhY2g6IGZvckVhY2gkMSxcbiAgICBmaWx0ZXI6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaWx0ZXIsXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGdldExlbmd0aDogZ2V0TGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aCxcbiAgICBpc0Vub3VnaDogaXNFbm91Z2hcbiAgfTtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xheW91dChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZTMgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiA9IF9FdmVudEludGVyZmFjZTMub24sXG4gICAgICBiaW5kID0gX0V2ZW50SW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZTMuYmluZCxcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UzLmVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gIHZhciBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG4gIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVzb2x2ZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICB2YXIgXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMiRFbGVtZW50czIgPSBDb21wb25lbnRzMi5FbGVtZW50cyxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByb290ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMi5yb290LFxuICAgICAgdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMi50cmFjayxcbiAgICAgIGxpc3QgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX0NvbXBvbmVudHMyJEVsZW1lbnRzMi5saXN0O1xuICB2YXIgZ2V0QXQgPSBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmdldEF0LFxuICAgICAgc3R5bGVTbGlkZXMgPSBTbGlkZXMuc3R5bGU7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdmVydGljYWw7XG4gIHZhciByb290UmVjdDtcbiAgdmFyIG92ZXJmbG93O1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7XG4gICAgYmluZCh3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZG93LCAicmVzaXplIGxvYWQiLCBUaHJvdHRsZShhcHBseShlbWl0LCBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfUkVTSVpFKSkpO1xuICAgIG9uKFtFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10sIGluaXQpO1xuICAgIG9uKEVWRU5UX1JFU0laRSwgcmVzaXplKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZlcnRpY2FsID0gb3B0aW9ucy5kaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uID09PSBUVEI7XG4gICAgc3R5bGUocm9vdCwgIm1heFdpZHRoIiwgdW5pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy53aWR0aCkpO1xuICAgIHN0eWxlKHRyYWNrLCByZXNvbHZlKCJwYWRkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZ0xlZnQiKSwgY3NzUGFkZGluZyhmYWxzZSkpO1xuICAgIHN0eWxlKHRyYWNrLCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzb2x2ZSgicGFkZGluZ1JpZ2h0IiksIGNzc1BhZGRpbmcodHJ1ZSkpO1xuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNpemUodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNpemUoZm9yY2UpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIG5ld1JlY3QgPSByZWN0KHJvb3QpO1xuXG4gICAgaWYgKGZvcmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSB8fCByb290UmVjdC53aWR0aCAhPT0gbmV3UmVjdC53aWR0aCB8fCByb290UmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuaGVpZ2h0ICE9PSBuZXdSZWN0LmhlaWdodCkge1xuICAgICAgc3R5bGUodHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAiaGVpZ2h0IiwgY3NzVHJhY2tIZWlnaHQoKSk7XG4gICAgICBzdHlsZVNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocmVzb2x2ZSgibWFyZ2luUmlnaHQiKSwgdW5pdChvcHRpb25zLmdhcCkpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0eWxlU2xpZGVzKCJ3aWR0aCIsIGNzc1NsaWRlV2lkdGgoKSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGVTbGlkZXMoImhlaWdodCIsIGNzc1NsaWRlSGVpZ2h0KCksIHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJvb3RSZWN0ID0gbmV3UmVjdDtcbiAgICAgIGVtaXQoRVZFTlRfUkVTSVpFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QpO1xuXG4gICAgICBpZiAob3ZlcmZsb3cgIT09IChvdmVyZmxvdyA9IGlzT3ZlcmZsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293KCkpKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHJvb3QsIENMQVNTX09WRVJGTE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVywgb3ZlcmZsb3cpO1xuICAgICAgICBlbWl0KEVWRU5UX09WRVJGTE9XLCBvdmVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1BhZGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nKHJpZ2h0KSB7XG4gICAgdmFyIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBwcm9wID0gcmVzb2x2ZShyaWdodCA/ICJyaWdodCIgOiAibGVmdCIpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZXR1cm4gcGFkZGluZyAmJiB1bml0KHBhZGRpbmdbcHJvcF0gfHwgKGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09iamVjdChwYWRkaW5nKSA/IDAgOiBwYWRkaW5nKSkgfHwgIjBweCI7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gY3NzVHJhY2tIZWlnaHQoKSB7XG4gICAgdmFyIGhlaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQgPSAiIjtcblxuICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgaGVpZ2h0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGNzc0hlaWdodCgpO1xuICAgICAgYXNzZXJ0KGhlaWdodCwgImhlaWdodCBvciBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VpZ2h0UmF0aW8gaXMgbWlzc2luZy4iKTtcbiAgICAgIGhlaWdodCA9ICJjYWxjKCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICsgaGVpZ2h0ICsgIiAtICIgKyBjc3NQYWRkaW5nKGZhbHNlKSArICIgLSAiICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc1BhZGRpbmcodHJ1ZSkgKyAiKSI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnaHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjc3NIZWlnaHQoKSB7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiB1bml0KG9wdGlvbnMuaGVpZ2h0IHx8IHJlY3QobGlzdCkud2lkdGggKiBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5oZWlnaHRSYXRpbyk7XG4gIH1cblxuICBmdW5jdGlvbiBjc3NTbGlkZVcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWR0aCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGggPyBudWxsIDogdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaXQob3B0aW9ucy5maXhlZFdpZHRoKSB8fCAodmVydGljYWwgPyAiIiA6IGNzc1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVNpemUoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjc3NTbGlkZUhlaWdodCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgcmV0dXJuIHVuaXQob3B0aW9ucy5maXhlZEhlaWdodCkgfHwgKHZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aWNhbCA/IG9wdGlvbnMuYXV0b0hlaWdodCA/IG51bGwgOiBjc3NTbGlkZVNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkgOiBjc3NIZWlnaHQoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjc3NTbGlkZVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXplKCkge1xuICAgIHZhciBnYXAgPSB1bml0KG9wdGlvbnMuZ2FwKTtcbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuICJjYWxjKCgxMDAlIiArIChnYXAgJiYgIiArICIgKyBnYXApICsgIikvIiArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAob3B0aW9ucy5wZXJQYWdlIHx8IDEpICsgKGdhcCAmJiAiIC0gIiArIGdhcCkgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIikiO1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdFNpemUoKSB7XG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiByZWN0KGxpc3QpW3Jlc29sdmUoIndpZHRoIildO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHNsaWRlU2l6ZShpbmRleCwgd2l0aG91dEdhcCkge1xuICAgIHZhciBTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBnZXRBdChpbmRleCB8fCAwKTtcbiAgICByZXR1cm4gU2xpZGUgPyByZWN0KFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSlbcmVzb2x2ZSgid2lkdGgiKV0gKyAod2l0aG91dEdhcCA/IDAgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0R2FwKCkpIDogMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdGFsU2l6ZShpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXgsIHdpdGhvdXRHYXApIHtcbiAgICB2YXIgU2xpZGUgPSBnZXRBdChpbmRleCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgaWYgKFNsaWRlKSB7XG4gICAgICB2YXIgcmlnaHQgPSByZWN0KFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSlbcmVzb2x2ZSgicmlnaHQiKV07XG4gICAgICB2YXIgbGVmdCA9IHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0KGxpc3QpW3Jlc29sdmUoImxlZnQiKV07XG4gICAgICByZXR1cm4gYWJzKHJpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodCAtIGxlZnQpICsgKHdpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCkpO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWRlclNpemUod2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhvdXRHYXApIHtcbiAgICByZXR1cm4gdG90YWxTaXplKFNwbGlkZTIubGVuZ3RoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIDEpIC0gdG90YWxTaXplKDApICsgc2xpZGVTaXplKDAsIHdpdGhvdXRHYXApO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIGdldEdhcCgpIHtcbiAgICB2YXIgU2xpZGUgPSBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXQoMCk7XG4gICAgcmV0dXJuIFNsaWRlICYmIHBhcnNlRmxvYXQoc3R5bGUoU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnNsaWRlLCByZXNvbHZlKCJtYXJnaW5SaWdodCIpKSkgfHwgMDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBnZXRQYWRkaW5nKHJpZ2h0KSB7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJzZUZsb2F0KHN0eWxlKHRyYWNrLCByZXNvbHZlKCJwYWRkaW5nIiArIChyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQgPyAiUmlnaHQiIDogIkxlZnQiKSkpKSB8fCAwO1xuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGlzT3ZlcmZsb3coKSB7XG4gICAgcmV0dXJuIFNwbGlkZTIuaXMoRkFERSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IHNsaWRlclNpemUodHJ1ZSkgPiBsaXN0U2l6ZSgpO1xuICB9XG5cbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIHJlc2l6ZTogcmVzaXplLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsaXN0U2l6ZTogbGlzdFNpemUsXG4gICAgc2xpZGVTaXplOiBzbGlkZVNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIHNsaWRlclNpemU6IHNsaWRlclNpemUsXG4gICAgdG90YWxTaXplOiB0b3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxTaXplLFxuICAgIGdldFBhZGRpbmc6IGdldFBhZGRpbmcsXG4gICAgaXNPdmVyZmwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3c6IGlzT3ZlcmZsb3dcbiAgfTtcbn1cblxudmFyIE1VTFRJUExJRVIgPSAyO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gQ2xvbmVzKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgdmFyIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGV2ZW50Lm9uO1xuICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMsXG4gICAgICBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG4gIHZhciByZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2x2ZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICB2YXIgY2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyA9IFtdO1xuICB2YXIgY2xvbmVDb3VudDtcblxuICBmdW5jdGlvbiBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgcmVtb3VudCk7XG4gICAgb24oW0VWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9VUERBVEVELCBFVkVOVF9SRVNJWkVdLCBvYnNlcnZlKTtcblxuICAgIGlmIChjbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVDb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50KCkpIHtcbiAgICAgIGdlbmVyYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhjbG9uZUNvdW50KTtcbiAgICAgIENvbXBvbmVudHMyLkxheW91dC5yZXNpemUodHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3koKTtcbiAgICBtb3VudCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3koKSB7XG4gICAgcmVtb3ZlKGNsb25lcyk7XG4gICAgZW1wdHkoY2xvbmVzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgZXZlbnQuZGVzdHJveSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gb2JzZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoKSB7XG4gICAgdmFyIGNvdW50ID0gY29tcHV0ZUNsb25lQ291bnQoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpZiAoY2xvbmVDb3VudCAhPT0gY291bnQpIHtcbiAgICAgIGlmIChjbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb3VudCA8IGNvdW50IHx8ICFjb3VudCkge1xuICAgICAgICBldmVudC5lbWl0KEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9SRUZSRVNIKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2VuZXJhdGUoY291bnQpIHtcbiAgICB2YXIgc2xpZGVzID0gU2xpZGVzLmdldCgpLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGljZSgpO1xuICAgIHZhciBsZW5ndGggPSBzbGlkZXMubGVuZ3RoO1xuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChsZW5ndGgpIHtcbiAgICAgIHdoaWxlIChzbGlkZXMubGVuZ3RoIDwgY291JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KSB7XG4gICAgICAgIHB1c2goc2xpZGVzLCBzbGlkZXMpO1xuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgcHVzaChzbGlkZXMuc2xpY2UoLWNvdW50KSwgc2xpZGVzLnNsaWNlKDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBjb3VudCkpLmZvckVhY2goZnVuY3Rpb24gKFNsaWRlLCBpbmRleCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGlzSGVhZCA9IGluZGV4IDwgY291bnQ7XG4gICAgICAgIHZhciBjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSBjbG9uZURlZXAoU2xpZGUuc2xpZGUsIGluZGV4KTtcbiAgICAgICAgaXNIZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCA/IGJlZm9yZShjbG9uZSwgc2xpZGVzWzBdLnNsaWRlKSA6IGFwcGVuZChFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMubGlzdCwgY2xvbmUpO1xuICAgICAgICBwdXNoKGNsb25lcywgY2xvbmUpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgU2xpZGVzLnJlZ2lzdGVyKGNsb25lLCBpbmRleCAtIGNvdW50ICsgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0hlYWQgPyAwIDogbGVuZ3RoKSwgU2xpZGUuaW5kZXgpO1xuICAgICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lRGVlcChlbG0sIGluZGV4KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBjbG9uZSA9IGVsbS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgYWRkQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKGNsb25lLCBvcHRpb25zLmNsYXNzZXMuY2xvbmUpO1xuICAgIGNsb25lLmlkID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIucm9vdC5pZCArICItY2xvbmUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCgpIHtcbiAgICB2YXIgY2xvbmVzMiA9IG9wdGlvbnMuY2xvbmVzO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmICghU3BsaWRlMi5pcyhMT09QKSkge1xuICAgICAgY2xvbmVzMiA9IDA7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0gZWxzZSBpZiAoaXNVbmRlZmluZWQoY2xvbmVzMikpIHtcbiAgICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZml4ZWRTaXplID0gb3B0aW9uc1tyZXNvbHZlKCJmaXhlZFdpZHRoIildICYmIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzMi5MYXlvdXQuc2xpZGVTaXplKDApO1xuICAgICAgdmFyIGZpeGVkQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50ID0gZml4ZWRTaXplICYmIGNlaWwocmVjdChFbGVtZW50cy50cmFjaylbcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc29sdmUoIndpZHRoIildIC8gZml4ZWRTaXplKTtcbiAgICAgIGNsb25lczIgPSBmaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ZWRDb3VudCB8fCBvcHRpb25zW3Jlc29sdmUoImF1dG9XaWR0aCIpXSAmJiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMi5sZW5ndGggfHwgb3B0aW9ucy5wZXJQYWdlICogTVVMVElQTElFUjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgcmV0dXJuIGNsb25lczI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveVxuICB9O1xufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gTW92ZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIF9FdmVudEludGVyZmFjZTQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBvbiA9IF9FdmVudEludGVyZmFjZTQub24sXG4gICAgICBlbWl0ID0gX0V2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEludGVyZmFjZTQuZW1pdDtcblxuICB2YXIgc2V0ID0gU3BsaWRlMi5zdGF0ZS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0O1xuICB2YXIgX0NvbXBvbmVudHMyJExheW91dCA9IENvbXBvbmVudHMyLkxheW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXQsXG4gICAgICBzbGlkZVNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnNsaWRlUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpemUsXG4gICAgICBnZXRQYWRkaW5nID0gX0NvbXBvbmVudHMyJExheW91dC5nZXRQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZGluZyxcbiAgICAgIHRvdGFsU2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQudG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFsU2l6ZSxcbiAgICAgIGxpc3RTaXplID0gX0NvbXBvbmVudHMyJExheW91dC5saScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdFNpemUsXG4gICAgICBzbGlkZXJTaXplID0gX0NvbXBvbmVudHMyJExheW91dC5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVyU2l6ZTtcbiAgdmFyIF9Db21wb25lbnRzMiREaXJlY3RpbyA9IENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMi5EaXJlY3Rpb24sXG4gICAgICByZXNvbHZlID0gX0NvbXBvbmVudHMyJERpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpby5yZXNvbHZlLFxuICAgICAgb3JpZW50ID0gX0NvbXBvbmVudHMyJERpcmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpby5vcmllbnQ7XG4gIHZhciBfQ29tcG9uZW50czIkRWxlbWVudHMzID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLkVsZW1lbnRzLFxuICAgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMzLmxpc3QsXG4gICAgICB0cmFjayA9IF9Db21wb25lbnRzMiRFbGVtZW50czMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrO1xuICB2YXIgVHJhbnNpdGlvbjtcblxuICBmdW5jdGlvbiBtb3VudCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgVHJhbnNpdGlvbiA9IENvbXBvbmVudHMyLlRyYW5zaXRpb247XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9SRVNJWkVELCBFVkVOVF9VUERBVEVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfUkVGUkVTSF0sIHJlcG9zaXRpb24pO1xuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHJlcG9zaXRpb24oKSB7XG4gICAgaWYgKCFDb21wb25lbnRzMi5Db250cm9sbGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pc0J1c3koKSkge1xuICAgICAgQ29tcG9uZW50czIuU2Nyb2xsLmNhbmNlbCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGp1bXAoU3BsaWRlMi5pbmRleCk7XG4gICAgICBDb21wb25lbnRzMi5TbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdmUoZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIGluZGV4LCBwcmV2LCBjYWxsYmFjaykge1xuICAgIGlmIChkZXN0ICE9PSBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggJiYgY2FuU2hpZnQoZGVzdCA+IHByZXYpKSB7XG4gICAgICBjYW5jZWwoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB0cmFuc2xhdGUoc2hpZnQoZ2V0UG9zaXRpb24oKSwgZGVzdCA+IHByZXYpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgc2V0KE1PVklORyk7XG4gICAgZW1pdChFVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfTU9WRSwgaW5kZXgsIHByZXYsIGRlc3QpO1xuICAgIFRyYW5zaXRpb24uc3RhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J0KGluZGV4LCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXQoSURMRSk7XG4gICAgICBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pdChFVkVOVF9NT1ZFRCwgaW5kZXgsIHByZXYsIGRlc3QpO1xuICAgICAgY2FsbGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtcChpbmRleCkge1xuICAgIHRyYW5zbGF0ZSh0b1Bvc2l0aW9uKGluZGV4LCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHBvc2l0aW9uLCBwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudExvb3ApIHtcbiAgICBpZiAoIVNwbGlkZTIuaXMoRkFERSkpIHtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZGVzdGluYXRpb24gPSBwcmV2ZW50TG9vcCA/IHBvc2l0aW9uIDogbG9vcChwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24pO1xuICAgICAgc3R5bGUobGlzdCwgInRyYW5zZm9ybSIsICJ0cmFuc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlIiArIHJlc29sdmUoIlgiKSArICIoIiArIGRlc3RpbmF0aW9uICsgInB4KSIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIHBvc2l0aW9uICE9PSBkZXN0aW5hdGlvbiAmJiBlbWl0KEVWRU5UX1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSElGVEVEKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb29wKHBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIGlmIChTcGxpZGUyLmlzKExPT1ApKSB7XG4gICAgICB2YXIgaW5kZXggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdG9JbmRleChwb3NpdGlvbik7XG4gICAgICB2YXIgZXhjZWVkZWRNYXggPSBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggPiBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEVuZCgpO1xuICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleGNlZWRlZE1pbiA9IGluZGV4IDwgMDtcblxuICAgICAgaWYgKGV4Y2VlZGVkTWluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fCBleGNlZWRlZE1heCkge1xuICAgICAgICBwb3NpdGlvbiA9IHNoaWZ0KHBvc2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiwgZXhjZWVkZWRNYXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcG9zaXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBzaGlmdChwb3NpdGlvbiwgYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2t3YXJkcykge1xuICAgIHZhciBleGNlc3MgPSBwb3NpdGlvbiAtIGdldExpbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhiYWNrd2FyZHMpO1xuICAgIHZhciBzaXplID0gc2xpZGVyU2l6ZSgpO1xuICAgIHBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbiAtPSBvcmllbnQoc2l6ZSAqIChjZWlsKGFicyhleGNlc3MpIC8gc2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHx8IDEpKSAqIChiYWNrd2FyZHMgPyAxIDogLTEpO1xuICAgIHJldHVybiBwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb247XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgdHJhbnNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZShnZXRQb3NpdGlvbigpLCB0cnVlKTtcbiAgICBUcmFuc2l0aW9uLmNhbmNlbCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSW5kZXgocG9zaXRpb24pIHtcbiAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcy5nZXQoKTtcbiAgICB2YXIgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gMDtcbiAgICB2YXIgbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgKHZhciBpID0gMDsgaSA8IFNsaWRlcy5sZW5ndGg7IGkrKykge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBzbGlkZUluZGV4ID0gU2xpZGVzW2ldLmluZGV4O1xuICAgICAgdmFyIGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YW5jZSA9IGFicyh0b1Bvc2l0aW9uKHNsaWRlSW5kZXgsIHRydWUpIC0gcG9zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKTtcblxuICAgICAgaWYgKGRpc3RhbmNlIDw9IG1pbkRpc3RhbmNlKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBpbmRleCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZUluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB0b1Bvc2l0aW9uKGluZGV4LCB0cmltbWluZykge1xuICAgIHZhciBwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gPSBvcmllbnQodG90YWxTaXplKGluZGV4IC0gMSkgLSBvZmZzZXQoaW5kZXgpKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgcmV0dXJuIHRyaW1taW5nID8gdHJpbShwb3NpdGlvbikgOiBwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ247XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQb3NpdGlvbigpIHtcbiAgICB2YXIgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZnQgPSByZXNvbHZlKCJsZWZ0Iik7XG4gICAgcmV0dXJuIHJlY3QobGlzdClbbGVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RdIC0gcmVjdCh0cmFjaylbbGVmdF0gKyBvcmllbnQoZ2V0UGFkZGluZyhmYWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaW0ocG9zaXRpb24pIHtcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG9wdGlvbnMudHJpbVNwYWNlICYmIFNwbGlkZTIuaXMoU0xJREUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcG9zaXRpb24gPSBjbGFtcChwb3NpdGlvbiwgMCwgb3JpZW50KHNsaWRlclNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHRydWUpIC0gbGlzdFNpemUoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBvZmZzZXQoaW5kZXgpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGZvY3VzID0gb3B0aW9ucy5mb2N1cztcbiAgICByZXR1cm4gZm9jdXMgPT09ICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2VudGVyIiA/IChsaXN0U2l6ZSgpIC0gc2xpZGVTaXplKGluZGV4LCB0cnVlKSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8gMiA6ICtmb2N1cyAqIHNsaWRlU2l6ZShpbmRleCkgfHwgMDtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBnZXRMaW1pdChtYXgpIHtcbiAgICByZXR1cm4gdG9Qb3NpdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF4ID8gQ29tcG9uZW50czIuQ29udHJvbGxlci5nZXRFbmQoKSA6IDAsICEhb3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMudHJpbVNwYWNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhblNoaWZ0KGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMpIHtcbiAgICB2YXIgc2hpZnRlZCA9IG9yaWVudChzaGlmdChnZXRQb3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb24oKSwgYmFja3dhcmRzKSk7XG4gICAgcmV0dXJuIGJhY2t3YXJkcyA/IHNoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdGVkID49IDAgOiBzaGlmdGVkIDw9IGxpc3RbcmVzb2x2ZSgic2Nyb2xsV2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIildIC0gcmVjdCh0cmFjaylbcmVzb2x2ZSgid2lkdGgiKV07XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZXhjZWVkZWRMaW1pdChtYXgsIHBvc2l0aW9uKSB7XG4gICAgcG9zaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uID0gaXNVbmRlZmluZWQocG9zaXRpb24pID8gZ2V0UG9zaXRpb24oKSA6IHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjtcbiAgICB2YXIgZXhjZWVkZWRNaW4gPSBtYXggIT09IHRydWUgJiYgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWVudChwb3NpdGlvbikgPCBvcmllbnQoZ2V0TGltaXQoZmFsc2UpKTtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGV4Y2VlZGVkTWF4ID0gbWF4ICE9PSBmYWxzZSAmJiBvcmllbnQocG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKSA+IG9yaWVudChnZXRMaW1pdCh0cnVlKSk7XG4gICAgcmV0dXJuIGV4Y2VlZGVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01pbiB8fCBleGNlZWRlZE1heDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OiBtb3VudCxcbiAgICBtb3ZlOiBtb3ZlLFxuICAgIGp1bXA6IGp1bXAsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICAgIHNoaWZ0OiBzaGlmdCxcbiAgICBjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY2VsOiBjYW5jZWwsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAgICB0b1Bvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbjogdG9Qb3NpdGlvbixcbiAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb24sXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGdldExpbWl0OiBnZXRMaW1pdCxcbiAgICBleGNlZWRlZExpbWl0OiBleGNlZWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RMaW1pdCxcbiAgICByZXBvc2l0aW9uOiByZXBvc2l0aW9uXG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBDb250cm9sbGVyKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlNSA9IEV2ZW50SW50ZXJmYWNlKFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNS5vbixcbiAgICAgIGVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX0V2ZW50SW50ZXJmYWNlNS5lbWl0O1xuXG4gIHZhciBNb3ZlID0gQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMyLk1vdmU7XG4gIHZhciBnZXRQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgZ2V0TGltaXQgPSBNb3ZlLmdldExpbWl0LFxuICAgICAgdG9Qb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBNb3ZlLnRvUG9zaXRpb247XG4gIHZhciBfQ29tcG9uZW50czIkU2xpZGVzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyLlNsaWRlcyxcbiAgICAgIGlzRW5vdWdoID0gX0NvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMiRTbGlkZXMuaXNFbm91Z2gsXG4gICAgICBnZXRMZW5ndGggPSBfQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyJFNsaWRlcy5nZXRMZW5ndGg7XG4gIHZhciBvbWl0RW5kID0gb3B0aW9ucy5vbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VuZDtcbiAgdmFyIGlzTG9vcCA9IFNwbGlkZTIuaXMoTE9PUCk7XG4gIHZhciBpc1NsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSA9IFNwbGlkZTIuaXMoU0xJREUpO1xuICB2YXIgZ2V0TmV4dCA9IGFwcGx5KGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBZGphY2VudCwgZmFsc2UpO1xuICB2YXIgZ2V0UHJldiA9IGFwcGx5KGdldEFkaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2VudCwgdHJ1ZSk7XG4gIHZhciBjdXJySW5kZXggPSBvcHRpb25zLnN0YXJ0IHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAwO1xuICB2YXIgZW5kSW5kZXg7XG4gIHZhciBwcmV2SW5kZXggPSBjdXJySW5kZXg7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgc2xpZGVDb3VudDtcbiAgdmFyIHBlck1vdmU7XG4gIHZhciBwZXJQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7XG4gICAgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKFtFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9FTkRfSU5ERVgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0NIQU5HRURdLCBpbml0KTtcbiAgICBvbihFVkVOVF9SRVNJWkVELCBvblJlc2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgc2xpZGVDb3VudCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBnZXRMZW5ndGgodHJ1ZSk7XG4gICAgcGVyTW92ZSA9IG9wdGlvbnMucGVyTW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZTtcbiAgICBlbmRJbmRleCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRFbmQoKTtcbiAgICB2YXIgaW5kZXggPSBjbGFtcChjdXJySW5kZXgsIDAsIG9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0RW5kID8gZW5kSW5kZXggOiBzbGlkZUNvdW50IC0gMSk7XG5cbiAgICBpZiAoaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ICE9PSBjdXJySW5kZXgpIHtcbiAgICAgIGN1cnJJbmRleCA9IGluZGV4O1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIE1vdmUucmVwb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvblJlc2l6ZWQoKSB7XG4gICAgaWYgKGVuZEluZGV4ICE9PSBnZXRFbmQoKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGVtaXQoRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQpO1xuICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBnbyhjb250cm9sLCBhbGxvd1NhbWVJbmRleCwgY2FsbGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrKSB7XG4gICAgaWYgKCFpc0J1c3koKSkge1xuICAgICAgdmFyIGRlc3QgPSBwYXJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoY29udHJvbCk7XG4gICAgICB2YXIgaW5kZXggPSBsb29wKGRlc3QpO1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaWYgKGluZGV4ID4gLTEgJiYgKGFsbG93U2FtZUluZGV4IHx8IGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichPT0gY3VyckluZGV4KSkge1xuICAgICAgICBzZXRJbmRleChpbmRleCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBNb3ZlLm1vdmUoZGVzdCwgaW5kZXgsIHByZXZJbmRleCwgY2FsbGJhY2spO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGwoZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCBkdXJhdGlvbiwgc25hcCwgY2FsbGJhY2spIHtcbiAgICBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIuU2Nyb2xsLnNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHNuYXAsIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiAoKSB7XG4gICAgICB2YXIgaW5kZXggPSBsb29wKE1vdmUudG9JbmRleChnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0UG9zaXRpb24oKSkpO1xuICAgICAgc2V0SW5kZXgob21pdEVuZCA/IG1pbihpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXgsIGVuZEluZGV4KSA6IGluZGV4KTtcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2UoY29udHJvbCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB2YXIgaW5kZXggPSBjdXJySW5kZXg7XG5cbiAgICBpZiAoaXNTdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nKGNvbnRyb2wpKSB7XG4gICAgICB2YXIgX3JlZiA9IGNvbnRyb2wubWF0Y2goLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoWytcXC08Pl0pKFxcZCspPy8pIHx8IFtdLFxuICAgICAgICAgIGluZGljYXRvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfcmVmWzFdLFxuICAgICAgICAgIG51bWJlciA9IF9yZWZbMl07XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAoaW5kaWNhdG9yID09PSAiKyIgfHwgaW5kaWNhdG9yID09PSAiLSIpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGluZGV4ID0gY29tcHV0ZURlc3RJbmRleChjdXJySW5kZXggKyArKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIiArIGluZGljYXRvciArICgrbnVtYmVyIHx8IDEpKSwgY3VyckluZGV4KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGVsc2UgaWYgKGluZGljYXRvciA9PT0gIj4iKSB7XG4gICAgICAgIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCA9IG51bWJlciA/IHRvSW5kZXgoK251bWJlcikgOiBnZXROZXh0KHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIH0gZWxzZSBpZiAoaW5kaWNhdG9yID09PSAiPCIpIHtcbiAgICAgICAgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gZ2V0UHJldih0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGluZGV4ID0gaXNMb29wID8gY29udHJvbCA6IGNsYW1wKGNvbnRyb2wsIDAsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGdldEFkamFjZW50KHByZXYsIGRlc3RpbmF0aW9uKSB7XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIgPSBwZXJNb3ZlIHx8IChoYXNGb2N1cygpID8gMSA6IHBlclBhZ2UpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZGVzdCA9IGNvbXB1dGVEZXN0SW5kZXgoY3VyckluZGV4ICsgbnVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciAqIChwcmV2ID8gLTEgOiAxKSwgY3VyckluZGV4LCAhKHBlck1vdmUgfHwgaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc0ZvY3VzKCkpKTtcblxuICAgIGlmIChkZXN0ID09PSAtMSAmJiBpc1NsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgaWYgKCFhcHByb3hpbWF0ZWx5RXF1YWwoZ2V0UG9zaXRpb24oKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldExpbWl0KCFwcmV2KSwgMSkpIHtcbiAgICAgICAgcmV0dXJuIHByZXYgPyAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGVuZEluZGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZXN0aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24gPyBkZXN0IDogbG9vcChkZXN0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wdXRlRGVzdEluZGV4KGRlc3QsIGZyb20sIHNuYXBQYWdlKSB7XG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0Vub3VnaCgpIHx8IGhhc0ZvY3VzKCkpIHtcbiAgICAgIHZhciBpbmRleCA9IGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wdXRlTW92YWJsZURlc3RJbmRleChkZXN0KTtcblxuICAgICAgaWYgKGluZGV4ICE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gZGVzdCkge1xuICAgICAgICBmcm9tID0gZGVzdDtcbiAgICAgICAgZGVzdCA9IGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDtcbiAgICAgICAgc25hcFBhZ2UgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChkZXN0IDwgMCB8fCBkZXN0ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyghcGVyTW92ZSAmJiAoYmV0d2VlbigwLCBkZXN0LCBmcm9tLCB0cnVlKSB8fCBiZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0d2VlbihlbmRJbmRleCwgZnJvbSwgZGVzdCwgdHJ1ZSkpKSB7XG4gICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QgPSB0b0luZGV4KHRvUGFnZShkZXN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgIGlmIChpc0xvb3ApIHtcbiAgICAgICAgICAgIGRlc3QgPSBzbmFwUGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UgPyBkZXN0IDwgMCA/IC0oc2xpZGVDb3VudCAlIHBlclBhZ2UgfHwgcGVyUGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIDogc2xpZGVDb3VudCA6IGRlc3Q7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5yZXdpbmQpIHtcbiAgICAgICAgICAgIGRlc3QgPSBkZXN0IDwgMCA/IGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleCA6IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlc3QgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKHNuYXBQYWdlICYmIGRlc3QgIT09IGZyb20pIHtcbiAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdCA9IHRvSW5kZXgodG9QYWdlKGZyb20pICsgKGRlc3QgPCBmcm9tID8gLTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogMSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0ID0gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc3Q7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gY29tcHV0ZU1vdmFibGVEZXN0SW5kZXgoZGVzdCkge1xuICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNTbGlkZSAmJiBvcHRpb25zLnRyaW1TcGFjZSA9PT0gIm1vdmUiICYmIGRlc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyE9PSBjdXJySW5kZXgpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IGdldFBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbigpO1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gPT09IHRvUG9zaXRpb24oZGVzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWUpICYmIGJldHdlZW4oZGVzdCwgMCwgU3BsaWRlMi5sZW5ndGggLSAxLCAhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMucmV3aW5kKSkge1xuICAgICAgICBkZXN0IDwgY3VyckluZGV4ID8gLS0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA6ICsrZGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q7XG4gIH1cblxuICBmdW5jdGlvbiBsb29wKGluZGV4KSB7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0xvb3AgPyAoaW5kZXggKyBzbGlkZUNvdW50KSAlIHNsaWRlQ291bnQgfHwgMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVuZCgpIHtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZCA9IHNsaWRlQ291bnQgLSAoaGFzRm9jdXMoKSB8fCBpc0xvb3AgJiYgcGVyTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUgPyAxIDogcGVyUGFnZSk7XG5cbiAgICB3aGlsZSAob21pdEVuZCAmJiBlbmQtLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPiAwKSB7XG4gICAgICBpZiAodG9Qb3NpdGlvbihzbGlkZUNvdW50IC0gMSwgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpICE9PSB0b1Bvc2l0aW9uKGVuZCwgdHJ1ZSkpIHtcbiAgICAgICAgZW5kKys7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwKGVuZCwgMCwgc2xpZGVDb3VudCAtIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvSW5kZXgocGFnZSkge1xuICAgIHJldHVybiBjbGFtcChoYXNGb2N1cygpID8gcGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgOiBwZXJQYWdlICogcGFnZSwgMCwgZW5kSW5kZXgpO1xuICB9XG5cbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHRvUGFnZShpbmRleCkge1xuICAgIHJldHVybiBoYXNGb2N1cygpID8gbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbihpbmRleCwgZW5kSW5kZXgpIDogZmxvb3IoKGluZGV4ID49IGVuZEluZGV4ID8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlQ291bnQgLSAxIDogaW5kZXgpIC8gcGVyUGFnZSk7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdG9EZXN0KGRlc3RpbmF0aW9uKSB7XG4gICAgdmFyIGNsb3Nlc3QgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZS50b0luZGV4KGRlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gaXNTbGlkZSA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFtcChjbG9zZXN0LCAwLCBlbmRJbmRleCkgOiBjbG9zZXN0O1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIHNldEluZGV4KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ICE9PSBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyckluZGV4KSB7XG4gICAgICBwcmV2SW5kZXggPSBjdXJySW5kZXg7XG4gICAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyckluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KHByZXYpIHtcbiAgICByZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBoYXNGb2N1cygpIHtcbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICFpc1VuZGVmaW5lZChvcHRpb25zLmZvY3VzKSB8fCBvcHRpb25zLmlzTmF2aWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBpc0J1c3koKSB7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGUyLnN0YXRlLmlzKFtNT1ZJTkcsIFNDUk9MTElOR10pICYmICEhb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMud2FpdEZvclRyYW5zaXRpb247XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudDogbW91bnQsXG4gICAgZ286IGdvLFxuICAgIHNjcm9sbDogc2Nyb2xsLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBnZXROZXh0OiBnZXROZXh0LFxuICAgIGdldFByZXY6IGdldFByZXYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGdldEFkamFjZW50OiBnZXRBZGphY2VudCxcbiAgICBnZXRFbmQ6IGdldEVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsXG4gICAgc2V0SW5kZXg6IHNldEluZGV4LFxuICAgIGdldEluZGV4OiBnZXRJbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAgICB0b1BhZ2U6IHRvUGFnZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdG9EZXN0OiB0b0Rlc3QsXG4gICAgaGFzRm9jdXM6IGhhc0ZvY3VzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpc0J1c3k6IGlzQnVzeVxuICB9O1xufVxuXG52YXIgWE1MX05BTUVfU1BBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NFID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtcbnZhciBQQVRIID0gIm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMTUuNSAwLjkzMi00LjMgNC4zOCAxNC41IDE0LjYtMTQuNSAxNC41IDQuMyA0LjQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE0LjYtMTQuNiA0LjQtNC4zLTQuNC00LjQtMTQuNi0xNC42eiI7XG52YXIgU0laRSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSA0MDtcblxuZnVuY3Rpb24gQXJyb3dzKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucykge1xuICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBvbiA9IGV2ZW50Lm9uLFxuICAgICAgYmluZCA9IGV2ZW50LmJpbmQsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdCA9IGV2ZW50LmVtaXQ7XG4gIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NlcyxcbiAgICAgIGkxOG4gPSBvcHRpb25zLmkxOG47XG4gIHZhciBFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBDb21wb25lbnRzMi5FbGVtZW50cyxcbiAgICAgIENvbnRyb2xsZXIgPSBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50czIuQ29udHJvbGxlcjtcbiAgdmFyIHBsYWNlaG9sZGVyID0gRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmFycm93cyxcbiAgICAgIHRyYWNrID0gRWxlbWVudHMudHJhY2s7XG4gIHZhciB3cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlciA9IHBsYWNlaG9sZGVyO1xuICB2YXIgcHJldiA9IEVsZW1lbnRzLnByZXY7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgbmV4dCA9IEVsZW1lbnRzLm5leHQ7XG4gIHZhciBjcmVhdGVkO1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdyYXBwZXJDbGFzc2VzO1xuICB2YXIgYXJyb3dzID0ge307XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgICBvbihFVkVOVF9VUERBVEVELCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVtb3VudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdW50KCkge1xuICAgIGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cm95KCk7XG4gICAgbW91bnQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5hcnJvd3M7XG5cbiAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGVuYWJsZWQgJiYgIShwcmV2ICYmIG5leHQpKSB7XG4gICAgICBjcmVhdGVBcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dzKCk7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgbmV4dCkge1xuICAgICAgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2lnbihhcnJvd3MsIHtcbiAgICAgICAgcHJldjogcHJldixcbiAgICAgICAgbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG5leHRcbiAgICAgIH0pO1xuICAgICAgZGlzcGxheSh3cmFwcGVyLCBlbmFibGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/ICIiIDogIm5vbmUiKTtcbiAgICAgIGFkZENsYXNzKHdyYXBwZXIsIHdyYXBwZXJDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NlcyA9IENMQVNTX0FSUk9XUyArICItLSIgKyBvcHRpb25zLmRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBsaXN0ZW4oKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHVwZGF0ZSgpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoW3ByZXYsIG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0XSwgQVJJQV9DT05UUk9MUywgdHJhY2suaWQpO1xuICAgICAgICBlbWl0KEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPV1NfTU9VTlRFRCwgcHJldiwgbmV4dCk7XG4gICAgICB9XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgZXZlbnQuZGVzdHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koKTtcbiAgICByZW1vdmVDbGFzcyh3cmFwcGVyLCB3cmFwcGVyQ2xhc3NlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgaWYgKGNyZWF0ZWQpIHtcbiAgICAgIHJlbW92ZShwbGFjZWhvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXIgPyBbcHJldiwgbmV4dF0gOiB3cmFwcGVyKTtcbiAgICAgIHByZXYgPSBuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZUF0dHJpYnV0ZShbcHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3YsIG5leHRdLCBBTExfQVRUUklCVVRFUyk7XG4gICAgfVxuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGxpc3RlbigpIHtcbiAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfTU9WJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9TQ1JPTExFRCwgRVZFTlRfRU5EX0lORCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFWF9DSEFOR0VEXSwgdXBkYXRlKTtcbiAgICBiaW5kKG5leHQsICJjbGljayIsIGFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BseShnbywgIj4iKSk7XG4gICAgYmluZChwcmV2LCAiY2xpY2siLCBhcHBseShnbywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICI8IikpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ28oY29udHJvbCkge1xuICAgIENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sbGVyLmdvKGNvbnRyb2wsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NyZWF0ZUFycm93cygpIHtcbiAgICB3cmFwcGVyID0gcGxhY2Vob2xkZXIgfHwgY3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWF0ZSgiZGl2IiwgY2xhc3Nlcy5hcnJvd3MpO1xuICAgIHByZXYgPSBjcmVhdGVBcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3codHJ1ZSk7XG4gICAgbmV4dCA9IGNyZWF0ZUFycm93KGZhbHNlKTtcbiAgICBjcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYXRlZCA9IHRydWU7XG4gICAgYXBwZW5kKHdyYXBwZXIsIFtwcmV2LCBuZXh0XSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICFwbGFjZWhvbGRlciAmJiBiZWZvcmUod3JhcHBlciwgdHJhY2spO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycm93KHByZXYyKSB7XG4gICAgdmFyIGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdyA9ICI8YnV0dG9uIGNsYXNzPVxcIiIgKyBjbGFzc2VzLmFycm93ICsgIiAiICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChwcmV2MiA/IGNsYXNzZXMucHJldiA6IGNsYXNzZXMubmV4dCkgKyAiXFwiIHR5cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlPVxcImJ1dHRvblxcIj48c3ZnIHhtbG5zPVxcIiIgKyBYTUxfTkFNRV9TUEFDRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyAiXFwiIHZpZXdCb3g9XFwiMCAwICIgKyBTSVpFICsgIiAiICsgU0laRSArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiXFwiIHdpZHRoPVxcIiIgKyBTSVpFICsgIlxcIiBoZWlnaHQ9XFwiIiArIFNJWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFICsgIlxcIiBmb2N1c2FibGU9XFwiZmFsc2VcXCI+PHBhdGggZD1cXCIiICsgKG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLmFycm93UGF0aCB8fCBQQVRIKSArICJcXCIgLz4iO1xuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyc2VIdG1sKGFycm93KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaWYgKHByZXYgJiYgbmV4dCkge1xuICAgICAgdmFyIGluZGV4ID0gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuaW5kZXg7XG4gICAgICB2YXIgcHJldkluZGV4ID0gQ29udHJvbGxlci5nZXRQcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldigpO1xuICAgICAgdmFyIG5leHRJbmRleCA9IENvbnRyb2xsZXIuZ2V0TmV4dCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIHZhciBwcmV2TGFiZWwgPSBwcmV2SW5kZXggPiAtMSAmJiBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPCBwcmV2SW5kZXggPyBpMThuLmxhc3QgOiBpMThuLnByZXY7XG4gICAgICB2YXIgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHRMYWJlbCA9IG5leHRJbmRleCA+IC0xICYmIGluZGV4ID4gbmV4dEluZGV4ID8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGkxOG4uZmlyc3QgOiBpMThuLm5leHQ7XG4gICAgICBwcmV2LmRpc2FibGVkID0gcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXZJbmRleCA8IDA7XG4gICAgICBuZXh0LmRpc2FibGVkID0gbmV4dEluZGV4IDwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7XG4gICAgICBzZXRBdHRyaWJ1dGUocHJldiwgQVJJQV9MQUJFTCwgcHJldkxhYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCk7XG4gICAgICBzZXRBdHRyaWJ1dGUobmV4dCwgQVJJQV9MQUJFTCwgbmV4dExhYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbCk7XG4gICAgICBlbWl0KEVWRU5UX0FSUk9XU19VUERBVEVELCBwcmV2LCBuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgcHJldkluZGV4LCBuZXh0SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIGFycm93czogYXJyb3dzLFxuICAgIG1vdW50OiBtb3VudCxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdHJveTogZGVzdHJveSxcbiAgICB1cGRhdGU6IHVwZGF0ZVxuICB9O1xufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxudmFyIElOVEVSVkFMX0RBVEFfQVRUUklCVVRFID0gREFUQV9BVFRSSUJVVEUgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIi1pbnRlcnZhbCI7XG5cbmZ1bmN0aW9uIEF1dG9wbGF5KFNwbGlkZTIsIENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlNiA9IEV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24sXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlNi5iaW5kLFxuICAgICAgZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQgPSBfRXZlbnRJbnRlcmZhY2U2LmVtaXQ7XG5cbiAgdmFyIGludGVydmFsID0gUmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncXVlc3RJbnRlcnZhbChvcHRpb25zLmludGVydmFsLCBTcGxpZGUyLmdvLmJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIsICI+IiksIG9uQW5pbWF0aW9uRnJhbWUpO1xuICB2YXIgaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaW50ZXJ2YWwuaXNQYXVzZWQ7XG4gIHZhciBFbGVtZW50cyA9IENvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzMi5FbGVtZW50cyxcbiAgICAgIF9Db21wb25lbnRzMiRFbGVtZW50czQgPSBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50czIuRWxlbWVudHMsXG4gICAgICByb290ID0gX0NvbXBvbmVudHMyJEVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czQucm9vdCxcbiAgICAgIHRvZ2dsZSA9IF9Db21wb25lbnRzMiRFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0LnRvZ2dsZTtcbiAgdmFyIGF1dG9wbGF5ID0gb3B0aW9ucy5hdXRvcGxheTtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBob3ZlcmVkO1xuICB2YXIgZm9jdXNlZDtcbiAgdmFyIHN0b3BwZWQgPSBhdXRvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXkgPT09ICJwYXVzZSI7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIChhdXRvcGxheSkge1xuICAgICAgbGlzdGVuKCk7XG4gICAgICB0b2dnbGUgJiYgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUFfQ09OVFJPTFMsIEVsZW1lbnRzLnRyYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInay5pZCk7XG4gICAgICBzdG9wcGVkIHx8IHBsYXkoKTtcbiAgICAgIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0ZW4oKSB7XG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhvcHRpb25zLnBhdXNlT25Ib3Zlcikge1xuICAgICAgYmluZChyb290LCAibW91c2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ZXIgbW91c2VsZWF2ZSIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGhvdmVyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkID0gZS50eXBlID09PSAibW91c2VlbnRlciI7XG4gICAgICAgIGF1dG9Ub2dnbGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wYXVzZU9uRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvY3VzKSB7XG4gICAgICBiaW5kKHJvb3QsICJmb2N1c2luIGZvY3Vzb3V0IiwgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIChlKSB7XG4gICAgICAgIGZvY3VzZWQgPSBlLnR5cGUgPT09ICJmb2N1c2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiI7XG4gICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAodG9nZ2xlKSB7XG4gICAgICBiaW5kKHRvZ2dsZSwgImNsaWNrIiwgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uICgpIHtcbiAgICAgICAgc3RvcHBlZCA/IHBsYXkoKSA6IHBhdXNlKHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uKFtFVkVOVF9NT1ZFLCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfU0NST0xMLCBFVkVOVF9SRUZSRVNIXSwgaW50ZXJ2YWwucmV3aW5kKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24oRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIGlmIChpc1BhdXNlZCgpICYmIENvbXBvbmVudHMyLlNsaWRlcy5pcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbm91Z2goKSkge1xuICAgICAgaW50ZXJ2YWwuc3RhcnQoIW9wdGlvbnMucmVzZXRQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvZ3Jlc3MpO1xuICAgICAgZm9jdXNlZCA9IGhvdmVyZWQgPSBzdG9wcGVkID0gZmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHNlO1xuICAgICAgdXBkYXRlKCk7XG4gICAgICBlbWl0KEVWRU5UX0FVVE9QTEFZX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFZKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZShzdG9wKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChzdG9wID09PSB2b2lkIDApIHtcbiAgICAgIHN0b3AgPSB0cnVlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBzdG9wcGVkID0gISFzdG9wO1xuICAgIHVwZGF0ZSgpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmICghaXNQYXVzZWQoKSkge1xuICAgICAgaW50ZXJ2YWwucGF1c2UoKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0KEVWRU5UX0FVVE9QTEFZX1BBVVNFKTtcbiAgICB9XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gYXV0b1RvZ2dsZSgpIHtcbiAgICBpZiAoIXN0b3BwZWQpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidob3ZlcmVkIHx8IGZvY3VzZWQgPyBwYXVzZShmYWxzZSkgOiBwbGF5KCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBpZiAodG9nZ2xlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgdG9nZ2xlQ2xhc3ModG9nZ2xlLCBDTEFTU19BQ1RJVkUsICFzdG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlZCk7XG4gICAgICBzZXRBdHRyaWJ1dGUodG9nZ2xlLCBBUklBX0xBQkVMLCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5pMThuW3N0b3BwZWQgPyAicGxheSIgOiAicGF1c2UiXSk7XG4gICAgfVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWUocmF0ZSkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgYmFyID0gRWxlbWVudHMuYmFyO1xuICAgIGJhciAmJiBzdHlsZShiYXIsICJ3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkdGgiLCByYXRlICogMTAwICsgIiUiKTtcbiAgICBlbWl0KEVWRU5UX0FVVE9QTEFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19QTEFZSU5HLCByYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW92ZShpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gpIHtcbiAgICB2YXIgU2xpZGUgPSBDb21wb25lbnRzMi5TbGlkZXMuZ2V0QXQoaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4KTtcbiAgICBpbnRlcnZhbC5zZXQoU2xpZGUgJiYgK2dldEF0dHJpYnV0ZShTbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUuc2xpZGUsIElOVEVSVkFMX0RBVEFfQVRUUklCVVRFKSB8fCBvcHRpb25zLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcnZhbCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVzdHJveTogaW50ZXJ2YWwuY2FuY2VsLFxuICAgIHBsYXk6IHBsYXksXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHBhdXNlOiBwYXVzZSxcbiAgICBpc1BhdXNlZDogaXNQYXVzZWRcbiAgfTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIENvdmVyKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlNyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNy5vbjtcblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKG9wdGlvbnMuY292ZXIpIHtcbiAgICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VTSF0sIGFwcGx5KGNvdmVyLCB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGNvdmVyKGNvdmVyMikge1xuICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaChmdW5jdGlvbiAoU2xpZGUpIHtcbiAgICAgIHZhciBpbWcgPSBjaGlsZChTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUuY29udGFpbmVyIHx8IFNsaWRlLnNsaWRlLCAiaW1nIik7XG5cbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1nICYmIGltZy5zcmMpIHtcbiAgICAgICAgdG9nZ2xlKGNvdmVyMiwgaW1nLCBTbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhjb3ZlcjIsIGltZywgU2xpZGUpIHtcbiAgICBTbGlkZS5zdHlsZSgiYmFja2dyb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQiLCBjb3ZlcjIgPyAiY2VudGVyL2NvdmVyIG5vLXJlcGVhdCB1cmwoXFwiIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWcuc3JjICsgIlxcIikiIDogIiIsIHRydWUpO1xuICAgIGRpc3BsYXkoaW1nLCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXIyID8gIm5vbmUiIDogIiIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGFwcGx5KGNvdmVyLCBmYWxzZSlcbiAgfTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbnZhciBCT1VOQ0VfRElGRl9USFJFU0hPTEQgPSAxMDtcbnZhciBCT1VOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NFX0RVUkFUSU9OID0gNjAwO1xudmFyIEZSSUNUSU9OX0ZBQ1RPUiA9IDAuNjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQkFTRV9WRUxPQ0lUWSA9IDEuNTtcbnZhciBNSU5fRFVSQVRJT04gPSA4MCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwO1xuXG5mdW5jdGlvbiBTY3JvbGwoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U4ID0gRXZlbnRJbnRlcmZhY2UoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U4Lm9uLFxuICAgICAgZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBfRXZlbnRJbnRlcmZhY2U4LmVtaXQ7XG5cbiAgdmFyIHNldCA9IFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXRlLnNldDtcbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlO1xuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldFBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbiAgICAgIGdldExpbWl0ID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUuZ2V0TGltaXQsXG4gICAgICBleGNlZWRlZExpbWl0ID0gTW92ZS5leGNlZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZWRMaW1pdCxcbiAgICAgIHRyYW5zbGF0ZSA9IE1vdmUudHJhbnNsYXRlO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIGlzU2xpZGUgPSBTcGxpZGUyLmlzKFNMSURFKTtcbiAgdmFyIGludGVydmFsO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGNhbGxiYWNrO1xuICB2YXIgZnJpY3Rpb24gPSAxO1xuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBtb3VudCgpIHtcbiAgICBvbihFVkVOVF9NT1ZFLCBjbGVhcik7XG4gICAgb24oWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIXSwgY2FuY2VsKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBzY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25TY3JvbGxlZCwgbm9Db25zdHJhaW4pIHtcbiAgICB2YXIgZnJvbSA9IGdldFBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbigpO1xuICAgIGNsZWFyKCk7XG5cbiAgICBpZiAoc25hcCAmJiAoIWlzUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlIHx8ICFleGNlZWRlZExpbWl0KCkpKSB7XG4gICAgICB2YXIgc2l6ZSA9IENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzMi5MYXlvdXQuc2xpZGVyU2l6ZSgpO1xuICAgICAgdmFyIG9mZnNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBzaWduKGRlc3RpbmF0aW9uKSAqIHNpemUgKiBmbG9vcihhYnMoZGVzdGluYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uKSAvIHNpemUpIHx8IDA7XG4gICAgICBkZXN0aW5hdGlvbiA9IE1vdmUudG9Qb3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb24oQ29tcG9uZW50czIuQ29udHJvbGxlci50b0Rlc3QoZGVzdGluYXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyUgc2l6ZSkpICsgb2Zmc2V0O1xuICAgIH1cblxuICAgIHZhciBub0Rpc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGFwcHJveGltYXRlbHlFcXVhbChmcm9tLCBkZXN0aW5hdGlvbiwgMSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZyaWN0aW9uID0gMTtcbiAgICBkdXJhdGlvbiA9IG5vRGlzdGFuY2UgPyAwIDogZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cmF0aW9uIHx8IG1heChhYnMoZGVzdGluYXRpb24gLSBmcm9tKSAvIEJBU0VfVkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTE9DSVRZLCBNSU5fRFVSQVRJT04pO1xuICAgIGNhbGxiYWNrID0gb25TY3JvbGxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoZHVyYXRpb24sIG9uRW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgYXBwbHkodXBkYXRlLCBmcm9tLCBkZXN0aW5hdGlvbiwgbm9Db25zdHJhaW4pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMSk7XG4gICAgc2V0KFNDUk9MTElORyk7XG4gICAgZW1pdChFVkVOVF9TQ1JPTEwpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpbnRlcnZhbC5zdGFydCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25FbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIHNldChJRExFKTtcbiAgICBjYWxsYmFjayAmJiBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICBlbWl0KEVWRU5UX1NDUk9MTEVEKTtcbiAgfVxuXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB1cGRhdGUoZnJvbSwgdG8sIG5vQ29uc3RyYWluLCByYXRlKSB7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb3NpdGlvbiA9IGdldFBvc2l0aW9uKCk7XG4gICAgdmFyIHRhcmdldCA9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgKHRvIC0gZnJvbSkgKiBlYXNpbmcocmF0ZSk7XG4gICAgdmFyIGRpZmYgPSAodGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmdldCAtIHBvc2l0aW9uKSAqIGZyaWN0aW9uO1xuICAgIHRyYW5zbGF0ZShwb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKyBkaWZmKTtcblxuICAgIGlmIChpc1NsaWRlICYmICFub0NvbnN0cmFpbiAmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXhjZWVkZWRMaW1pdCgpKSB7XG4gICAgICBmcmljdGlvbiAqPSBGUklDVElPTl9GJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVE9SO1xuXG4gICAgICBpZiAoYWJzKGRpZmYpIDwgQk9VTkNFX0RJRkZfVEhSRVNIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09MRCkge1xuICAgICAgICBzY3JvbGwoZ2V0TGltaXQoZXhjZWVkZWRMaW1pdCh0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpLCBCT1VOQ0VfRFVSQVRJT04sIGZhbHNlLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoaW50ZXJ2YWwpIHtcbiAgICAgIGludGVydmFsLmNhbmNlbCgpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKGludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiAhaW50ZXJ2YWwuaXNQYXVzZWQoKSkge1xuICAgICAgY2xlYXIoKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvbkVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVhc2luZyh0KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBlYXNpbmdGdW5jID0gb3B0aW9ucy5lYXNpbmdGdW5jO1xuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gZWFzaW5nRnVuYyA/IGVhc2luZ0Z1bmModCkgOiAxIC0gTWF0aC5wb3coMSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSB0LCA0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBkZXN0cm95OiBjbGVhcixcbiAgICBzY3JvbGw6IHNjcm9sbCxcbiAgICBjYW5jZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsOiBjYW5jZWxcbiAgfTtcbn1cblxudmFyIFNDUk9MTF9MSVNURU5FUl9PUFRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyA9IHtcbiAgcGFzc2l2ZTogZmFsc2UsXG4gIGNhcHR1cmU6IHRydWVcbn07XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBEcmFnKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgX0V2ZW50SW50ZXJmYWNlOSA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlOS5vbixcbiAgICAgIGVtaXQgPSBfRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlOS5lbWl0LFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U5LmJpbmQsXG4gICAgICB1bmJpbmQgPSBfRXZlbnRJbnRlcmZhY2U5LnVuYmluZDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIHN0YXRlID0gU3BsaWRlMi5zdGF0ZTtcbiAgdmFyIE1vdmUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIuTW92ZSxcbiAgICAgIFNjcm9sbCA9IENvbXBvbmVudHMyLlNjcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGwsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcixcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB0cmFjayA9IENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZHVjZSA9IENvbXBvbmVudHMyLk1lZGlhLnJlZHVjZTtcbiAgdmFyIF9Db21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIkRGlyZWN0aW8yID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLFxuICAgICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc29sdmUgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8yLnJlc29sdmUsXG4gICAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpZW50ID0gX0NvbXBvbmVudHMyJERpcmVjdGlvMi5vcmllbnQ7XG4gIHZhciBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgZXhjZWVkZWRMaW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBNb3ZlLmV4Y2VlZGVkTGltaXQ7XG4gIHZhciBiYXNlUG9zaXRpb247XG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYmFzZUV2ZW50O1xuICB2YXIgcHJldkJhc2VFdmVudDtcbiAgdmFyIGlzRnJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gIHZhciBkcmFnZ2luZztcbiAgdmFyIGV4Y2VlZGVkID0gZmFsc2U7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgY2xpY2tQcmV2ZW50ZWQ7XG4gIHZhciBkaXNhYmxlZDtcbiAgdmFyIHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgYmluZCh0cmFjaywgUE9JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05URVJfTU9WRV9FVkVOVFMsIG5vb3AsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgYmluZCh0cmFjaywgUE9JTlRFUl9VUF9FVkVOVFMsIG5vb3AsIFNDUk9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgYmluZCh0cmFjaywgUE9JTlRFUl9ET1cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTl9FVkVOVFMsIG9uUG9pbnRlckRvd24sIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgYmluZCh0cmFjaywgImNsaWNrIiwgb25DbGljaywge1xuICAgICAgY2FwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cmU6IHRydWVcbiAgICB9KTtcbiAgICBiaW5kKHRyYWNrLCAiZHJhZ3N0YXJ0IiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXZlbnQpO1xuICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEXSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluaXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgZHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cgPSBvcHRpb25zLmRyYWc7XG4gICAgZGlzYWJsZSghZHJhZyk7XG4gICAgaXNGcmVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGRyYWcgPT09ICJmcmVlIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUG9pbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JEb3duKGUpIHtcbiAgICBjbGlja1ByZXZlbnRlZCA9IGZhbHNlO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmICghZGlzYWJsZWQpIHtcbiAgICAgIHZhciBpc1RvdWNoID0gaXNUb3VjaEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChlKTtcblxuICAgICAgaWYgKGlzRHJhZ2dhYmxlKGUudGFyZ2V0KSAmJiAoaXNUb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ggfHwgIWUuYnV0dG9uKSkge1xuICAgICAgICBpZiAoIUNvbnRyb2xsZXIuaXNCdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzeSgpKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gaXNUb3VjaCA/IHRyYWNrIDogd2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RvdztcbiAgICAgICAgICBkcmFnZ2luZyA9IHN0YXRlLmlzKFtNT1ZJTkcsIFNDUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTExJTkddKTtcbiAgICAgICAgICBwcmV2QmFzZUV2ZW50ID0gbnVsbDtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgYmluZCh0YXJnZXQsIFBPSU5URVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgICAgICAgYmluZCh0YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXAsIFNDUk9MTF9MSVNUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VORVJfT1BUSU9OUyk7XG4gICAgICAgICAgTW92ZS5jYW5jZWwoKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgU2Nyb2xsLmNhbmNlbCgpO1xuICAgICAgICAgIHNhdmUoZSk7XG4gICAgICAgIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vsc2Uge1xuICAgICAgICAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGVyTW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkge1xuICAgIGlmICghc3RhdGUuaXMoRFJBR0dJTkcpKSB7XG4gICAgICBzdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc2V0KERSQUdHSU5HKTtcbiAgICAgIGVtaXQoRVZFTlRfRFJBRyk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGlmIChlLmNhbmNlbGFibGUpIHtcbiAgICAgIGlmIChkcmFnZ2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cpIHtcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoYmFzZVBvc2l0aW9uICsgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFpbihkaWZmQ29vcmQoZSkpKTtcbiAgICAgICAgdmFyIGV4cGlyZWQgPSBkaWZmVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWUoZSkgPiBMT0dfSU5URVJWQUw7XG4gICAgICAgIHZhciBoYXNFeGNlZWRlZCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBleGNlZWRlZCAhPT0gKGV4Y2VlZGVkID0gZXhjZWVkZWRMaW1pdCgpKTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaWYgKGV4cGlyZWQgfHwgaGFzRXhjZWVkZWQpIHtcbiAgICAgICAgICBzYXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsaWNrUHJldmVudGVkID0gdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XG4gICAgICAgIGVtaXQoRVZFTlRfRFJBR0dJTkcpO1xuICAgICAgICBwcmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNTbGlkZXJEaXJlY3Rpb24oZSkpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGRyYWdnaW5nID0gc2hvdWxkU3RhcnQoZSk7XG4gICAgICAgIHByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUG9pbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JVcChlKSB7XG4gICAgaWYgKHN0YXRlLmlzKERSQUdHSU5HKSkge1xuICAgICAgc3RhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlLnNldChJRExFKTtcbiAgICAgIGVtaXQoRVZFTlRfRFJBR0dFRCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgbW92ZShlKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcmV2ZW50KGUpO1xuICAgIH1cblxuICAgIHVuYmluZCh0YXJnZXQsIFBPSU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VSX01PVkVfRVZFTlRTLCBvblBvaW50ZXJNb3ZlKTtcbiAgICB1bmJpbmQodGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uUG9pbnRlclVwKTtcbiAgICBkcmFnZ2luZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIWRpc2FibGVkICYmIGNsaWNrUHJldmVudGVkKSB7XG4gICAgICBwcmV2ZW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlKGUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcHJldkJhc2VFdmVudCA9IGJhc2VFdmVudDtcbiAgICBiYXNlRXZlbnQgPSBlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiYXNlUG9zaXRpb24gPSBnZXRQb3NpdGlvbigpO1xuICB9XG5cbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG1vdmUoZSkge1xuICAgIHZhciB2ZWxvY2l0eSA9IGNvbXB1dGVWZWxvY2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHkoZSk7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gY29tcHV0ZURlc3RpbmF0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZWxvY2l0eSk7XG4gICAgdmFyIHJld2luZCA9IG9wdGlvbnMucmV3aW5kICYmIG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLnJld2luZEJ5RHJhZztcbiAgICByZWR1Y2UoZmFsc2UpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChpc0ZyZWUpIHtcbiAgICAgIENvbnRyb2xsZXIuc2Nyb2xsKGRlc3RpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgMCwgb3B0aW9ucy5zbmFwKTtcbiAgICB9IGVsc2UgaWYgKFNwbGlkZTIuaXMoRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBREUpKSB7XG4gICAgICBDb250cm9sbGVyLmdvKG9yaWVudChzaWduKHZlbG9jaXR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpIDwgMCA/IHJld2luZCA/ICI8IiA6ICItIiA6IHJld2luZCA/ICI+IiA6ICIrIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH0gZWxzZSBpZiAoU3BsaWRlMi5pcyhTTElERSkgJiYgZXhjZWVkZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmIHJld2luZCkge1xuICAgICAgQ29udHJvbGxlci5nbyhleGNlZWRlZExpbWl0KHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKSA/ICI+IiA6ICI8Iik7XG4gICAgfSBlbHNlIHtcbiAgICAgIENvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmdvKENvbnRyb2xsZXIudG9EZXN0KGRlc3RpbmF0aW9uKSwgdHJ1ZSk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIHJlZHVjZSh0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZFN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FydChlKSB7XG4gICAgdmFyIHRocmVzaG9sZHMgPSBvcHRpb25zLmRyYWdNaW5UaHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNob2xkO1xuICAgIHZhciBpc09iaiA9IGlzT2JqZWN0KHRocmVzaG9sZHMpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgbW91c2UgPSBpc09iaiAmJiB0aHJlc2hvbGRzLm1vdXNlIHx8IDA7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciB0b3VjaCA9IChpc09iaiA/IHRocmVzaG9sZHMudG91Y2ggOiArdGhyZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaG9sZHMpIHx8IDEwO1xuICAgIHJldHVybiBhYnMoZGlmZkNvb3JkKGUpKSA+IChpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUb3VjaEV2ZW50KGUpID8gdG91Y2ggOiBtb3VzZSk7XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gaXNTbGlkZXJEaXJlY3Rpb24oZSkge1xuICAgIHJldHVybiBhYnMoZGlmZkNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yZChlKSkgPiBhYnMoZGlmZkNvb3JkKGUsIHRydWUpKTtcbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjb21wdXRlVmVsb2NpdHkoZSkge1xuICAgIGlmIChTcGxpZGUyLmlzKEwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT09QKSB8fCAhZXhjZWVkZWQpIHtcbiAgICAgIHZhciB0aW1lID0gZGlmZlRpbWUoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgICBpZiAodGltZSAmJiB0aW1lIDwgTE9HX0lOVEVSVkFMKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICByZXR1cm4gZGlmZkNvb3JkKGUpIC8gdGltZTtcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZURlc3RpbmF0aW9uKHZlbG9jaXR5KSB7XG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICsgc2lnbih2ZWxvY2l0eSkgKiBtaW4oYWJzKHZlbG9jaXR5KSAqIChvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5mbGlja1Bvd2VyIHx8IDYwMCksIGlzRnJlZSA/IEluZmluaXR5IDogQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLkxheW91dC5saXN0U2l6ZSgpICogKG9wdGlvbnMuZmxpY2tNYXhQYWdlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgMSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlmZkNvb3JkKGUsIG9ydGhvZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmFsKSB7XG4gICAgcmV0dXJuIGNvb3JkT2YoZSwgb3J0aG9nb25hbCkgLSBjb29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RPZihnZXRCYXNlRXZlbnQoZSksIG9ydGhvZ29uYWwpO1xuICB9XG5cbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGRpZmZUaW1lKGUpIHtcbiAgICByZXR1cm4gdGltZU9mKGUpIC0gdGltZU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZihnZXRCYXNlRXZlbnQoZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmFzZUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudChlKSB7XG4gICAgcmV0dXJuIGJhc2VFdmVudCA9PT0gZSAmJiBwcmV2QmFzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudCB8fCBiYXNlRXZlbnQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb29yZE9mKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBvcnRob2dvbmFsKSB7XG4gICAgcmV0dXJuIChpc1RvdWNoRXZlbnQoZSkgPyBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jaGFuZ2VkVG91Y2hlc1swXSA6IGUpWyJwYWdlIiArIHJlc29sdmUob3J0aG9nbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYWwgPyAiWSIgOiAiWCIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN0cmFpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZGlmZikge1xuICAgIHJldHVybiBkaWZmIC8gKGV4Y2VlZGVkICYmIFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKFNMSURFKSA/IEZSSUNUSU9OIDogMSk7XG4gIH1cblxuICBmdW5jdGlvbiBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NEcmFnZ2FibGUodGFyZ2V0Mikge1xuICAgIHZhciBub0RyYWcgPSBvcHRpb25zLm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb0RyYWc7XG4gICAgcmV0dXJuICFtYXRjaGVzKHRhcmdldDIsICIuIiArIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQQUdJTkFUSU9OX1BBR0UgKyAiLCAuIiArIENMQVNTX0FSUk9XKSAmJiAoIW5vRHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWcgfHwgIW1hdGNoZXModGFyZ2V0Miwgbm9EcmFnKSk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gaXNUb3VjaEV2ZW50KGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIFRvdWNoRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50ICE9PSAidW5kZWZpbmVkIiAmJiBlIGluc3RhbmNlb2YgVG91Y2hFdmVudDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cblxuICBmdW5jdGlvbiBpc0RyYWdnaW5nKCkge1xuICAgIHJldHVybiBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZ2dpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNhYmxlKHZhbHVlKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGRpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDogbW91bnQsXG4gICAgZGlzYWJsZTogZGlzYWJsZSxcbiAgICBpc0RyYWdnaW5nOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNEcmFnZ2luZ1xuICB9O1xufVxuXG52YXIgTk9STUFMSVpBVElPTl9NQVAgPSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBTcGFjZWJhcjogIiAiLFxuICBSaWdodDogQVJST1dfUklHSFQsXG4gIExlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z0OiBBUlJPV19MRUZULFxuICBVcDogQVJST1dfVVAsXG4gIERvd246IEFSUk9XX0RPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dOXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVLZXkoa2V5KSB7XG4gIGtleSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc1N0cmluZyhrZXkpID8ga2V5IDoga2V5LmtleTtcbiAgcmV0dXJuIE5PUk1BTElaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FUSU9OX01BUFtrZXldIHx8IGtleTtcbn1cblxudmFyIEtFWUJPQVJEX0VWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJrZXlkb3duIjtcblxuZnVuY3Rpb24gS2V5Ym9hcmQoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UxMCA9IEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwLm9uLFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTEwLmJpbmQsXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdW5iaW5kID0gX0V2ZW50SW50ZXJmYWNlMTAudW5iaW5kO1xuXG4gIHZhciByb290ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IFNwbGlkZTIucm9vdDtcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uLnJlc29sdmU7XG4gIHZhciB0YXJnZXQ7XG4gIHZhciBkaXNhYmxlZDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaW5pdCgpO1xuICAgIG9uKEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9VUERBVEVELCBkZXN0cm95KTtcbiAgICBvbihFVkVOVF9VUERBVEVELCBpbmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCk7XG4gICAgb24oRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBpbml0KCkge1xuICAgIHZhciBrZXlib2FyZCA9IG9wdGlvbnMua2V5Ym9hcmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgaWYgKGtleWJvYXJkKSB7XG4gICAgICB0YXJnZXQgPSBrZXlib2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmQgPT09ICJnbG9iYWwiID8gd2luZG93IDogcm9vdDtcbiAgICAgIGJpbmQodGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldCwgS0VZQk9BUkRfRVZFTlQsIG9uS2V5ZG93bik7XG4gICAgfVxuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdW5iaW5kKHRhcmdldCwgS0VZQk9BUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEX0VWRU5UKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FibGUodmFsdWUpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW92ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIF9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIGRpc2FibGVkID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWU7XG4gICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgZGlzYWJsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX2Rpc2FibGVkO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25LZXlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293bihlKSB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgdmFyIGtleSA9IG5vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JtYWxpemVLZXkoZSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRlQpKSB7XG4gICAgICAgIFNwbGlkZTIuZ28oIjwiKTtcbiAgICAgIH0gZWxzZSBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19SSUdIVCkpIHtcbiAgICAgICAgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuZ28oIj4iKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBkaXNhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogZGlzYWJsZVxuICB9O1xufVxuXG52YXIgU1JDX0RBVEFfQVRUUklCVVRFID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEFfQVRUUklCVVRFICsgIi1sYXp5IjtcbnZhciBTUkNTRVRfREFUQV9BVFRSSUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVRFID0gU1JDX0RBVEFfQVRUUklCVVRFICsgIi1zcmNzZXQiO1xudmFyIElNQUdFXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTRUxFQ1RPUiA9ICJbIiArIFNSQ19EQVRBX0FUVFJJQlVURSArICJdLCBbIiArIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkNTRVRfREFUQV9BVFRSSUJVVEUgKyAiXSI7XG5cbmZ1bmN0aW9uIExhenlMb2FkKFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZTExID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UxMS5vbixcbiAgICAgIG9mZiA9IF9FdmVudEludGVyZmFjZTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMS5vZmYsXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMTEuYmluZCxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMTEuZW1pdDtcblxuICB2YXIgaXNTZXF1ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlhbCA9IG9wdGlvbnMubGF6eUxvYWQgPT09ICJzZXF1ZW50aWFsIjtcbiAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudHMgPSBbRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEVEXTtcbiAgdmFyIGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmxhenlMb2FkKSB7XG4gICAgICBpbml0KCk7XG4gICAgICBvbihFVkVOVF9SJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VGUkVTSCwgaW5pdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgZW1wdHkoZW50cmllcyk7XG4gICAgcmVnaXN0ZXIoKTtcblxuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaXNTZXF1ZW50aWFsKSB7XG4gICAgICBsb2FkTmV4dCgpO1xuICAgIH0gZWxzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgb2ZmKGV2ZW50cyk7XG4gICAgICBvbihldmVudHMsIGNoZWNrKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBjaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcigpIHtcbiAgICBDb21wb25lbnRzMi5TbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKFNsaWRlKSB7XG4gICAgICBxdWVyeUFsbChTbGlkZS5zbGlkZSwgSU1BR0VfU0VMRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDVE9SKS5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgdmFyIHNyYyA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHNyY3NldCA9IGdldEF0dHJpYnV0ZShpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JVVEUpO1xuXG4gICAgICAgIGlmIChzcmMgIT09IGltZy5zcmMgfHwgc3Jjc2V0ICE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gaW1nLnNyY3NldCkge1xuICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5jbGFzc2VzLnNwaW5uZXI7XG4gICAgICAgICAgdmFyIHBhcmVudCA9IGltZy5wYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50RWxlbWVudDtcbiAgICAgICAgICB2YXIgc3Bpbm5lciA9IGNoaWxkKHBhcmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsICIuIiArIGNsYXNzTmFtZSkgfHwgY3JlYXRlKCJzcGFuIiwgY2xhc3NOYW1lLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyZW50KTtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2ltZywgU2xpZGUsIHNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lubmVyXSk7XG4gICAgICAgICAgaW1nLnNyYyB8fCBkaXNwbGF5KGltZywgIm5vbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGNoZWNrKCkge1xuICAgIGVudHJpZXMgPSBlbnRyaWVzLmZpbHRlcihmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKGRhdGEpIHtcbiAgICAgIHZhciBkaXN0YW5jZSA9IG9wdGlvbnMucGVyUGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKiAoKG9wdGlvbnMucHJlbG9hZFBhZ2VzIHx8IDEpICsgMSkgLSAxO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBkYXRhWzFdLmlzV2l0aGluKFNwbGlkZTIuaW5kZXgsIGRpc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgPyBsb2FkKGRhdGEpIDogdHJ1ZTtcbiAgICB9KTtcbiAgICBlbnRyaWVzLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ggfHwgb2ZmKGV2ZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2FkKGRhdGEpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIGltZyA9IGRhdGFbMF07XG4gICAgYWRkQ2xhc3MoZGF0YVsxXS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUsIENMQVNTX0xPQURJTkcpO1xuICAgIGJpbmQoaW1nLCAibG9hZCBlcnJvciInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhcHBseShvbkxvYWQsIGRhdGEpKTtcbiAgICBzZXRBdHRyaWJ1dGUoaW1nLCAicycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYyIsIGdldEF0dHJpYnV0ZShpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSkpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXRBdHRyaWJ1dGUoaW1nLCAic3Jjc2V0IiwgZ2V0QXR0cmlidXRlKGltZywgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSQ1NFVF9EQVRBX0FUVFJJQlVURSkpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZShpbWcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZShpbWcsIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkNTRVRfREFUQV9BVFRSSUJVVEUpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Mb2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZChkYXRhLCBlKSB7XG4gICAgdmFyIGltZyA9IGRhdGFbMF0sXG4gICAgICAgIFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9IGRhdGFbMV07XG4gICAgcmVtb3ZlQ2xhc3MoU2xpZGUuc2xpZGUsIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMT0FESU5HKTtcblxuICAgIGlmIChlLnR5cGUgIT09ICJlcnJvciIpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZW1vdmUoZGF0YVsyXSk7XG4gICAgICBkaXNwbGF5KGltZywgIiIpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVtaXQoRVZFTlRfTEFaWUxPQURfTE9BREVELCBpbWcsIFNsaWRlKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0KEVWRU5UX1JFU0laRSk7XG4gICAgfVxuXG4gICAgaXNTZXF1ZW50aWFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBsb2FkTmV4dCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZE5leHQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGVudHJpZXMubGVuZ3RoICYmIGxvYWQoZW50cmllcy5zaGlmdCgpKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXBwbHkoZW1wdHksIGVudHJpZXMpLFxuICAgIGNoZWNrOiBjaGVja1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gUGFnaW5hdGlvbihTcGxpZGUyLCBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIsIG9wdGlvbnMpIHtcbiAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIpO1xuICB2YXIgb24gPSBldmVudC5vbixcbiAgICAgIGVtaXQgPSBldmVudC5lbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCxcbiAgICAgIGJpbmQgPSBldmVudC5iaW5kO1xuICB2YXIgU2xpZGVzID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLlNsaWRlcyxcbiAgICAgIEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLFxuICAgICAgQ29udHJvbGxlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgaGFzRm9jdXMgPSBDb250cm9sbGVyLmhhc0ZvY3VzLFxuICAgICAgZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4ID0gQ29udHJvbGxlci5nZXRJbmRleCxcbiAgICAgIGdvID0gQ29udHJvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIuZ287XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbHZlO1xuICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5wYWdpbmF0aW9uO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsaXN0O1xuICB2YXIgcGFnaW5hdGlvbkNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGRlc3Ryb3koKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX0VORF9JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05ERVhfQ0hBTkdFRF0sIG1vdW50KTtcbiAgICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnBhZ2luYXRpb247XG4gICAgcGxhY2Vob2xkZXIgJiYgZGlzcGxheShwbGFjZWhvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXIsIGVuYWJsZWQgPyAiIiA6ICJub25lIik7XG5cbiAgICBpZiAoZW5hYmxlZCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9uKFtFVkVOVF9NT1ZFLCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRF0sIHVwZGF0ZSk7XG4gICAgICBjcmVhdGVQYWdpbmF0aW9uKCk7XG4gICAgICB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BkYXRlKCk7XG4gICAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCwge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZ2V0QXQoU3BsaWRlMi5pbmRleCkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBkZXN0cm95KCkge1xuICAgIGlmIChsaXN0KSB7XG4gICAgICByZW1vdmUocGxhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlaG9sZGVyID8gc2xpY2UobGlzdC5jaGlsZHJlbikgOiBsaXN0KTtcbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVDbGFzcyhsaXN0LCBwYWdpbmF0aW9uQ2xhc3Nlcyk7XG4gICAgICBlbXB0eSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRlbXMpO1xuICAgICAgbGlzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgZXZlbnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3koKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhZ2luYXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHZhciBsZW5ndGggPSBTcGxpZGUyLmxlbmd0aDtcbiAgICB2YXIgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMgPSBvcHRpb25zLmNsYXNzZXMsXG4gICAgICAgIGkxOG4gPSBvcHRpb25zLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMThuLFxuICAgICAgICBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF4ID0gaGFzRm9jdXMoKSA/IENvbnRyb2xsZXIuZ2V0RW5kKCkgKyAxIDogY2VpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wobGVuZ3RoIC8gcGVyUGFnZSk7XG4gICAgbGlzdCA9IHBsYWNlaG9sZGVyIHx8IGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGUoInVsIiwgY2xhc3Nlcy5wYWdpbmF0aW9uLCBFbGVtZW50cy50cmFjay5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50RWxlbWVudCk7XG4gICAgYWRkQ2xhc3MobGlzdCwgcGFnaW5hdGlvbkNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzID0gQ0xBU1NfUEFHSU5BVElPTiArICItLSIgKyBnZXREaXJlY3Rpb24oKSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHNldEF0dHJpYnV0ZShsaXN0LCBST0xFLCAidGFibGlzdCIpO1xuICAgIHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RBdHRyaWJ1dGUobGlzdCwgQVJJQV9MQUJFTCwgaTE4bi5zZWxlY3QpO1xuICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUobGlzdCwgQVJJQV9PUklFTlRBVElPTiwgZ2V0RGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuXG4gICAgZm9yICh2YXIgaSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAwOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgIHZhciBsaSA9IGNyZWF0ZSgibGkiLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCwgbGlzdCk7XG4gICAgICB2YXIgYnV0dG9uID0gY3JlYXRlKCJidXR0b24iLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBjbGFzczogY2xhc3Nlcy5wYWdlLFxuICAgICAgICB0eXBlOiAiYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dHRvbiJcbiAgICAgIH0sIGxpKTtcbiAgICAgIHZhciBjb250cm9scyA9IFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZ2V0SW4oaSkubWFwKGZ1bmN0aW9uIChTbGlkZSkge1xuICAgICAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlLnNsaWRlLmlkO1xuICAgICAgfSk7XG4gICAgICB2YXIgdGV4dCA9ICFoYXNGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMoKSAmJiBwZXJQYWdlID4gMSA/IGkxOG4ucGFnZVggOiBpMThuLnNsaWRlWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBiaW5kKGJ1dHRvbiwgImNsaWNrIiwgYXBwbHkob25DbGljaywgaSkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbktleWJvYXJkKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBiaW5kKGJ1dHRvbiwgImtleWRvd24iLCBhcHBseShvbktleWRvd24sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpKSk7XG4gICAgICB9XG5cbiAgICAgIHNldEF0dHJpYnV0ZShsaSwgUk9MRSwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcmVzZW50YXRpb24iKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFJPTEUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAidGFiIik7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX0NPTlRST0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUywgY29udHJvbHMuam9pbigiICIpKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBBUklBX0xBQkVMLCBmb3JtYXQodGV4dCwgaSArIDEpKTtcbiAgICAgIHNldEF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUoYnV0dG9uLCBUQUJfSU5ERVgsIC0xKTtcbiAgICAgIGl0ZW1zLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHtcbiAgICAgICAgbGk6IGxpLFxuICAgICAgICBidXR0b246IGJ1dHRvbixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHBhZ2U6IGlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvbkNsaWNrKHBhZ2UpIHtcbiAgICBnbygiPiIgKyBwYWdlLCB0cnVlKTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiBvbktleWRvd24ocGFnZSwgZSkge1xuICAgIHZhciBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZ3RoID0gaXRlbXMubGVuZ3RoO1xuICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXkoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgIHZhciBkaXIgPSBnZXREaXJlY3Rpb24oKTtcbiAgICB2YXIgbmV4dFBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlID0gLTE7XG5cbiAgICBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX1JJR0hULCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fsc2UsIGRpcikpIHtcbiAgICAgIG5leHRQYWdlID0gKytwYWdlICUgbGVuZ3RoO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGVsc2UgaWYgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19MRUZULCBmYWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGRpcikpIHtcbiAgICAgIG5leHRQYWdlID0gKC0tcGFnZSArIGxlbmd0aCkgJSBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZ3RoO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAiSG9tZSIpIHtcbiAgICAgIG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3h0UGFnZSA9IDA7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICJFbmQiKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgbmV4dFBhZ2UgPSBsZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHZhciBpdGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGl0ZW1zW25leHRQYWdlXTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMoaXRlbS5idXR0b24pO1xuICAgICAgZ28oIj4iICsgbmV4dFBhZ2UpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldERpcmVjdGlvbigpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5wYWdpbmF0aW9uRGlyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbiB8fCBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRBdChpbmRleCkge1xuICAgIHJldHVybiBpdGVtc1tDb250cm9sbGVyLnRvUGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UoaW5kZXgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIHByZXYgPSBnZXRBdChnZXRJbmRleCh0cnVlKSk7XG4gICAgdmFyIGN1cnIgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0QXQoZ2V0SW5kZXgoKSk7XG5cbiAgICBpZiAocHJldikge1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBidXR0b24gPSBwcmV2LmJ1dHRvbjtcbiAgICAgIHJlbW92ZUNsYXNzKGJ1dHRvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX0FDVElWRSk7XG4gICAgICByZW1vdmVBdHRyaWJ1dGUoYnV0dG9uLCBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQV9TRUxFQ1RFRCk7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBUQUJfSU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREVYLCAtMSk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnIpIHtcbiAgICAgIHZhciBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dHRvbiA9IGN1cnIuYnV0dG9uO1xuICAgICAgYWRkQ2xhc3MoX2J1dHRvbiwgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX0FDVElWRSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgQVJJQV9TRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMRUNURUQsIHRydWUpO1xuICAgICAgc2V0QXR0cmlidXRlKF9idXR0b24sIFRBQl9JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05ERVgsICIiKTtcbiAgICB9XG5cbiAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VQREFURUQsIHtcbiAgICAgIGxpc3Q6IGxpc3QsXG4gICAgICBpdGVtczogaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1zXG4gICAgfSwgcHJldiwgY3Vycik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVtczogaXRlbXMsXG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95LFxuICAgIGdldEF0OiBnZXRBdCxcbiAgICB1cGRhdGU6IHVwZGF0ZVxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcbn1cblxudmFyIFRSSUdHRVJfS0VZUyA9IFsiICIsICJFbnRlciJdO1xuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gU3luYyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGlzTmF2aWdhdGlvbiA9IG9wdGlvbnMuaXNOYXZpZ2F0aW9uLFxuICAgICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlRm9jdXMgPSBvcHRpb25zLnNsaWRlRm9jdXM7XG4gIHZhciBldmVudHMgPSBbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ107XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgU3BsaWRlMi5zcGxpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIGlmICghdGFyZ2V0LmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1BhcmVudCkge1xuICAgICAgICBzeW5jKFNwbGlkZTIsIHRhcmdldC5zcGxpZGUpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgc3luYyh0YXJnZXQuc3BsaWRlLCBTcGxpZGUyKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uKSB7XG4gICAgICBuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5kZXN0cm95KCk7XG4gICAgfSk7XG4gICAgZW1wdHkoZXZlbnRzKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiByZW1vdW50KCkge1xuICAgIGRlc3Ryb3koKTtcbiAgICBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN5bmMoc3BsaWRlLCB0YXJnZXQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2Uoc3BsaWRlKTtcbiAgICBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnQub24oRVZFTlRfTU9WRSwgZnVuY3Rpb24gKGluZGV4LCBwcmV2LCBkZXN0KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgdGFyZ2V0LmdvKHRhcmdldC5pcyhMT09QKSA/IGRlc3QgOiBpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gpO1xuICAgIH0pO1xuICAgIGV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBuYXZpZ2F0ZSgpIHtcbiAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UoU3BsaWRlMik7XG4gICAgdmFyIG9uID0gZXZlbnQub247XG4gICAgb24oRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUX0NMSUNLLCBvbkNsaWNrKTtcbiAgICBvbihFVkVOVF9TTElERV9LRVlET1dOLCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25LZXlkb3duKTtcbiAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRF0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCB1cGRhdGUpO1xuICAgIGV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgICBldmVudC5lbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQsIFNwbGlkZTIuc3BsaWRlcyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHNldEF0dHJpYnV0ZShDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50czIuRWxlbWVudHMubGlzdCwgQVJJQV9PUklFTlRBVElPTiwgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9uQ2xpY2soU2xpZGUpIHtcbiAgICBTcGxpZGUyLmdvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhTbGlkZS5pbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbktleWRvd24oU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLCBlKSB7XG4gICAgaWYgKGluY2x1ZGVzKFRSSUdHRVJfS0VZUywgbm9ybWFsaXonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUtleShlKSkpIHtcbiAgICAgIG9uQ2xpY2soU2xpZGUpO1xuICAgICAgcHJldmVudCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXR1cDogYXBwbHkoQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyLk1lZGlhLnNldCwge1xuICAgICAgc2xpZGVGb2N1czogaXNVbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmVkKHNsaWRlRm9jdXMpID8gaXNOYXZpZ2F0aW9uIDogc2xpZGVGb2N1c1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9LCB0cnVlKSxcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ksXG4gICAgcmVtb3VudDogcmVtb3VudFxuICB9O1xufVxuXG5mdW5jdGlvbiBXaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZWwoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UxMiA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgYmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQgPSBfRXZlbnRJbnRlcmZhY2UxMi5iaW5kO1xuXG4gIHZhciBsYXN0VGltZSA9IDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmIChvcHRpb25zLndoZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCkge1xuICAgICAgYmluZChDb21wb25lbnRzMi5FbGVtZW50cy50cmFjaywgIndoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbCIsIG9uV2hlZWwsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gb25XaGVlbChlKSB7XG4gICAgaWYgKGUuY2FuY2VsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidibGUpIHtcbiAgICAgIHZhciBkZWx0YVkgPSBlLmRlbHRhWTtcbiAgICAgIHZhciBiYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidja3dhcmRzID0gZGVsdGFZIDwgMDtcbiAgICAgIHZhciB0aW1lU3RhbXAgPSB0aW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09mKGUpO1xuXG4gICAgICB2YXIgX21pbiA9IG9wdGlvbnMud2hlZWxNaW5UaHJlc2hvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xkIHx8IDA7XG5cbiAgICAgIHZhciBzbGVlcCA9IG9wdGlvbnMud2hlZWxTbGVlcCB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgMDtcblxuICAgICAgaWYgKGFicyhkZWx0YVkpID4gX21pbiAmJiB0aW1lU3RhbXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gbGFzdFRpbWUgPiBzbGVlcCkge1xuICAgICAgICBTcGxpZGUyLmdvKGJhY2t3YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgPyAiPCIgOiAiPiIpO1xuICAgICAgICBsYXN0VGltZSA9IHRpbWVTdGFtcDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB9XG5cbiAgICAgIHNob3VsZFByZXZlbnQoYmFja3dhcmRzKSAmJiBwcmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRQcmV2ZW50KGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMpIHtcbiAgICByZXR1cm4gIW9wdGlvbnMucmVsZWFzZVdoZWVsIHx8IFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyLnN0YXRlLmlzKE1PVklORykgfHwgQ29tcG9uZW50czIuQ29udHJvbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuZ2V0QWRqYWNlbnQoYmFja3dhcmRzKSAhPT0gLTE7XG4gIH1cblxuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHtcbiAgICBtb3VudDogbW91bnRcbiAgfTtcbn1cblxudmFyIFNSX1JFTU9WQUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0RFTEFZID0gOTA7XG5cbmZ1bmN0aW9uIExpdmUoU3BsaWRlMiwgQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UxMyA9IEV2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlMTMub247JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIHZhciB0cmFjayA9IENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGVuYWJsZWQgPSBvcHRpb25zLmxpdmUgJiYgIW9wdGlvbnMuaXNOYXZpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbjtcbiAgdmFyIHNyID0gY3JlYXRlKCJzcGFuIiwgQ0xBU1NfU1IpO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKFNSX1JFTU9WQUxfREVMQVksIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBseSh0b2dnbGUsIGZhbHNlKSk7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBkaXNhYmxlKCFDb21wb25lbnRzMi5BdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3BsYXkuaXNQYXVzZWQoKSk7XG4gICAgICBzZXRBdHRyaWJ1dGUodHJhY2ssIEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX0FUT01JQywgdHJ1ZSk7XG4gICAgICBzci50ZXh0Q29udGVudCA9ICJcXHUyMDI2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gICAgICBvbihFVkVOVF9BVVRPUExBWV9QTEFZLCBhcHBseShkaXNhYmxlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ1ZSkpO1xuICAgICAgb24oRVZFTlRfQVVUT1BMQVlfUEFVU0UsIGFwcGx5KGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlLCBmYWxzZSkpO1xuICAgICAgb24oW0VWRU5UX01PVkVELCBFVkVOVF9TQ1JPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xMRURdLCBhcHBseSh0b2dnbGUsIHRydWUpKTtcbiAgICB9XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdG9nZ2xlKGFjdGl2ZSkge1xuICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSSUFfQlVTWSwgYWN0aXZlKTtcblxuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhcHBlbmQodHJhY2ssIHNyKTtcbiAgICAgIGludGVydmFsLnN0YXJ0KCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gZWxzZSB7XG4gICAgICByZW1vdmUoc3IpO1xuICAgICAgaW50ZXJ2YWwuY2FuY2VsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZUF0dHJpYnV0ZSh0cmFjaywgW0FSSUFfTElWRSwgQVJJQV9BVE9NSUMsIEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX0JVU1ldKTtcbiAgICByZW1vdmUoc3IpO1xuICB9XG5cbiAgZnVuY3Rpb24gZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc2FibGUoZGlzYWJsZWQpIHtcbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgc2V0QScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZSh0cmFjaywgQVJJQV9MSVZFLCBkaXNhYmxlZCA/ICJvZmYiIDogInAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xpdGUiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsXG4gICAgZGlzYWJsZTogZGlzYWJsZSxcbiAgICBkZXN0cm95OiBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JveVxuICB9O1xufVxuXG52YXIgQ29tcG9uZW50Q29uc3RydWN0b3JzID0gLyojXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBNZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaWE6IE1lZGlhLFxuICBEaXJlY3Rpb246IERpcmVjdGlvbixcbiAgRWxlbWVudHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbGVtZW50cyxcbiAgU2xpZGVzOiBTbGlkZXMsXG4gIExheW91dDogTGF5b3V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgQ2xvbmVzOiBDbG9uZXMsXG4gIE1vdmU6IE1vdmUsXG4gIENvbnRyb2xsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyOiBDb250cm9sbGVyLFxuICBBcnJvd3M6IEFycm93cyxcbiAgQXV0b3BsYXk6IEF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcGxheSxcbiAgQ292ZXI6IENvdmVyLFxuICBTY3JvbGw6IFNjcm9sbCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RyYWc6IERyYWcsXG4gIEtleWJvYXJkOiBLZXlib2FyZCxcbiAgTGF6eUxvYWQ6IExhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3p5TG9hZCxcbiAgUGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgU3luYzogU3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmMsXG4gIFdoZWVsOiBXaGVlbCxcbiAgTGl2ZTogTGl2ZVxufSk7XG52YXIgSTE4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ04gPSB7XG4gIHByZXY6ICJQcmV2aW91cyBzbGlkZSIsXG4gIG5leHQ6ICJOZXh0IHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSIsXG4gIGZpcnN0OiAiR28gdG8gZmlyc3Qgc2xpZGUiLFxuICBsYXN0OiAiR28gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGxhc3Qgc2xpZGUiLFxuICBzbGlkZVg6ICJHbyB0byBzbGlkZSAlcyIsXG4gIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlWDogIkdvIHRvIHBhZ2UgJXMiLFxuICBwbGF5OiAiU3RhcnQgYXV0b3BsYXkiLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGF1c2U6ICJQYXVzZSBhdXRvcGxheSIsXG4gIGNhcm91c2VsOiAiY2Fyb3VzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIixcbiAgc2xpZGU6ICJzbGlkZSIsXG4gIHNlbGVjdDogIlNlbGVjdCBhIHNsaWRlIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbyBzaG93IixcbiAgc2xpZGVMYWJlbDogIiVzIG9mICVzIlxufTtcbnZhciBERUYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVVMVFMgPSB7XG4gIHR5cGU6ICJzbGlkZSIsXG4gIHJvbGU6ICJyZWdpb24iLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgc3BlZWQ6IDQwMCxcbiAgcGVyUGFnZTogMSxcbiAgY2xvbmVTdGF0dXM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlLFxuICBhcnJvd3M6IHRydWUsXG4gIHBhZ2luYXRpb246IHRydWUsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdpbmF0aW9uS2V5Ym9hcmQ6IHRydWUsXG4gIGludGVydmFsOiA1ZTMsXG4gIHBhdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZU9uSG92ZXI6IHRydWUsXG4gIHBhdXNlT25Gb2N1czogdHJ1ZSxcbiAgcmVzZXRQcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZ3Jlc3M6IHRydWUsXG4gIGVhc2luZzogImN1YmljLWJlemllcigwLjI1LCAxLCAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy41LCAxKSIsXG4gIGRyYWc6IHRydWUsXG4gIGRpcmVjdGlvbjogImx0ciIsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmltU3BhY2U6IHRydWUsXG4gIGZvY3VzYWJsZU5vZGVzOiAiYSwgYnV0dG9uLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGV4dGFyZWEsIGlucHV0LCBzZWxlY3QsIGlmcmFtZSIsXG4gIGxpdmU6IHRydWUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBjbGFzc2VzOiBDTEFTU0VTLFxuICBpMThuOiBJMThOLFxuICByZWR1Y2VkTW90aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjoge1xuICAgIHNwZWVkOiAwLFxuICAgIHJld2luZFNwZWVkOiAwLFxuICAgIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXRvcGxheTogInBhdXNlIlxuICB9XG59O1xuXG5mdW5jdGlvbiBGYWRlKFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgU2xpZGVzID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLlNsaWRlcztcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRJbnRlcmZhY2UoU3BsaWRlMikub24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZSRVNIXSwgaW5pdCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUpIHtcbiAgICAgIFNsaWRlLnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSgidHJhbnNmb3JtIiwgInRyYW5zbGF0ZVgoLSIgKyAxMDAgKiBTbGlkZS5pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggKyAiJSkiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0KGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCwgZG9uZSkge1xuICAgIFNsaWRlcy5zdHlsZSgidHJhbnNpdGlvbiIsICJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2l0eSAiICsgb3B0aW9ucy5zcGVlZCArICJtcyAiICsgb3B0aW9ucy5lYXNpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICBuZXh0VGljayhkb25lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50OiBtb3VudCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgY2FuY2VsOiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29vcFxuICB9O1xufVxuXG5mdW5jdGlvbiBTbGlkZShTcGxpZGUyLCBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czIsIG9wdGlvbnMpIHtcbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Njcm9sbCA9IENvbXBvbmVudHMyLlNjcm9sbDtcbiAgdmFyIGxpc3QgPSBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIuRWxlbWVudHMubGlzdDtcbiAgdmFyIHRyYW5zaXRpb24gPSBhcHBseShzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUsIGxpc3QsICJ0cmFuc2l0aW9uIik7XG4gIHZhciBlbmRDYWxsYmFjazsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgRXZlbnRJbnRlcmZhY2UoU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIpLmJpbmQobGlzdCwgInRyYW5zaXRpb25lbmQiLCBmdW5jdGlvbiAoZSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gbGlzdCAmJiBlbmRDYWxsYmFjaykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIGVuZENhbGxiYWNrKCk7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoaW5kZXgsIGRvbmUpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gTW92ZS50b1Bvc2l0aW9uKGluZGV4LCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZSk7XG4gICAgdmFyIHBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbigpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgc3BlZWQgPSBnZXRTcGVlZChpbmRleCk7XG5cbiAgICBpZiAoYWJzKGRlc3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbiAtIHBvc2l0aW9uKSA+PSAxICYmIHNwZWVkID49IDEpIHtcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAob3B0aW9ucy51c2VTY3JvbGwpIHtcbiAgICAgICAgU2Nyb2xsLnNjcm9sbChkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGluYXRpb24sIHNwZWVkLCBmYWxzZSwgZG9uZSk7XG4gICAgICB9IGVsc2Uge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgdHJhbnNpdGlvbigidHJhbnNmb3JtICIgKyBzcGVlZCArICJtcyAiICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuZWFzaW5nKTtcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCB0cnVlKTtcbiAgICAgICAgZW5kQ2FsbGJhY2sgPSBkb25lO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9IGVsc2Uge1xuICAgICAgTW92ZS5qdW1wKGluZGV4KTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb25lKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmFuc2l0aW9uKCIiKTtcbiAgICBTY3JvbGwuY2FuY2VsKCk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gZ2V0U3BlZWQoaW5kZXgpIHtcbiAgICB2YXIgcmV3aW5kU3BlZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gb3B0aW9ucy5yZXdpbmRTcGVlZDtcblxuICAgIGlmIChTcGxpZGUyLmlzKFNMSURFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgJiYgcmV3aW5kU3BlZWQpIHtcbiAgICAgIHZhciBwcmV2ID0gQ29udHJvbGxlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0SW5kZXgodHJ1ZSk7XG4gICAgICB2YXIgZW5kID0gQ29udHJvbGxlci5nZXRFbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKCk7XG5cbiAgICAgIGlmIChwcmV2ID09PSAwICYmIGluZGV4ID49IGVuZCB8fCBwcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldiA+PSBlbmQgJiYgaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJld2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RTcGVlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnQ6IHN0YXJ0LFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59XG5cbnZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1NwbGlkZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfU3BsaWRlKHRhcmdldCwgb3B0aW9ucykge1xuICAgIHRoaXMuZXZlbnQgPSBFdmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UoKTtcbiAgICB0aGlzLkNvbXBvbmVudHMgPSB7fTtcbiAgICB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zdGF0ZSA9IFN0YXRlKENSRUFURUQpO1xuICAgIHRoaXMuc3BsaWRlcyA9IFtdO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB0aGlzLl9vID0ge307XG4gICAgdGhpcy5fRSA9IHt9O1xuICAgIHZhciByb290JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGlzU3RyaW5nKHRhcmdldCkgPyBxdWVyeShkb2N1bWVudCwgdGFyZ2V0KSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQ7XG4gICAgYXNzZXJ0KHJvb3QsIHJvb3QgKyAiIGlzIGludmFsaWQuIik7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgb3B0aW9ucyA9IG1lcmdlKHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBsYWJlbDogZ2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUwpIHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIixcbiAgICAgIGxhYmVsbGVkYnk6IGdldEF0dHJpYnV0ZShyb290LCBBUklBX0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JFTExFREJZKSB8fCAiIlxuICAgIH0sIERFRkFVTFRTLCBfU3BsaWRlLmRlZmF1bHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICB0cnkge1xuICAgICAgbWVyZ2Uob3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMsIEpTT04ucGFyc2UoZ2V0QXR0cmlidXRlKHJvb3QsIERBVEFfQVRUUklCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VURSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ252YWxpZCBKU09OIik7XG4gICAgfVxuXG4gICAgdGhpcy5fbyA9IE9iamVjdC5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYXRlKG1lcmdlKHt9LCBvcHRpb25zKSk7XG4gIH1cblxuICB2YXIgX3Byb3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF9TcGxpZGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5tb3VudCA9IGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtb3VudChFeHRlbnNpb25zLCBUcmFuc2l0aW9uKSB7XG4gICAgdmFyIF90aGlzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXM7XG5cbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIgPSB0aGlzLkNvbXBvbmVudHM7XG4gICAgYXNzZXJ0KHN0YXRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyhbQ1JFQVRFRCwgREVTVFJPWUVEXSksICJBbHJlYWR5IG1vdW50ZWQhIik7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0YXRlLnNldChDUkVBVEVEKTtcbiAgICB0aGlzLl9DID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHRoaXMuX1QgPSBUcmFuc2l0aW9uIHx8IHRoaXMuX1QgfHwgKHRoaXMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKEZBREUpID8gRmFkZSA6IFNsaWRlKTtcbiAgICB0aGlzLl9FID0gRXh0ZW5zaW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgfHwgdGhpcy5fRTtcbiAgICB2YXIgQ29uc3RydWN0b3JzID0gYXNzaWduKHt9LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50Q29uc3RydWN0b3JzLCB0aGlzLl9FLCB7XG4gICAgICBUcmFuc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbjogdGhpcy5fVFxuICAgIH0pO1xuICAgIGZvck93bihDb25zdHJ1Y3RvcnMsIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiAoQ29tcG9uZW50LCBrZXkpIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50KF90aGlzLCBDb21wb25lbnRzMiwgX3RoaXMuX28pO1xuICAgICAgQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyW2tleV0gPSBjb21wb25lbnQ7XG4gICAgICBjb21wb25lbnQuc2V0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwICYmIGNvbXBvbmVudC5zZXR1cCgpO1xuICAgIH0pO1xuICAgIGZvck93bihDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIsIGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgIGNvbXBvbmVudC5tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgJiYgY29tcG9uZW50Lm1vdW50KCk7XG4gICAgfSk7XG4gICAgdGhpcy5lbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9NT1VOVEVEKTtcbiAgICBhZGRDbGFzcyh0aGlzLnJvb3QsIENMQVNTX0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTklUSUFMSVpFRCk7XG4gICAgc3RhdGUuc2V0KElETEUpO1xuICAgIHRoaXMuZW1pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfUkVBRFkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28uc3luYyA9IGZ1bmN0aW9uIHN5bmMoc3BsaWRlKSB7XG4gICAgdGhpcy5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5wdXNoKHtcbiAgICAgIHNwbGlkZTogc3BsaWRlXG4gICAgfSk7XG4gICAgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5zcGxpZGVzLnB1c2goe1xuICAgICAgc3BsaWRlOiB0aGlzLFxuICAgICAgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGFyZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pcygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSURMRSkpIHtcbiAgICAgIHRoaXMuX0MuU3luYy5yZW1vdW50KCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzcGxpZGUuQ29tcG9uZW50cy5TeW5jLnJlbW91bnQoKTtcbiAgICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmdvID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdvKGNvbnRyb2wpIHtcbiAgICB0aGlzLl9DLkNvbnRyb2xsZXIuZ28oY29udHJvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLm9uID0gZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG9uKGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICB0aGlzLmV2ZW50Lm9uKGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudHMsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3RvLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudHMpIHtcbiAgICB0aGlzLmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5vZmYoZXZlbnRzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzJGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudDtcblxuICAgIChfdGhpcyRldmVudCA9IHRoaXMuZXZlbnQpLmVtaXQuYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKF90aGlzJGV2ZW50LCBbZXZlbnRdLmNvbmNhdChzbGljZShhcmd1bWVudHMsIDEpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBhZGQoc2xpZGVzLCBpbmRleCkge1xuICAgIHRoaXMuX0MuU2xpZGVzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGQoc2xpZGVzLCBpbmRleCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShtYXRjaGVyKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuX0MuU2xpZGVzLnJlbW92ZShtYXRjaGVyKTtcblxuICAgIHJldHVybiB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncztcbiAgfTtcblxuICBfcHJvdG8uaXMgPSBmdW5jdGlvbiBpcyh0eXBlKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiB0aGlzLl9vLnR5cGUgPT09IHR5cGU7XG4gIH07XG5cbiAgX3ByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290by5yZWZyZXNoID0gZnVuY3Rpb24gcmVmcmVzaCgpIHtcbiAgICB0aGlzLmVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEVWRU5UX1JFRlJFU0gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koY29tcGxldGVseSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoY29tcGxldGVseSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb21wbGV0ZWx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50ID0gdGhpcy5ldmVudCxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgIGlmIChzdGF0ZS5pcyhDUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRFRCkpIHtcbiAgICAgIEV2ZW50SW50ZXJmYWNlKHRoaXMpLm9uKEVWRU5UX1JFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEWSwgdGhpcy5kZXN0cm95LmJpbmQodGhpcywgY29tcGxldGVseSkpO1xuICAgIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vsc2Uge1xuICAgICAgZm9yT3duKHRoaXMuX0MsIGZ1bmN0aW9uIChjb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIGNvbXBvbmVudC5kZXN0cm95ICYmIGNvbXBvbmVudC5kZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveShjb21wbGV0ZWx5KTtcbiAgICAgIH0sIHRydWUpO1xuICAgICAgZXZlbnQuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfREVTVFJPWSk7XG4gICAgICBldmVudC5kZXN0cm95KCk7XG4gICAgICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcGxldGVseSAmJiBlbXB0eSh0aGlzLnNwbGlkZXMpO1xuICAgICAgc3RhdGUuc2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhERVNUUk9ZRUQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfY3JlYXRlQ2xhc3MoX1NwbGlkZSwgW3tcbiAgICBrZXk6ICJvcHRpb25zIixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbztcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgICB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5fQy5NZWRpYS5zZXQob3B0aW9ucywgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGtleTogImxlbmd0aCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgcmV0dXJuIHRoaXMuX0MuU2xpZGVzLmdldExlbmd0aCh0cnVlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICB9LCB7XG4gICAga2V5OiAiaW5kZXgiLFxuICAgIGdldDogZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9DLkNvbnRyb2xsZXIuZ2V0SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIF9TcGxpZGU7XG59KCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG52YXIgU3BsaWRlID0gX1NwbGlkZTtcblNwbGlkZS5kZWZhdWx0cyA9IHt9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblNwbGlkZS5TVEFURVMgPSBTVEFURVM7XG52YXIgQ0xBU1NfUkVOREVSRUQgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLXJlbmRlcmVkIjtcbnZhciBSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRyA9IHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3RUYWc6ICJ1bCIsXG4gIHNsaWRlVGFnOiAibGkiXG59O1xuXG52YXIgU3R5bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5zdHlsZXMgPSB7fTtcbiAgICB0aGlzLmlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGlkO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIF9wcm90bzIgPSBTdHlsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi5ydWxlID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHJ1bGUoc2VsZWN0b3IsIHByb3AsIHZhbHVlLCBicmVha3BvaW50KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIGJyZWFrcG9pbnQgPSBicmVha3BvaW50IHx8ICJkZWZhdWx0IjtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHNlbGVjdG9ycyA9IHRoaXMuc3R5bGVzW2JyZWFrcG9pbnRdID0gdGhpcy5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGVzW2JyZWFrcG9pbnRdIHx8IHt9O1xuICAgIHZhciBzdHlsZXMgPSBzZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JzW3NlbGVjdG9yXSA9IHNlbGVjdG9yc1tzZWxlY3Rvcl0gfHwge307XG4gICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlc1twcm9wXSA9IHZhbHVlO1xuICB9O1xuXG4gIF9wcm90bzIuYnVpbGQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGNzcyA9ICIiO1xuXG4gICAgaWYgKHRoaXMuc3R5bGVzLmRlZmF1bHQpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBjc3MgKz0gdGhpcy5idWlsZFNlbGVjdG9ycyh0aGlzLnN0eWxlcy5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VmYXVsdCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5zdHlsZXMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zb3J0KGZ1bmN0aW9uIChuLCBtKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLm9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLm1lZGlhUXVlcnkgPT09ICJtaW4iID8gK24gLSArbSA6ICttIC0gK247XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0pLmZvckVhY2goZnVuY3Rpb24gKGJyZWFrcG9pbnQpIHtcbiAgICAgIGlmIChiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYWtwb2ludCAhPT0gImRlZmF1bHQiKSB7XG4gICAgICAgIGNzcyArPSAiQG1lZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICIgKyBicmVha3BvaW50ICsgInB4KSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gICAgICAgIGNzcyArPSBfdGhpczIuYnVpbGRTZWxlY3RvcnMoX3RoaXMyLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZXNbYnJlYWtwb2ludF0pO1xuICAgICAgICBjc3MgKz0gIn0iO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY3NzO1xuICB9O1xuXG4gIF9wcm90bzIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1aWxkU2VsZWN0b3JzID0gZnVuY3Rpb24gYnVpbGRTZWxlY3RvcnMoc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGNzcyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIjtcbiAgICBmb3JPd24oc2VsZWN0b3JzLCBmdW5jdGlvbiAoc3R5bGVzLCBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IpIHtcbiAgICAgIHNlbGVjdG9yID0gKCIjIiArIF90aGlzMy5pZCArICIgIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyBzZWxlY3RvcikudHJpbSgpO1xuICAgICAgY3NzICs9IHNlbGVjdG9yICsgIiB7IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBmb3JPd24oc3R5bGVzLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgIGNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgKz0gcHJvcCArICI6ICIgKyB2YWx1ZSArICI7IjtcbiAgICAgICAgfVxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICAgICAgY3NzICs9ICJ9IjtcbiAgICB9KTtcbiAgICByZXR1cm4gY3NzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfTtcblxuICByZXR1cm4gU3R5bGU7XG59KCk7XG5cbnZhciBTcGxpZGVSZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlUmVuZGVyZXIoY29udGVudHMsIG9wdGlvbnMsIGNvbmZpZywgZGVmYXVsdHMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdGhpcy5zbGlkZXMgPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne307XG4gICAgdGhpcy5icmVha3BvaW50cyA9IFtdO1xuICAgIG1lcmdlKERFRkFVTFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUywgZGVmYXVsdHMgfHwge30pO1xuICAgIG1lcmdlKG1lcmdlKHRoaXMub3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIERFRkFVTFRTKSwgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5jb250ZW50cyA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb250ZW50cztcbiAgICB0aGlzLmNvbmZpZyA9IGFzc2lnbih7fSwgUkVOREVSRVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0RFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30pO1xuICAgIHRoaXMuaWQgPSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5jb25maWcuaWQgfHwgdW5pcXVlSWQoInNwbGlkZSIpO1xuICAgIHRoaXMuU3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlID0gbmV3IFN0eWxlKHRoaXMuaWQsIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRGlyZWN0aW9uID0gRGlyZWN0aW9uKG51bGwsIG51bGwsIHRoaXMub3B0aW9ucyk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGFzc2VydCh0aGlzLmNvbnRlbnRzLmxlbmd0aCwgIlByb3ZpZGUgYXQgbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXN0IDEgY29udGVudC4iKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVSZW5kZXJlci5jbGVhbiA9IGZ1bmN0aW9uIGNsZWFuKHNwbGlkZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgX0V2ZW50SW50ZXJmYWNlMTQgPSBFdmVudEludGVyZmFjZShzcGxpZGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxNC5vbjtcblxuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igcm9vdCA9IHNwbGlkZS5yb290O1xuICAgIHZhciBjbG9uZXMgPSBxdWVyeUFsbCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCwgIi4iICsgQ0xBU1NfQ0xPTkUpO1xuICAgIG9uKEVWRU5UX01PVU5URUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmUoY2hpbGQocm9vdCwgInN0eWxlIikpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgICByZW1vdmUoY2xvbmVzKTtcbiAgfTtcblxuICB2YXIgX3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm90bzMgPSBTcGxpZGVSZW5kZXJlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMy5pbmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5wYXJzZUJyZWFrcG9pbnRzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIHRoaXMuaW5pdFNsaWRlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJSb290UycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJUcmFja1N0eWxlcygpO1xuICAgIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnJlZ2lzdGVyU2xpZGVTdHlsZXMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyTGlzdFN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZXMoKTtcbiAgfTtcblxuICBfcHJvdG8zLmluaXRTbGlkZXMgPSBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gaW5pdFNsaWRlcygpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwdXNoKHRoaXMuc2xpZGVzLCB0aGlzLmNvbnRlbnRzLm1hcChmdW5jdGlvbiAoYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRlbnQsIGluZGV4KSB7XG4gICAgICBjb250ZW50ID0gaXNTdHJpbmcoY29udGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QpID8ge1xuICAgICAgICBodG1sOiBjb250ZW50XG4gICAgICB9IDogY29udGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7XG4gICAgICBjb250ZW50LnN0eWxlcyA9IGNvbnRlbnQuc3R5bGVzIHx8IHt9OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGNvbnRlbnQuYXR0cnMgPSBjb250ZW50LmF0dHJzIHx8IHt9O1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgX3RoaXM0LmNvdmVyKGNvbnRlbnQpO1xuXG4gICAgICB2YXIgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMgPSBfdGhpczQub3B0aW9ucy5jbGFzc2VzLnNsaWRlICsgIiAiICsgKGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCA9PT0gMCA/IENMQVNTX0FDVElWRSA6ICIiKTtcbiAgICAgIGFzc2lnbihjb250JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5hdHRycywge1xuICAgICAgICBjbGFzczogKGNsYXNzZXMgKyAiICIgKyAoY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlbnQuYXR0cnMuY2xhc3MgfHwgIiIpKS50cmltKCksXG4gICAgICAgIHN0eWxlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX3RoaXM0LmJ1aWxkU3R5bGVzKGNvbnRlbnQuc3R5bGVzKVxuICAgICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkpO1xuXG4gICAgaWYgKHRoaXMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTG9vcCgpKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xvbmVzKHRoaXMuc2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMucmVnaXN0ZXJSb290U3R5bGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGZ1bmN0aW9uIHJlZ2lzdGVyUm9vdFN0eWxlcygpIHtcbiAgICB2YXIgX3RoaXM1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHRoaXM7XG5cbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhfcmVmMikge1xuICAgICAgdmFyIHdpZHRoID0gX3JlZjJbMF0sXG4gICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMgPSBfcmVmMlsxXTtcblxuICAgICAgX3RoaXM1LlN0eWxlLnJ1bGUoIiAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgIm1heC13aWR0aCIsIHVuaXQob3B0aW9ucy53aWR0aCksIHdpZHRoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3RlclRyYWNrU3R5bGVzID0gZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHJlZ2lzdGVyVHJhY2tTdHlsZXMoKSB7XG4gICAgdmFyIF90aGlzNiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzO1xuXG4gICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5bGU7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3RvciA9ICIuIiArIENMQVNTX1RSQUNLO1xuICAgIHRoaXMuYnJlYWtwb2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgd2lkdGggPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3JlZjNbMF0sXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWYzWzFdO1xuICAgICAgU3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlMi5ydWxlKHNlbGVjdG9yLCBfdGhpczYucmVzb2x2ZSgicGFkZGluZ0xlZnQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksIF90aGlzNi5jc3NQYWRkaW5nKG9wdGlvbnMsIGZhbHNlKSwgd2lkdGgpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCBfdGhpczYucmVzb2x2ZSgicGFkZGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dSaWdodCIpLCBfdGhpczYuY3NzUGFkZGluZyhvcHRpb25zLCB0cnVlKSwgd2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCAiaGVpZ2h0IiwgX3RoaXM2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jc3NUcmFja0hlaWdodChvcHRpb25zKSwgd2lkdGgpO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyTGlzdFN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Rlckxpc3RTdHlsZXMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5bGU7XG4gICAgdmFyIHNlbGVjdG9yID0gIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuIiArIENMQVNTX0xJU1Q7XG4gICAgdGhpcy5icmVha3BvaW50cy5mb3JFYWNoKGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAoX3JlZjQpIHtcbiAgICAgIHZhciB3aWR0aCA9IF9yZWY0WzBdLFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBvcHRpb25zID0gX3JlZjRbMV07XG4gICAgICBTdHlsZTIucnVsZShzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0b3IsICJ0cmFuc2Zvcm0iLCBfdGhpczcuYnVpbGRUcmFuc2xhdGUob3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpLCB3aWR0aCk7XG5cbiAgICAgIGlmICghX3RoaXM3LmNzc1NsaWRlSGVpZ2h0KG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zKSkge1xuICAgICAgICBTdHlsZTIucnVsZShzZWxlY3RvciwgImFzcGVjdC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmF0aW8iLCBfdGhpczcuY3NzQXNwZWN0UmF0aW8ob3B0aW9ucyksIHdpZHRoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3RlclNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU2xpZGVTdHlsZXMoKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBfdGhpczggPSB0aGlzO1xuXG4gICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlO1xuICAgIHZhciBzZWxlY3RvciA9ICIuIiArIENMQVNTX1NMSURFO1xuICAgIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmJyZWFrcG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHdpZHRoID0gX3JlZjVbMF0sXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWY1WycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxXTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCAid2lkdGgiLCBfdGhpczguJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc1NsaWRlV2lkdGgob3B0aW9ucyksIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShzZWxlY3RvciwgImhlaWdodCIsIF90aGlzOC5jc3NTbGlkZUhlaWdodChvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucykgfHwgIjEwMCUiLCB3aWR0aCk7XG4gICAgICBTdHlsZTIucnVsZShzZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IsIF90aGlzOC5yZXNvbHZlKCJtYXJnaW5SaWdodCIpLCB1bml0KG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCkgfHwgIjBweCIsIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciArICIgPiBpbWciLCAiZGlzcGxheSIsIG9wdGlvbnMuY292ZXIgPyAibm9uZSIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogImlubGluZSIsIHdpZHRoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididWlsZFRyYW5zbGF0ZSA9IGZ1bmN0aW9uIGJ1aWxkVHJhbnNsYXRlKG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIF90aGlzJERpcmVjdGlvbiA9IHRoaXMuRGlyZWN0aW9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmVzb2x2ZSA9IF90aGlzJERpcmVjdGlvbi5yZXNvbHZlLFxuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3JpZW50ID0gX3RoaXMkRGlyZWN0aW9uLm9yaWVudDtcbiAgICB2YXIgdmFsdWVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IFtdO1xuICAgIHZhbHVlcy5wdXNoKHRoaXMuY3NzT2Zmc2V0Q2xvbmVzKG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zKSk7XG4gICAgdmFsdWVzLnB1c2godGhpcy5jc3NPZmZzZXRHYXBzKG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKSk7XG5cbiAgICBpZiAodGhpcy5pc0NlbnRlcihvcHRpb25zKSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhbHVlcy5wdXNoKHRoaXMuYnVpbGRDc3NWYWx1ZShvcmllbnQoLTUwKSwgIiUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIikpO1xuICAgICAgdmFsdWVzLnB1c2guYXBwbHkodmFsdWVzLCB0aGlzLmNzc09mZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXRDZW50ZXIob3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmZpbHRlcihCb29sZWFuKS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuICJ0cmFuc2xhdGUiICsgcmVzb2x2ZSgiWCIpICsgIigiICsgdmFsdWUgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIikiO1xuICAgIH0pLmpvaW4oIiAiKTtcbiAgfTtcblxuICBfcHJvdG8zLmNzc08nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmZzZXRDbG9uZXMgPSBmdW5jdGlvbiBjc3NPZmZzZXRDbG9uZXMob3B0aW9ucykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB2YXIgX3RoaXMkRGlyZWN0aW9uMiA9IHRoaXMuRGlyZWN0aW9uLFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmVzb2x2ZSA9IF90aGlzJERpcmVjdGlvbjIucmVzb2x2ZSxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9yaWVudCA9IF90aGlzJERpcmVjdGlvbjIub3JpZW50O1xuICAgIHZhciBjbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb3VudCA9IHRoaXMuZ2V0Q2xvbmVDb3VudCgpO1xuXG4gICAgaWYgKHRoaXMuaXNGaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ZWRXaWR0aChvcHRpb25zKSkge1xuICAgICAgdmFyIF90aGlzJHBhcnNlQ3NzVmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlID0gdGhpcy5wYXJzZUNzc1ZhbHVlKG9wdGlvbnNbcmVzb2x2ZSgiZml4ZWRXaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkdGgiKV0pLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcGFyc2VDc3NWYWx1ZS52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUsXG4gICAgICAgICAgdW5pdDIgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlLnVuaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgICByZXR1cm4gdGhpcy5idWlsZENzc1ZhbHVlKG9yaWVudCh2YWx1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogY2xvbmVDb3VudCwgdW5pdDIpO1xuICAgIH1cblxuICAgIHZhciBwZXJjZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCA9IDEwMCAqIGNsb25lQ291bnQgLyBvcHRpb25zLnBlclBhZ2U7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBvcmllbnQocGVyY2VudCkgKyAiJSI7XG4gIH07XG5cbiAgX3Byb3RvMy5jcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzT2Zmc2V0Q2VudGVyID0gZnVuY3Rpb24gY3NzT2Zmc2V0Q2VudGVyKG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIF90aGlzJERpcmVjdGlvbjMgPSB0aGlzLkRpcmVjdGlvbixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHJlc29sdmUgPSBfdGhpcyREaXJlY3Rpb24zLnJlc29sdmUsXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvcmllbnQgPSBfdGhpcyREaXJlY3Rpb24zLm9yaWVudDtcblxuICAgIGlmICh0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5pc0ZpeGVkV2lkdGgob3B0aW9ucykpIHtcbiAgICAgIHZhciBfdGhpcyRwYXJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDc3NWYWx1ZTIgPSB0aGlzLnBhcnNlQ3NzVmFsdWUob3B0aW9uc1tyZXNvbHZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciZml4ZWRXaWR0aCIpXSksXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwYXJzZUNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NWYWx1ZTIudmFsdWUsXG4gICAgICAgICAgdW5pdDIgPSBfdGhpcyRwYXJzZUNzc1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZTIudW5pdDtcblxuICAgICAgcmV0dXJuIFt0aGlzLmJ1aWxkQ3NzVmFsdWUob3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWVudCh2YWx1ZSAvIDIpLCB1bml0MildO1xuICAgIH1cblxuICAgIHZhciB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzID0gW107XG4gICAgdmFyIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhZ2UsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBnYXAgPSBvcHRpb25zLmdhcDtcbiAgICB2YWx1ZXMucHVzaChvcmllbnQoNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwIC8gcGVyUGFnZSkgKyAiJSIpO1xuXG4gICAgaWYgKGdhcCkge1xuICAgICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBfdGhpcyRwYXJzZUNzc1ZhbHVlMyA9IHRoaXMucGFyc2VDc3NWYWx1ZShnYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxcbiAgICAgICAgICBfdmFsdWUgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlMy52YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgICAgX3VuaXQgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlMy51bmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcblxuICAgICAgdmFyIGdhcE9mZnNldCA9IChfdmFsdWUgLyBwZXJQYWdlIC0gX3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSkgLyAyO1xuICAgICAgdmFsdWVzLnB1c2godGhpcy5idWlsZENzc1ZhbHVlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcmllbnQoZ2FwT2Zmc2V0KSwgX3VuaXQpKTtcbiAgICB9XG5cbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHZhbHVlcztcbiAgfTtcblxuICBfcHJvdG8zLmNzc09mZnNldEdhcHMgPSBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gY3NzT2Zmc2V0R2FwcyhvcHRpb25zKSB7XG4gICAgdmFyIGNsb25lQ291JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ID0gdGhpcy5nZXRDbG9uZUNvdW50KCk7XG5cbiAgICBpZiAoY2xvbmVDb3VudCAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgb3B0aW9ucy5nYXApIHtcbiAgICAgIHZhciBvcmllbnQgPSB0aGlzLkRpcmVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24ub3JpZW50O1xuXG4gICAgICB2YXIgX3RoaXMkcGFyc2VDc3NWYWx1ZTQgPSB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5wYXJzZUNzc1ZhbHVlKG9wdGlvbnMuZ2FwKSxcbiAgICAgICAgICB2YWx1ZSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfdGhpcyRwYXJzZUNzc1ZhbHVlNC52YWx1ZSxcbiAgICAgICAgICB1bml0MiA9IF90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcyRwYXJzZUNzc1ZhbHVlNC51bml0O1xuXG4gICAgICBpZiAodGhpcy5pc0ZpeGVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dpZHRoKG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ3NzVmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKG9yaWVudCh2YWx1ZSAqIGNsb25lQ291bnQpLCB1bml0Mik7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB2YXIgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZTtcbiAgICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwcyA9IGNsb25lQ291bnQgLyBwZXJQYWdlO1xuICAgICAgcmV0dXJuIHRoaXMuYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1aWxkQ3NzVmFsdWUob3JpZW50KGdhcHMgKiB2YWx1ZSksIHVuaXQyKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgcmV0dXJuICIiO1xuICB9O1xuXG4gIF9wcm90bzMucmVzb2x2ZSA9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiByZXNvbHZlKHByb3ApIHtcbiAgICByZXR1cm4gY2FtZWxUb0tlYmFiKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKHByb3ApKTtcbiAgfTtcblxuICBfcHJvdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvMy5jc3NQYWRkaW5nID0gZnVuY3Rpb24gY3NzUGFkZGluZyhvcHRpb25zLCByaWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHQpIHtcbiAgICB2YXIgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZztcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3AgPSB0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKHJpZ2h0ID8gInJpZ2h0IiA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAibGVmdCIsIHRydWUpO1xuICAgIHJldHVybiBwYWRkaW5nICYmIHVuaXQocGFkZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmdbcHJvcF0gfHwgKGlzT2JqZWN0KHBhZGRpbmcpID8gMCA6IHBhZGRpbmcpKSB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgIjBweCI7XG4gIH07XG5cbiAgX3Byb3RvMy5jc3NUcmFja0hlaWdodCA9IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjc3NUcmFja0hlaWdodChvcHRpb25zKSB7XG4gICAgdmFyIGhlaWdodCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSAiIjtcblxuICAgIGlmICh0aGlzLmlzVmVydGljYWwoKSkge1xuICAgICAgaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCA9IHRoaXMuY3NzSGVpZ2h0KG9wdGlvbnMpO1xuICAgICAgYXNzZXJ0KGhlaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQsIFwnImhlaWdodCIgaXMgbWlzc2luZy5cJyk7XG4gICAgICBoZWlnaHQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgImNhbGMoIiArIGhlaWdodCArICIgLSAiICsgdGhpcy5jc3NQYWRkaW5nKG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLCBmYWxzZSkgKyAiIC0gIiArIHRoaXMuY3NzUGFkZGluZyhvcHRpb25zLCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZSkgKyAiKSI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvMy5jc3NIZWlnaHQgPSBmdW5jdGlvbiBjc3NIZWlnaHQob3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmhlaWdodCk7XG4gIH07XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIF9wcm90bzMuY3NzU2xpZGVXaWR0aCA9IGZ1bmN0aW9uIGNzc1NsaWRlV2lkdGgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGggPyAiIiA6IHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbml0KG9wdGlvbnMuZml4ZWRXaWR0aCkgfHwgKHRoaXMuaXNWZXJ0aWNhbCgpID8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiIDogdGhpcy5jc3NTbGlkZVNpemUob3B0aW9ucykpO1xuICB9O1xuXG4gIF9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8zLmNzc1NsaWRlSGVpZ2h0ID0gZnVuY3Rpb24gY3NzU2xpZGVIZWlnaHQobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmZpeGVkSGVpZ2h0KSB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgKHRoaXMuaXNWZXJ0aWNhbCgpID8gb3B0aW9ucy5hdXRvSGVpZ2h0ID8gIiIgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5jc3NTbGlkZVNpemUob3B0aW9ucykgOiB0aGlzLmNzc0hlaWdodChvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucykpO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzU2xpZGVTaXplID0gZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGNzc1NsaWRlU2l6ZShvcHRpb25zKSB7XG4gICAgdmFyIGdhcCA9IHVuaXQobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMuZ2FwKTtcbiAgICByZXR1cm4gImNhbGMoKDEwMCUiICsgKGdhcCAmJiAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArICIgKyBnYXApICsgIikvIiArIChvcHRpb25zLnBlclBhZ2UgfHwgMSkgKyAoZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcCAmJiAiIC0gIiArIGdhcCkgKyAiKSI7XG4gIH07XG5cbiAgX3Byb3RvMy5jcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzQXNwZWN0UmF0aW8gPSBmdW5jdGlvbiBjc3NBc3BlY3RSYXRpbyhvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBoZWlnaHRSYXRpbyA9IG9wdGlvbnMuaGVpZ2h0UmF0aW87XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBoZWlnaHRSYXRpbyA/ICIiICsgMSAvIGhlaWdodFJhdGlvIDogIiI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xuXG4gIF9wcm90bzMuYnVpbGRDc3NWYWx1ZSA9IGZ1bmN0aW9uIGJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZENzc1ZhbHVlKHZhbHVlLCB1bml0Mikge1xuICAgIHJldHVybiAiIiArIHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSArIHVuaXQyO1xuICB9O1xuXG4gIF9wcm90bzMucGFyc2VDc3NWYWx1ZSA9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBwYXJzZUNzc1ZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKGlzU3RyaW5nKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSkpIHtcbiAgICAgIHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKSB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgMDtcbiAgICAgIHZhciB1bml0MiA9IHZhbHVlLnJlcGxhY2UoL1xcZCooXFwuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcZCopPy8sICIiKSB8fCAicHgiO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlOiBudW1iZXIsXG4gICAgICAgIHVuaXQ6IHVuaXQyXG4gICAgICB9O1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHVuaXQ6ICJweCJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90bzMucGFyc2VCcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWtwb2ludHMgPSBmdW5jdGlvbiBwYXJzZUJyZWFrcG9pbnRzKCkge1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX3RoaXM5ID0gdGhpcztcblxuICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMub3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMuYnJlYWtwb2ludHM7XG4gICAgdGhpcy5icmVha3BvaW50cy5wdXNoKFsiZGVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1bHQiLCB0aGlzLm9wdGlvbnNdKTtcblxuICAgIGlmIChicmVha3BvaW50cyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGZvck93bihicmVha3BvaW50cywgZnVuY3Rpb24gKG9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aCkge1xuICAgICAgICBfdGhpczkuYnJlYWtwb2ludHMucHVzaChbd2lkdGgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtZXJnZShtZXJnZSh7fSwgX3RoaXM5Lm9wdGlvbnMpLCBvcHRpb25zKV0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zLmlzRml4ZWRXaWR0aCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBpc0ZpeGVkV2lkdGgob3B0aW9ucykge1xuICAgIHJldHVybiAhIW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zW3RoaXMuRGlyZWN0aW9uLnJlc29sdmUoImZpeGVkV2lkdGgiKV07XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuXG4gIF9wcm90bzMuaXNMb29wID0gZnVuY3Rpb24gaXNMb29wKCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IExPT1A7XG4gIH07XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIF9wcm90bzMuaXNDZW50ZXIgPSBmdW5jdGlvbiBpc0NlbnRlcihvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIGlmIChvcHRpb25zLmZvY3VzID09PSAiY2VudGVyIikge1xuICAgICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICh0aGlzLmlzTG9vcCgpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy50eXBlID09PSBTTElERSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgcmV0dXJuICF0aGlzLm9wdGlvbnMudHJpbVNwYWNlO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgX3Byb3RvMy5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NWZXJ0aWNhbCA9IGZ1bmN0aW9uIGlzVmVydGljYWwoKSB7XG4gICAgcmV0dXJuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLm9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XG4gIH07XG5cbiAgX3Byb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbzMuYnVpbGRDbGFzc2VzID0gZnVuY3Rpb24gYnVpbGRDbGFzc2VzKCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICByZXR1cm4gW0NMQVNTX1JPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09ULCBDTEFTU19ST09UICsgIi0tIiArIG9wdGlvbnMudHlwZSwgQ0xBU1NfUk9PVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuZHJhZyAmJiBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfUk9PVCArICItLWRyYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19ST09UICsgIi0tbmF2IiwgQ0xBU1NfQUNUSVZFLCAhdGhpcy5jb25maScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnLmhpZGRlbiAmJiBDTEFTU19SRU5ERVJFRF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCIgIik7XG4gIH07XG5cbiAgX3Byb3RvMy5idWlsZEF0dHJzID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJ1aWxkQXR0cnMoYXR0cnMpIHtcbiAgICB2YXIgYXR0ciA9ICIiO1xuICAgIGZvck8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd24oYXR0cnMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBhdHRyICs9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSA/ICIgIiArIGNhbWVsVG9LZWJhYihrZXkpICsgIj1cXCIiICsgdmFsdWUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgIlxcIiIgOiAiIjtcbiAgICB9KTtcbiAgICByZXR1cm4gYXR0ci50cmltKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xuXG4gIF9wcm90bzMuYnVpbGRTdHlsZXMgPSBmdW5jdGlvbiBidWlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RTdHlsZXMoc3R5bGVzKSB7XG4gICAgdmFyIHN0eWxlID0gIiI7XG4gICAgZm9yT3duJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzdHlsZXMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBzdHlsZSArPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiAiICsgY2FtZWxUb0tlYmFiKGtleSkgKyAiOiIgKyB2YWx1ZSArICI7IjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgcmV0dXJuIHN0eWxlLnRyaW0oKTtcbiAgfTtcblxuICBfcHJvdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMy5yZW5kZXJTbGlkZXMgPSBmdW5jdGlvbiByZW5kZXJTbGlkZXMoKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBfdGhpczEwID0gdGhpcztcblxuICAgIHZhciB0YWcgPSB0aGlzLmNvbmZpZy5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVUYWc7XG4gICAgcmV0dXJuIHRoaXMuc2xpZGVzLm1hcChmdW5jdGlvbiAoY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbnQpIHtcbiAgICAgIHJldHVybiAiPCIgKyB0YWcgKyAiICIgKyBfdGhpczEwLmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWlsZEF0dHJzKGNvbnRlbnQuYXR0cnMpICsgIj4iICsgKGNvbnRlbnQuaHRtbCB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgIiIpICsgIjwvIiArIHRhZyArICI+IjtcbiAgICB9KS5qb2luKCIiKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG5cbiAgX3Byb3RvMy5jb3ZlciA9IGZ1bmN0aW9uIGNvdmVyKGNvbnRlbnQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIHN0eWxlcyA9IGNvbnRlbnQuc3R5bGVzLFxuICAgICAgICBfY29udGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQkaHRtbCA9IGNvbnRlbnQuaHRtbCxcbiAgICAgICAgaHRtbCA9IF9jb250ZW50JCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodG1sID09PSB2b2lkIDAgPyAiIiA6IF9jb250ZW50JGh0bWw7XG5cbiAgICBpZiAodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMub3B0aW9ucy5jb3ZlciAmJiAhdGhpcy5vcHRpb25zLmxhenlMb2FkKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgdmFyIHNyYyA9IGh0bWwubWF0Y2goLzxpbWcuKj9zcmNcXHMqPVxccyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKFtcJyJdKSguKz8pXFwxLio/Pi8pO1xuXG4gICAgICBpZiAoc3JjICYmIHNyY1syJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10pIHtcbiAgICAgICAgc3R5bGVzLmJhY2tncm91bmQgPSAiY2VudGVyL2NvdmVyIG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInby1yZXBlYXQgdXJsKFwnIiArIHNyY1syXSArICJcJykiO1xuICAgICAgfVxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gIH07XG5cbiAgX3Byb3RvMy5nZW5lcmF0ZUNsb25lcyA9IGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBnZW5lcmF0ZUNsb25lcyhjb250ZW50cykge1xuICAgIHZhciBjbGFzc2VzID0gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMub3B0aW9ucy5jbGFzc2VzO1xuICAgIHZhciBjb3VudCA9IHRoaXMuZ2V0Q2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlQ291bnQoKTtcbiAgICB2YXIgc2xpZGVzID0gY29udGVudHMuc2xpY2UoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICB3aGlsZSAoc2xpZGVzLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHVzaChzbGlkZXMsIHNsaWRlcyk7XG4gICAgfVxuXG4gICAgcHVzaChzbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNsaWNlKC1jb3VudCkucmV2ZXJzZSgpLCBzbGlkZXMuc2xpY2UoMCwgY291bnQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykuZm9yRWFjaChmdW5jdGlvbiAoY29udGVudCwgaW5kZXgpIHtcbiAgICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMgPSBhc3NpZ24oe30sIGNvbnRlbnQuYXR0cnMsIHtcbiAgICAgICAgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzOiBjb250ZW50LmF0dHJzLmNsYXNzICsgIiAiICsgY2xhc3Nlcy5jbG9uZVxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICAgICAgdmFyIGNsb25lID0gYXNzaWduKHt9LCBjb250ZW50LCB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBhdHRyczogYXR0cnNcbiAgICAgIH0pO1xuICAgICAgaW5kZXggPCBjb3VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPyBjb250ZW50cy51bnNoaWZ0KGNsb25lKSA6IGNvbnRlbnRzLnB1c2goY2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLmdldENsb25lQ291bnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZ2V0Q2xvbmVDb3VudCgpIHtcbiAgICBpZiAodGhpcy5pc0xvb3AoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKG9wdGlvbnMuY2xvbmVzKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBwZXJQYWdlID0gbWF4LmFwcGx5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh2b2lkIDAsIHRoaXMuYnJlYWtwb2ludHMubWFwKGZ1bmN0aW9uIChfcmVmNikgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgdmFyIG9wdGlvbnMyID0gX3JlZjZbMV07XG4gICAgICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9uczIucGVyUGFnZTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBwZXJQYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZSAqICgob3B0aW9ucy5mbGlja01heFBhZ2VzIHx8IDEpICsgMSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIF9wcm90bzMucmVuZGVyQXJybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3cyA9IGZ1bmN0aW9uIHJlbmRlckFycm93cygpIHtcbiAgICB2YXIgaHRtbCA9ICIiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBodG1sICs9ICI8ZGl2IGNsYXNzPVxcIiIgKyB0aGlzLm9wdGlvbnMuY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMuYXJyb3dzICsgIlxcIj4iO1xuICAgIGh0bWwgKz0gdGhpcy5yZW5kZXJBcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3codHJ1ZSk7XG4gICAgaHRtbCArPSB0aGlzLnJlbmRlckFycm93KGZhbHNlKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICByZXR1cm4gaHRtbDtcbiAgfTtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX3Byb3RvMy5yZW5kZXJBcnJvdyA9IGZ1bmN0aW9uIHJlbmRlckFycm93KHByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBjbGFzc2VzID0gX3RoaXMkb3B0aW9ucy5jbGFzc2VzLFxuICAgICAgICBpMThuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IF90aGlzJG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgYXR0cnMgPSB7XG4gICAgICBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3M6IGNsYXNzZXMuYXJyb3cgKyAiICIgKyAocHJldiA/IGNsYXNzZXMucHJldiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBjbGFzc2VzLm5leHQpLFxuICAgICAgdHlwZTogImJ1dHRvbiIsXG4gICAgICBhcmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUxhYmVsOiBwcmV2ID8gaTE4bi5wcmV2IDogaTE4bi5uZXh0XG4gICAgfTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuICI8YnV0dG9uICIgKyB0aGlzLmJ1aWxkQXR0cnMoYXR0cnMpICsgIj48JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N2ZyB4bWxucz1cXCIiICsgWE1MX05BTUVfU1BBQ0UgKyAiXFwiIHZpZXdCb3gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIjAgMCAiICsgU0laRSArICIgIiArIFNJWkUgKyAiXFwiIHdpZHRoPVxcIiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICsgU0laRSArICJcXCIgaGVpZ2h0PVxcIiIgKyBTSVpFICsgIlxcIj48cGF0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZD1cXCIiICsgKHRoaXMub3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCkgKyAiXFwiIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPjwvc3ZnPjwvYnV0dG9uPiI7XG4gIH07XG5cbiAgX3Byb3RvMy5odG1sID0gZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGh0bWwoKSB7XG4gICAgdmFyIF90aGlzJGNvbmZpZyA9IHRoaXMuY29uZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZyxcbiAgICAgICAgcm9vdENsYXNzID0gX3RoaXMkY29uZmlnLnJvb3RDbGFzcyxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGxpc3RUYWcgPSBfdGhpcyRjb25maWcubGlzdFRhZyxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93cyA9IF90aGlzJGNvbmZpZy5hcnJvd3MsXG4gICAgICAgIGJlZm9yZVRyYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInayA9IF90aGlzJGNvbmZpZy5iZWZvcmVUcmFjayxcbiAgICAgICAgYWZ0ZXJUcmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfdGhpcyRjb25maWcuYWZ0ZXJUcmFjayxcbiAgICAgICAgc2xpZGVyID0gX3RoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzJGNvbmZpZy5zbGlkZXIsXG4gICAgICAgIGJlZm9yZVNsaWRlciA9IF90aGlzJGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25maWcuYmVmb3JlU2xpZGVyLFxuICAgICAgICBhZnRlclNsaWRlciA9IF90aGlzJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25maWcuYWZ0ZXJTbGlkZXI7XG4gICAgdmFyIGh0bWwgPSAiIjtcbiAgICBodG1sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrPSAiPGRpdiBpZD1cXCIiICsgdGhpcy5pZCArICJcXCIgY2xhc3M9XFwiIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmJ1aWxkQ2xhc3NlcygpICsgIiAiICsgKHJvb3RDbGFzcyB8fCAiIikgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIlxcIj4iO1xuICAgIGh0bWwgKz0gIjxzdHlsZT4iICsgdGhpcy5TdHlsZS5idWlsZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSArICI8L3N0eWxlPiI7XG5cbiAgICBpZiAoc2xpZGVyKSB7XG4gICAgICBodG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCArPSBiZWZvcmVTbGlkZXIgfHwgIiI7XG4gICAgICBodG1sICs9ICI8ZGl2IGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcz1cXCJzcGxpZGVfX3NsaWRlclxcIj4iO1xuICAgIH1cblxuICAgIGh0bWwgKz0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlZm9yZVRyYWNrIHx8ICIiO1xuXG4gICAgaWYgKGFycm93cykge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0bWwgKz0gdGhpcy5yZW5kZXJBcnJvd3MoKTtcbiAgICB9XG5cbiAgICBodG1sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArPSAiPGRpdiBjbGFzcz1cXCJzcGxpZGVfX3RyYWNrXFwiPiI7XG4gICAgaHRtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgKz0gIjwiICsgbGlzdFRhZyArICIgY2xhc3M9XFwic3BsaWRlX19saXN0XFwiPiI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGh0bWwgKz0gdGhpcy5yZW5kZXJTbGlkZXMoKTtcbiAgICBodG1sICs9ICI8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8iICsgbGlzdFRhZyArICI+IjtcbiAgICBodG1sICs9ICI8L2Rpdj4iO1xuICAgIGh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21sICs9IGFmdGVyVHJhY2sgfHwgIiI7XG5cbiAgICBpZiAoc2xpZGVyKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICAgIGh0bWwgKz0gYWZ0ZXJTbGlkZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8ICIiO1xuICAgIH1cblxuICAgIGh0bWwgKz0gIjwvZGl2PiI7XG4gICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBodG1sO1xuICB9O1xuXG4gIHJldHVybiBTcGxpZGVSZW5kZXJlcjtcbn0oKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbmV4cG9ydCB7IENMQVNTRVMsIENMQVNTX0FDVElWRSwgQ0xBU1NfQVJST1csICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDTEFTU19BUlJPV1MsIENMQVNTX0FSUk9XX05FWFQsIENMQVNTX0FSUk9XX1BSRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBDTEFTU19DTE9ORSwgQ0xBU1NfQ09OVEFJTkVSLCBDTEFTU19GT0NVU19JTiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NMQVNTX0lOSVRJQUxJWkVELCBDTEFTU19MSVNULCBDTEFTU19MT0FESU5HLCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfTkVYVCwgQ0xBU1NfT1ZFUkZMT1csIENMQVNTX1BBR0lOQVRJT04sIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19QQUdJTkFUSU9OX1BBR0UsIENMQVNTX1BSRVYsIENMQVNTX1BST0dSRVNTLCBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfUFJPR1JFU1NfQkFSLCBDTEFTU19ST09ULCBDTEFTU19TTElERSwgQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1NQSU5ORVIsIENMQVNTX1NSLCBDTEFTU19UT0dHTEUsIENMQVNTX1RPR0dMRV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUEFVU0UsIENMQVNTX1RPR0dMRV9QTEFZLCBDTEFTU19UUkFDSywgQ0xBU1NfVklTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lCTEUsIERFRkFVTFRTLCBFVkVOVF9BQ1RJVkUsIEVWRU5UX0FSUk9XU19NT1VOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRCwgRVZFTlRfQVJST1dTX1VQREFURUQsIEVWRU5UX0FVVE9QTEFZX1BBVVNFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfQVVUT1BMQVlfUExBWSwgRVZFTlRfQVVUT1BMQVlfUExBWUlORywgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0NMSUNLLCBFVkVOVF9ERVNUUk9ZLCBFVkVOVF9EUkFHLCBFVkVOVF9EUkFHRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRCwgRVZFTlRfRFJBR0dJTkcsIEVWRU5UX0VORF9JTkRFWF9DSEFOR0VELCBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfSElEREVOLCBFVkVOVF9JTkFDVElWRSwgRVZFTlRfTEFaWUxPQURfTE9BREVEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgRVZFTlRfTU9VTlRFRCwgRVZFTlRfTU9WRSwgRVZFTlRfTU9WRUQsIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOQVZJR0FUSU9OX01PVU5URUQsIEVWRU5UX09WRVJGTE9XLCBFVkVOVF9QQUdJTkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVElPTl9NT1VOVEVELCBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQsIEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FEWSwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfUkVTSVpFLCBFVkVOVF9SRVNJWkVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfU0NST0xMLCBFVkVOVF9TQ1JPTExFRCwgRVZFTlRfU0hJRlRFRCwgRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1NMSURFX0tFWURPV04sIEVWRU5UX1VQREFURUQsIEVWRU5UX1ZJU0lCTEUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudEJpbmRlciwgRXZlbnRJbnRlcmZhY2UsIEZBREUsIExPT1AsIExUUiwgUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUTCwgUmVxdWVzdEludGVydmFsLCBTTElERSwgU1RBVFVTX0NMQVNTRVMsIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUsIFNwbGlkZVJlbmRlcmVyLCBTdGF0ZSwgVFRCLCBUaHJvdHRsZSwgU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhcyBkZWZhdWx0IH07XG4nLAogICAgICAgICAgICAgICAgJ0Rlc3RQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnRmlsZU5hbWUnOiAnQTAwMDAwMTAyNzAwMTAwMS93cy9zcmMvc3BsaWRlanMvc3BsaWRlL2Rpc3QvanMvc3BsaWRlLmVzbS5qcycsCiAgICAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdzX3NsaWRlJywKICAgICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZScsCiAgICAgICAgICAgICAgICAnbW9kVmFyJzogeydWYXJMaXN0JzogeydBY2NvcmRpb25DYXJkQm9keUNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRIZWFkZXJDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uT3BlbkZpcnN0JzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNCbG9jayc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1DU1NWYXInOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb21tZW50XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BQYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcFBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbVBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZz0yMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgaWQgZm9udCBjb2xvclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvbnRDb2xvcj1fQ29sb3JBX1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgbW9kdWxlIGJhY2tncm91bmRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQmFja2dyb3VuZD1cbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmQnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbW96LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8tYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZFNWRyc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIHN0YXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBmaXhlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUVuZFRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUdQb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1IZWxwJzogJyA8ZGl2IGNsYXNzPSJhbGVydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlciI+IFRvIHNldHVwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2LCBzZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYldlYi5odG1sc1syXVsiVmFycyJdWyJEZXZNc2ciXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIDEuIEluc3RydWN0aW9ucyBhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgcGFnZSBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlLjwvZGl2PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Qb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVJbmMnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIF9Gb250Q29sb3JfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIF9NQmFja2dyb3VuZF9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgI19JRF8ge3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuaGNvbnRlbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLTUwJSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy01MCUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDU3NnB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyBwYWRkaW5nOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBNZWRpdW0gRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rlc2t0b3BzICovIEBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNzY4cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOjAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIExhcmdlIERldmljZXMsIFdpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NjcmVlbnMgKi8gQG1lZGlhIG9ubHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjcmVlbiBhbmQgKG1pbi13aWR0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOiA5OTJweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyBwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZVRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVZpZGVvQmFja2dyb3VuZCc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaGVhZGVyLXVuaXRfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmlnaHQ6bm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1sZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlkZW97XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIG9iamVjdC1maXQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhQ2xhc3MnOiAnJ319fX0sCiAzNDogeydlbic6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAnQ29udGVudCc6IGInLyohXG4gKiBTcGxpZGUuanNcbiAqIFZlcnNpb24gIDogNC4xLjRcbiAqIExpY2Vuc2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA6IE1JVFxuICogQ29weXJpZ2h0OiAyMDIyIE5hb3Rvc2hpIEZ1aml0YVxuICovXG52YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIHQsbjt0PXRoaXMsbj1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgcz0icnRsIix1JwogICAgICAgICAgICAgICAgICAgICAgICBiJz0idHRiIixvPXt3aWR0aDpbImhlaWdodCJdLGxlZnQ6WyJ0b3AiLCJyaWdodCJdLHJpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDpbImJvdHRvbSIsImxlZnQiXSx4OlsieSJdLFg6WyJZIl0sWTpbIlgiXSxBcnJvd0xlZicKICAgICAgICAgICAgICAgICAgICAgICAgYid0OlsiQXJyb3dVcCIsIkFycm93UmlnaHQiXSxBcnJvd1JpZ2h0OlsiQXJyb3dEb3duIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Fycm93TGVmdCJdfTtmdW5jdGlvbiBlKHQsbixlKXtyZXR1cm57cmVzb2x2ZTpmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24odCxuLGkpe3ZhciByPShpPWl8fGUuZGlyZWN0aW9uKSE9PXN8fG4/aT09PXU/MDotMScKICAgICAgICAgICAgICAgICAgICAgICAgYic6MTtyZXR1cm4gb1t0XSYmb1t0XVtyXXx8dC5yZXBsYWNlKC93aWR0aHxsZWZ0fHJpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy9pLGZ1bmN0aW9uKHQsbil7dD1vW3QudG9Mb3dlckNhc2UoKV1bcl18fHQ7cmV0dXJuIDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPG4/dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpOnR9KX0sb3JpZW50OicKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbih0KXtyZXR1cm4gdCooZS5kaXJlY3Rpb249PT1zPzE6LTEpfX19dmFyIGk9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyJzcGxpZGUiLHQ9aSsiX18iLHI9aSxhPXQrInRyYWNrIixjPXQrImxpc3QiLGg9dCsic2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIixmPWgrIi0tY2xvbmUiLG49dCsiYXJyb3ciLGw9dCsicGFnaW5hdGlvbiIsZD0iaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLWFjdGl2ZSIsdj17dHlwZToic2xpZGUiLHJvbGU6InJlZ2lvbiIsc3BlZWQ6NDAwLHBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JQYWdlOjEsY2xvbmVTdGF0dXM6ITAsYXJyb3dzOiEwLHBhZ2luYXRpb246ITAscGFnaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb25LZXlib2FyZDohMCxpbnRlcnZhbDo1ZTMscGF1c2VPbkhvdmVyOiEwLHBhdXNlTycKICAgICAgICAgICAgICAgICAgICAgICAgYiduRm9jdXM6ITAscmVzZXRQcm9ncmVzczohMCxlYXNpbmc6ImN1YmljLWJlemllcigwLjI1JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgMSwgMC41LCAxKSIsZHJhZzohMCxkaXJlY3Rpb246Imx0ciIsdHJpbVNwYWNlOiEwLGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2N1c2FibGVOb2RlczoiYSwgYnV0dG9uLCB0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdCwgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmcmFtZSIsbGl2ZTohMCxjbGFzc2VzOntzbGlkZTpoLGNsb25lOmYsYXJyb3dzOnQrImFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvd3MiLGFycm93Om4scHJldjpuKyItLXByZXYiLG5leHQ6bisiLS1uZXh0IixwYWdpbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbjpsLHBhZ2U6bCsiX19wYWdlIixzcGlubmVyOnQrInNwaW5uZXIifSxpMThuOntwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldjoiUHJldmlvdXMgc2xpZGUiLG5leHQ6Ik5leHQgc2xpZGUiLGZpcnN0OiJHbyB0byBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lyc3Qgc2xpZGUiLGxhc3Q6IkdvIHRvIGxhc3Qgc2xpZGUiLHNsaWRlWDoiR28gdG8gc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlICVzIixwYWdlWDoiR28gdG8gcGFnZSAlcyIscGxheToiU3RhcnQgYXV0b3BsYXkiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXVzZToiUGF1c2UgYXV0b3BsYXkiLGNhcm91c2VsOiJjYXJvdXNlbCIsc2xpZGU6InNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSIsc2VsZWN0OiJTZWxlY3QgYSBzbGlkZSB0byBzaG93IixzbGlkZUxhYmVsOiIlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2YgJXMifSxyZWR1Y2VkTW90aW9uOntzcGVlZDowLHJld2luZFNwZWVkOjAsYXV0b3BsYScKICAgICAgICAgICAgICAgICAgICAgICAgYid5OiJwYXVzZSJ9fTtmdW5jdGlvbiBwKHQsbixpKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zbGljZS5jYWxsKHQsbixpKX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmJpbmQuYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHQsW251bGxdLmNvbmNhdChwKGFyZ3VtZW50cywxKSkpfWZ1bmN0aW9uIHcodCxuKXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHR5cGVvZiBuPT09dH1mdW5jdGlvbiBiKHQpe3JldHVybiBudWxsIT09dCYmdygiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdCIsdCl9dmFyIG09QXJyYXkuaXNBcnJheSx5PShnKHcsImZ1bmN0aW9uIiksZygnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndywic3RyaW5nIikpO2Z1bmN0aW9uIHgodCl7cmV0dXJuIG0odCk/dDpbdF19ZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIF8odCxuKXt4KHQpLmZvckVhY2gobil9ZnVuY3Rpb24gQSh0LG4pe3JldHVybiB0LnB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NoLmFwcGx5KHQseChuKSksdH1mdW5jdGlvbiBMKHQsbil7cmV0dXJuIGZ1bmN0aW9uKHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXt0cnl7cmV0dXJuIHQgaW5zdGFuY2VvZih0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZScKICAgICAgICAgICAgICAgICAgICAgICAgYid3fHx3aW5kb3cpLkhUTUxFbGVtZW50fWNhdGNoKHQpe3JldHVybiExfX0odCkmJih0Lm1zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01hdGNoZXNTZWxlY3Rvcnx8dC5tYXRjaGVzKS5jYWxsKHQsbil9ZnVuY3Rpb24gTSh0LG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtyZXR1cm4gbj8oaT1uLG49KG49dCk/cChuLmNoaWxkcmVuKTpbXSwoaT9uLmZpbHRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24odCl7cmV0dXJuIEwodCxpKX0pOm4pWzBdKTp0LmZpcnN0RWxlbWVudENoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZDt2YXIgaX1nKHcsInVuZGVmaW5lZCIpO3ZhciBFPU9iamVjdC5rZXlzO2Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBQKG4saSx0KXtuJiYodD9FKG4pLnJldmVyc2UoKTpFKG4pKS5mb3JFYWNoKGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbih0KXsiX19wcm90b19fIiE9PXQmJmkoblt0XSx0KX0pfWZ1bmN0aW9uIFMocil7cmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBwKGFyZ3VtZW50cywxKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe1AoaSxmdW5jdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCxuKXtyW25dPWlbbl19KX0pLHJ9ZnVuY3Rpb24gWChpKXtyZXR1cm4gcChhcmd1bWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzLDEpLmZvckVhY2goZnVuY3Rpb24odCl7UCh0LGZ1bmN0aW9uKHQsbil7bSh0KT9pW25dJwogICAgICAgICAgICAgICAgICAgICAgICBiJz10LnNsaWNlKCk6Yih0KT9pW25dPVgoe30sYihpW25dKT9pW25dOnt9LHQpOmlbbl09dH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKX0pLGl9ZnVuY3Rpb24gaih0KXtfKHQsZnVuY3Rpb24odCl7dCYmdC5wYXJlbnROb2RlJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSl9ZnVuY3Rpb24gRyh0KXtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3kodCk/dDp0P3QrInB4IjoiIn1mdW5jdGlvbiBPKHQsbil7aWYoIXQpdGhyb3cgbmV3IEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvcigiWyIraSsiXSAiKyhufHwiIikpfU1hdGgubWluO3ZhciBSPU1hdGgubWF4O01hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoLmZsb29yLE1hdGguY2VpbCxNYXRoLmFicztmdW5jdGlvbiBUKHQpe3JldHVybiB0LnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCIkMS0kMiIpLnRvTG93ZXJDYXNlKCl9dmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB6PXt9O2Z1bmN0aW9uIEIoKXt2YXIgbz1bXTtmdW5jdGlvbiBpKHQsaSxyKXtfKHQsZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uKG4pe24mJl8oaSxmdW5jdGlvbih0KXt0LnNwbGl0KCIgIikuZm9yRWFjaChmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24odCl7dD10LnNwbGl0KCIuIik7cihuLHRbMF0sdFsxXSl9KX0pfSl9cmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbntiaW5kOmZ1bmN0aW9uKHQsbixzLHUpe2kodCxuLGZ1bmN0aW9uKHQsbixpKXt2YXIgcicKICAgICAgICAgICAgICAgICAgICAgICAgYic9ImFkZEV2ZW50TGlzdGVuZXIiaW4gdCxlPXI/dC5yZW1vdmVFdmVudExpc3RlbmVyLmJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kKHQsbixzLHUpOnQucmVtb3ZlTGlzdGVuZXIuYmluZCh0LHMpO3I/dC5hZGRFdmVudEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0ZW5lcihuLHMsdSk6dC5hZGRMaXN0ZW5lcihzKSxvLnB1c2goW3QsbixpLHMsZV0pfScKICAgICAgICAgICAgICAgICAgICAgICAgYicpfSx1bmJpbmQ6ZnVuY3Rpb24odCxuLGUpe2kodCxuLGZ1bmN0aW9uKG4saSxyKXtvPW8uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hISh0WzBdIT09bnx8dFsxXSE9PWl8fHRbMl0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09cnx8ZSYmdFszXSE9PWUpfHwodFs0XSgpLCExKX0pfSl9LGRpc3BhdGNoOmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbih0LG4saSl7dmFyIHI7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEN1c3RvbUV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJz9yPW5ldyBDdXN0b21FdmVudChuLHtidWJibGVzOiEwLGRldGFpbDppfSk6KHI9ZG9jdW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpKS5pbml0Q3VzdG9tRXZlbnQobiwhMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsITEsaSksdC5kaXNwYXRjaEV2ZW50KHIpLHJ9LGRlc3Ryb3k6ZnVuY3Rpb24oKXtvLmZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKGZ1bmN0aW9uKHQpe3RbNF0oKX0pLG8ubGVuZ3RoPTB9fX1mdW5jdGlvbiBDKHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXt2YXIgaT10P3QuZXZlbnQuYnVzOmRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCkscj1CKCk7cmV0dXJuIHQmJnQuZXZlbnQub24oImRlc3Ryb3kiLHIuZGVzdHJveSksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1Mocix7YnVzOmksb246ZnVuY3Rpb24odCxuKXtyLmJpbmQoaSx4KHQpLmpvaW4oIiAiKSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24odCl7bi5hcHBseShuLG0odC5kZXRhaWwpP3QuZGV0YWlsOltdKX0pfSxvZicKICAgICAgICAgICAgICAgICAgICAgICAgYidmOmcoci51bmJpbmQsaSksZW1pdDpmdW5jdGlvbih0KXtyLmRpc3BhdGNoKGksdCxwKGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2d1bWVudHMsMSkpfX0pfXZhciBXPXtsaXN0VGFnOiJ1bCIsc2xpZGVUYWc6ImxpIn0saz0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbil7dGhpcy5zdHlsZXM9e30sdGhpcy5pZD10LCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLm9wdGlvbnM9bn12YXIgbj10LnByb3RvdHlwZTtyZXR1cm4gbi5ydWxlPWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbih0LG4saSxyKXtyPXRoaXMuc3R5bGVzW3I9cnx8ImRlZmF1bHQiXT10aGlzLnN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXNbcl18fHt9OyhyW3RdPXJbdF18fHt9KVtuXT1pfSxuLmJ1aWxkPWZ1bmN0aW9uKCl7dicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBpPXRoaXMsbj0iIjtyZXR1cm4gdGhpcy5zdHlsZXMuZGVmYXVsdCYmKG4rPXRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1aWxkU2VsZWN0b3JzKHRoaXMuc3R5bGVzLmRlZmF1bHQpKSxPYmplY3Qua2V5cyh0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5zdHlsZXMpLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4ibWluIj09PWkub3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicubWVkaWFRdWVyeT8rdC0rbjorbi0rdH0pLmZvckVhY2goZnVuY3Rpb24odCl7ImRlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x0IiE9PXQmJihuPShuKz0iQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogIit0KyInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHgpIHsiKStpLmJ1aWxkU2VsZWN0b3JzKGkuc3R5bGVzW3RdKSsifSIpfSksbn0sbi5idScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbGRTZWxlY3RvcnM9ZnVuY3Rpb24odCl7dmFyIGk9dGhpcyxyPSIiO3JldHVybiBQKHQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uKHQsbil7bj0oIiMiK2kuaWQrIiAiK24pLnRyaW0oKSxyKz1uKyIgeyIsUCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCxmdW5jdGlvbih0LG4peyF0JiYwIT09dHx8KHIrPW4rIjogIit0KyI7Iil9KSxyKz0ifScKICAgICAgICAgICAgICAgICAgICAgICAgYicifSkscn0sdH0oKTtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsbixpLHIpe3RoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLnNsaWRlcz1bXSx0aGlzLm9wdGlvbnM9e30sdGhpcy5icmVha3BvaW50cz1bXSxYKHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLHJ8fHt9KSxYKFgodGhpcy5vcHRpb25zLHYpLG58fHt9KSx0aGlzLmNvbnRlbnRzPXQsdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuY29uZmlnPVMoe30sVyxpfHx7fSksdGhpcy5pZD10aGlzLmNvbmZpZy5pZHx8IiIrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhyPSJzcGxpZGUiKSsoKHI9eltyXT0oeltyXXx8MCkrMSk8MTA/IjAiK3I6IiIrciksdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMuU3R5bGU9bmV3IGsodGhpcy5pZCx0aGlzLm9wdGlvbnMpLHRoaXMuRGlyZWN0aW9uPScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKDAsMCx0aGlzLm9wdGlvbnMpLE8odGhpcy5jb250ZW50cy5sZW5ndGgsIlByb3ZpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0IGxlYXN0IDEgY29udGVudC4iKSx0aGlzLmluaXQoKX10LmNsZWFuPWZ1bmN0aW9uKHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXt2YXIgbixpPUModCkub24scj10LnJvb3QsdD0odD1yLChuPSIuIitmKT9wKHQucXVlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid5U2VsZWN0b3JBbGwobikpOltdKTtpKCJtb3VudGVkIixmdW5jdGlvbigpe2ooTShyLCJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGUiKSl9KSxqKHQpfTt2YXIgbj10LnByb3RvdHlwZTtyZXR1cm4gbi5pbml0PWZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbigpe3RoaXMucGFyc2VCcmVha3BvaW50cygpLHRoaXMuaW5pdFNsaWRlcygpLHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLnJlZ2lzdGVyUm9vdFN0eWxlcygpLHRoaXMucmVnaXN0ZXJUcmFja1N0eWxlcygpLHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLnJlZ2lzdGVyU2xpZGVTdHlsZXMoKSx0aGlzLnJlZ2lzdGVyTGlzdFN0eWxlcygpfSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbi5pbml0U2xpZGVzPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcztBKHRoaXMuc2xpZGVzLHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLmNvbnRlbnRzLm1hcChmdW5jdGlvbih0LG4peyh0PXkodCk/e2h0bWw6dH06dCkuc3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlcz10LnN0eWxlc3x8e30sdC5hdHRycz10LmF0dHJzfHx7fSxpLmNvdmVyKHQpO249aS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5jbGFzc2VzLnNsaWRlKyIgIisoMD09PW4/ImlzLWFjdGl2ZSI6IiIpO3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gUyh0LmF0dHJzLHtjbGFzczoobisiICIrKHQuYXR0cnMuY2xhc3N8fCIiKSkudHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20oKSxzdHlsZTppLmJ1aWxkU3R5bGVzKHQuc3R5bGVzKX0pLHR9KSksdGhpcy5pc0xvb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCkmJnRoaXMuZ2VuZXJhdGVDbG9uZXModGhpcy5zbGlkZXMpfSxuLnJlZ2lzdGVyUm9vdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3RoaXMuYnJlYWtwb2ludHMuZm9yRWFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2goZnVuY3Rpb24odCl7dmFyIG49dFswXSx0PXRbMV07aS5TdHlsZS5ydWxlKCIgIiwibWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneC13aWR0aCIsRyh0LndpZHRoKSxuKX0pfSxuLnJlZ2lzdGVyVHJhY2tTdHlsZXM9ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKCl7dmFyIGk9dGhpcyxyPXRoaXMuU3R5bGUsZT0iLiIrYTt0aGlzLmJyZWFrcG9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cy5mb3JFYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0sdD10WzFdO3IucnVsZShlLGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnJlc29sdmUoInBhZGRpbmdMZWZ0IiksaS5jc3NQYWRkaW5nKHQsITEpLG4pLHIucnVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSxpLnJlc29sdmUoInBhZGRpbmdSaWdodCIpLGkuY3NzUGFkZGluZyh0LCEwKSxuKSxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5ydWxlKGUsImhlaWdodCIsaS5jc3NUcmFja0hlaWdodCh0KSxuKX0pfSxuLnJlZ2lzdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInckxpc3RTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9dGhpcy5TdHlsZSxlPSIuIicKICAgICAgICAgICAgICAgICAgICAgICAgYicrYzt0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dFswXSx0JwogICAgICAgICAgICAgICAgICAgICAgICBiJz10WzFdO3IucnVsZShlLCJ0cmFuc2Zvcm0iLGkuYnVpbGRUcmFuc2xhdGUodCksbiksaS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzU2xpZGVIZWlnaHQodCl8fHIucnVsZShlLCJhc3BlY3QtcmF0aW8iLGkuY3NzQXNwZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdFJhdGlvKHQpLG4pfSl9LG4ucmVnaXN0ZXJTbGlkZVN0eWxlcz1mdW5jdGlvbigpe3ZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgaT10aGlzLHI9dGhpcy5TdHlsZSxlPSIuIitoO3RoaXMuYnJlYWtwb2ludHMuZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2goZnVuY3Rpb24odCl7dmFyIG49dFswXSx0PXRbMV07ci5ydWxlKGUsIndpZHRoIixpLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NTbGlkZVdpZHRoKHQpLG4pLHIucnVsZShlLCJoZWlnaHQiLGkuY3NzU2xpZGVIZWlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0KHQpfHwiMTAwJSIsbiksci5ydWxlKGUsaS5yZXNvbHZlKCJtYXJnaW5SaWdodCIpLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHQuZ2FwKXx8IjBweCIsbiksci5ydWxlKGUrIiA+IGltZyIsImRpc3BsYXkiLHQuY292ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyPyJub25lIjoiaW5saW5lIixuKX0pfSxuLmJ1aWxkVHJhbnNsYXRlPWZ1bmN0aW9uKHQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3t2YXIgbj10aGlzLkRpcmVjdGlvbixpPW4ucmVzb2x2ZSxuPW4ub3JpZW50LHI9W107cmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiByLnB1c2godGhpcy5jc3NPZmZzZXRDbG9uZXModCkpLHIucHVzaCh0aGlzLmNzcycKICAgICAgICAgICAgICAgICAgICAgICAgYidPZmZzZXRHYXBzKHQpKSx0aGlzLmlzQ2VudGVyKHQpJiYoci5wdXNoKHRoaXMuYnVpbGRDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzVmFsdWUobigtNTApLCIlIikpLHIucHVzaC5hcHBseShyLHRoaXMuY3NzT2Zmc2V0Q2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcih0KSkpLHIuZmlsdGVyKEJvb2xlYW4pLm1hcChmdW5jdGlvbih0KXtyZXR1cm4idCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zbGF0ZSIraSgiWCIpKyIoIit0KyIpIn0pLmpvaW4oIiAiKX0sbi5jc3NPZmZzZXRDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVzPWZ1bmN0aW9uKHQpe3ZhciBuLGk9dGhpcy5EaXJlY3Rpb24scj1pLnJlc29sdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGk9aS5vcmllbnQsZT10aGlzLmdldENsb25lQ291bnQoKTtyZXR1cm4gdGhpcy5pc0ZpeCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZFdpZHRoKHQpPyhuPShyPXRoaXMucGFyc2VDc3NWYWx1ZSh0W3IoImZpeGVkV2lkdGgiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyldKSkudmFsdWUscj1yLnVuaXQsdGhpcy5idWlsZENzc1ZhbHVlKGkobikqZSxyKSk6aSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMTAwKmUvdC5wZXJQYWdlKSsiJSJ9LG4uY3NzT2Zmc2V0Q2VudGVyPWZ1bmN0aW9uKHQpeycKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgbixpLHI9dGhpcy5EaXJlY3Rpb24sZT1yLnJlc29sdmUscj1yLm9yaWVudDtyZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHRoaXMuaXNGaXhlZFdpZHRoKHQpPyhuPShlPXRoaXMucGFyc2VDc3NWYWx1ZSh0W2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCJmaXhlZFdpZHRoIildKSkudmFsdWUsZT1lLnVuaXQsW3RoaXMuYnVpbGRDc3NWYWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicocihuLzIpLGUpXSk6KG49dC5wZXJQYWdlLGU9dC5nYXAsKHQ9W10pLnB1c2gocig1MC9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJykrIiUiKSxlJiYoaT0oZT10aGlzLnBhcnNlQ3NzVmFsdWUoZSkpLnZhbHVlLGU9ZS51bmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCx0LnB1c2godGhpcy5idWlsZENzc1ZhbHVlKHIoKGkvbi1pKS8yKSxlKSkpLHQpfSxuLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NPZmZzZXRHYXBzPWZ1bmN0aW9uKHQpe3ZhciBuLGkscixlPXRoaXMuZ2V0Q2xvbmVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKTtyZXR1cm4gZSYmdC5nYXA/KG49dGhpcy5EaXJlY3Rpb24ub3JpZW50LGk9KHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInPXRoaXMucGFyc2VDc3NWYWx1ZSh0LmdhcCkpLnZhbHVlLHI9ci51bml0LHRoaXMuaXNGaScKICAgICAgICAgICAgICAgICAgICAgICAgYid4ZWRXaWR0aCh0KT90aGlzLmJ1aWxkQ3NzVmFsdWUobihpKmUpLHIpOih0PXQucGVyUGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsdGhpcy5idWlsZENzc1ZhbHVlKG4oZS90KmkpLHIpKSk6IiJ9LG4ucmVzb2x2ZT1mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24odCl7cmV0dXJuIFQodGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSh0KSl9LG4uY3NzUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhZGRpbmc9ZnVuY3Rpb24odCxuKXt0PXQucGFkZGluZyxuPXRoaXMuRGlyZWN0aW9uLnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NvbHZlKG4/InJpZ2h0IjoibGVmdCIsITApO3JldHVybiB0JiZHKHRbbl18fChiKHQpPzAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOnQpKXx8IjBweCJ9LG4uY3NzVHJhY2tIZWlnaHQ9ZnVuY3Rpb24odCl7dmFyIG49IiI7cicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiB0aGlzLmlzVmVydGljYWwoKSYmKE8obj10aGlzLmNzc0hlaWdodCh0KSxcJyJoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0IiBpcyBtaXNzaW5nLlwnKSxuPSJjYWxjKCIrbisiIC0gIit0aGlzLmNzc1BhZGRpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnKHQsITEpKyIgLSAiK3RoaXMuY3NzUGFkZGluZyh0LCEwKSsiKSIpLG59LG4uY3NzSGVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodD1mdW5jdGlvbih0KXtyZXR1cm4gRyh0LmhlaWdodCl9LG4uY3NzU2xpZGVXaWR0aD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24odCl7cmV0dXJuIHQuYXV0b1dpZHRoPyIiOkcodC5maXhlZFdpZHRoKXx8KCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmlzVmVydGljYWwoKT8iIjp0aGlzLmNzc1NsaWRlU2l6ZSh0KSl9LG4uY3NzU2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlSGVpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBHKHQuZml4ZWRIZWlnaHQpfHwodGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNWZXJ0aWNhbCgpP3QuYXV0b0hlaWdodD8iIjp0aGlzLmNzc1NsaWRlU2l6ZSh0KTp0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5jc3NIZWlnaHQodCkpfSxuLmNzc1NsaWRlU2l6ZT1mdW5jdGlvbih0KXt2YXIgbj1HJwogICAgICAgICAgICAgICAgICAgICAgICBiJyh0LmdhcCk7cmV0dXJuImNhbGMoKDEwMCUiKyhuJiYiICsgIituKSsiKS8iKyh0LnBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlfHwxKSsobiYmIiAtICIrbikrIikifSxuLmNzc0FzcGVjdFJhdGlvPWZ1bmN0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0KXt0PXQuaGVpZ2h0UmF0aW87cmV0dXJuIHQ/IiIrMS90OiIifSxuLmJ1aWxkQ3NzVmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIiIrdCtufSxuLnBhcnNlQ3NzVmFsdWU9ZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKHQpe3JldHVybiB5KHQpP3t2YWx1ZTpwYXJzZUZsb2F0KHQpfHwwLHVuaXQ6dC5yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGFjZSgvXFxkKihcXC5cXGQqKT8vLCIiKXx8InB4In06e3ZhbHVlOnQsdW5pdDoicHgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIn19LG4ucGFyc2VCcmVha3BvaW50cz1mdW5jdGlvbigpe3ZhciBpPXRoaXMsdD10aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLmJyZWFrcG9pbnRzO3RoaXMuYnJlYWtwb2ludHMucHVzaChbImRlZmF1bHQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyx0aGlzLm9wdGlvbnNdKSx0JiZQKHQsZnVuY3Rpb24odCxuKXtpLmJyZWFrcG9pbnRzLnAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXNoKFtuLFgoWCh7fSxpLm9wdGlvbnMpLHQpXSl9KX0sbi5pc0ZpeGVkV2lkdGg9ZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uKHQpe3JldHVybiEhdFt0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKCJmaXhlZFdpZHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIpXX0sbi5pc0xvb3A9ZnVuY3Rpb24oKXtyZXR1cm4ibG9vcCI9PT10aGlzLm9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnR5cGV9LG4uaXNDZW50ZXI9ZnVuY3Rpb24odCl7aWYoImNlbnRlciI9PT10LmZvY3VzKScKICAgICAgICAgICAgICAgICAgICAgICAgYid7aWYodGhpcy5pc0xvb3AoKSlyZXR1cm4hMDtpZigic2xpZGUiPT09dGhpcy5vcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50eXBlKXJldHVybiF0aGlzLm9wdGlvbnMudHJpbVNwYWNlfXJldHVybiExfSxuLmlzVmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRpY2FsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5kaXJlY3Rpb249PT11fScKICAgICAgICAgICAgICAgICAgICAgICAgYicsbi5idWlsZENsYXNzZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tyLHIrIi0tIit0LnR5cGUscisiLS0iK3QuZGlyZWN0aW9uLHQuZHJhZyYmcisiLS1kcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dhYmxlIix0LmlzTmF2aWdhdGlvbiYmcisiLS1uYXYiLGQsIXRoaXMuY29uZmlnLmhpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZW4mJiJpcy1yZW5kZXJlZCJdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIil9LG4uYnVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkQXR0cnM9ZnVuY3Rpb24odCl7dmFyIGk9IiI7cmV0dXJuIFAodCxmdW5jdGlvbih0LG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKXtpKz10PyIgIitUKG4pK1wnPSJcJyt0K1wnIlwnOiIifSksaS50cmltKCl9LG4uYnVpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkU3R5bGVzPWZ1bmN0aW9uKHQpe3ZhciBpPSIiO3JldHVybiBQKHQsZnVuY3Rpb24odCxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyl7aSs9IiAiK1QobikrIjoiK3QrIjsifSksaS50cmltKCl9LG4ucmVuZGVyU2xpZGVzPWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbigpe3ZhciBuPXRoaXMsaT10aGlzLmNvbmZpZy5zbGlkZVRhZztyZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuc2xpZGVzLm1hcChmdW5jdGlvbih0KXtyZXR1cm4iPCIraSsiICIrbi5idWlsZEF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rycyh0LmF0dHJzKSsiPiIrKHQuaHRtbHx8IiIpKyI8LyIraSsiPiJ9KS5qb2luKCIiKX0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLG4uY292ZXI9ZnVuY3Rpb24odCl7dmFyIG49dC5zdHlsZXMsdD10Lmh0bWwsdD12b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgYicwPT09dD8iIjp0O3RoaXMub3B0aW9ucy5jb3ZlciYmIXRoaXMub3B0aW9ucy5sYXp5TG9hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QmJih0PXQubWF0Y2goLzxpbWcuKj9zcmNcXHMqPVxccyooW1wnIl0pKC4rPylcXDEuKj8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPi8pKSYmdFsyXSYmKG4uYmFja2dyb3VuZD0iY2VudGVyL2NvdmVyIG5vLXJlcGVhdCB1cicKICAgICAgICAgICAgICAgICAgICAgICAgYidsKFwnIit0WzJdKyJcJykiKX0sbi5nZW5lcmF0ZUNsb25lcz1mdW5jdGlvbihyKXtmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKHZhciBlPXRoaXMub3B0aW9ucy5jbGFzc2VzLHM9dGhpcy5nZXRDbG9uZUNvdW50KCksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q9ci5zbGljZSgpO3QubGVuZ3RoPHM7KUEodCx0KTtBKHQuc2xpY2UoLXMpLnJldmVyc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCksdC5zbGljZSgwLHMpKS5mb3JFYWNoKGZ1bmN0aW9uKHQsbil7dmFyIGk9Uyh7fSx0LicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRycyx7Y2xhc3M6dC5hdHRycy5jbGFzcysiICIrZS5jbG9uZX0pLHQ9Uyh7fSx0LHthJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cnM6aX0pO248cz9yLnVuc2hpZnQodCk6ci5wdXNoKHQpfSl9LG4uZ2V0Q2xvbmVDb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gdGhpcy5pc0xvb3AoKT8odD10aGlzLm9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zKS5jbG9uZXN8fFIuYXBwbHkodm9pZCAwLHRoaXMuYnJlYWtwb2ludHMubWFwKGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbih0KXtyZXR1cm4gdFsxXS5wZXJQYWdlfSkpKigodC5mbGlja01heFBhZ2VzfHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMSkrMSk6MH0sbi5yZW5kZXJBcnJvd3M9ZnVuY3Rpb24oKXt2YXIgdD0iIjtyZXR1cm4odCcKICAgICAgICAgICAgICAgICAgICAgICAgYicrPVwnPGRpdiBjbGFzcz0iXCcrdGhpcy5vcHRpb25zLmNsYXNzZXMuYXJyb3dzK1wnIj4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXCcpK3RoaXMucmVuZGVyQXJyb3coITApK3RoaXMucmVuZGVyQXJyb3coITEpKyI8L2Rpdj4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIn0sbi5yZW5kZXJBcnJvdz1mdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMsaT1uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFzc2VzLG49bi5pMThuLGk9e2NsYXNzOmkuYXJyb3crIiAiKyh0P2kucHJldjppLm5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3h0KSx0eXBlOiJidXR0b24iLGFyaWFMYWJlbDp0P24ucHJldjpuLm5leHR9O3JldHVybiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInPGJ1dHRvbiAiK3RoaXMuYnVpbGRBdHRycyhpKStcJz48c3ZnIHhtbG5zPSJodHRwOi8vd3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCIgd2lkdGg9IjQwIiBoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0PSI0MCI+PHBhdGggZD0iXCcrKHRoaXMub3B0aW9ucy5hcnJvd1BhdGh8fCJtMTUuNScKICAgICAgICAgICAgICAgICAgICAgICAgYicgMC45MzItNC4zIDQuMzggMTQuNSAxNC42LTE0LjUgMTQuNSA0LjMgNC40IDE0LjYtMTQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzYgNC40LTQuMy00LjQtNC40LTE0LjYtMTQuNnoiKStcJyIgLz48L3N2Zz48L2J1dHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIib24+J30sbi5odG1sPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jb25maWcsbj10LnJvb3RDbCIKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3MsaT10Lmxpc3RUYWcscj10LmFycm93cyxlPXQuYmVmb3JlVHJhY2sscz10LmFmdGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RyYWNrLHU9dC5zbGlkZXIsbz10LmJlZm9yZVNsaWRlcix0PXQuYWZ0ZXJTbGlkZXIsYT0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiI7cmV0dXJuIGE9KGErPVwnPGRpdiBpZD0iXCcrdGhpcy5pZCtcJyIgY2xhc3M9IlwnKycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmJ1aWxkQ2xhc3NlcygpKyIgIisobnx8IiIpK1wnIj5cJykrKCI8c3R5bGU+IicKICAgICAgICAgICAgICAgICAgICAgICAgYicrdGhpcy5TdHlsZS5idWlsZCgpKyI8L3N0eWxlPiIpLHUmJihhPWErKG98fCIiKStcJzxkaScKICAgICAgICAgICAgICAgICAgICAgICAgYid2IGNsYXNzPSJzcGxpZGVfX3NsaWRlciI+XCcpLGErPWV8fCIiLHImJihhKz10aGlzLnJlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXJBcnJvd3MoKSksYT0oYT0oYT1hK1wnPGRpdiBjbGFzcz0ic3BsaWRlX190cmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2siPlwnKygiPCIraStcJyBjbGFzcz0ic3BsaWRlX19saXN0Ij5cJykpK3RoaXMucmVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlclNsaWRlcygpKygiPC8iK2krIj4iKSkrIjwvZGl2PiIrKHN8fCIiKSx1JiYoYT1hKyI8JwogICAgICAgICAgICAgICAgICAgICAgICBiJy9kaXY+IisodHx8IiIpKSxhKz0iPC9kaXY+In0sdH0oKX0sIm9iamVjdCI9PXR5cGVvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9bicKICAgICAgICAgICAgICAgICAgICAgICAgYicoKToiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShuKTooJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlNwbGlkZVJlbmRlcmVyPW4oKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNwbGlkZS1yZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVyZXIubWluLmpzLm1hcFxuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS1yZW5kZXJlci5taW4uanMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYicvKiFcbiAqIFNwbGlkZS5qc1xuICogVmVyc2lvbiAgOiA0LjEuNFxuICogTGljZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc2UgIDogTUlUXG4gKiBDb3B5cmlnaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXG52YXIgdCxuO3Q9dGhpcyxuPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0icnRsIix1PSJ0dGIiLG89e3dpZHRoOlsiaGVpZ2h0Il0sbGVmdDpbInRvcCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWdodCJdLHJpZ2h0OlsiYm90dG9tIiwibGVmdCJdLHg6WyJ5Il0sWDpbIlkiXSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWTpbIlgiXSxBcnJvd0xlZnQ6WyJBcnJvd1VwIiwiQXJyb3dSaWdodCJdLEFycm93JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JpZ2h0OlsiQXJyb3dEb3duIiwiQXJyb3dMZWZ0Il19O2Z1bmN0aW9uIGUodCxuLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKXtyZXR1cm57cmVzb2x2ZTpmdW5jdGlvbih0LG4saSl7dmFyIHI9KGk9aXx8ZS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlyZWN0aW9uKSE9PXN8fG4/aT09PXU/MDotMToxO3JldHVybiBvW3RdJiZvW3RdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tyXXx8dC5yZXBsYWNlKC93aWR0aHxsZWZ0fHJpZ2h0L2ksZnVuY3Rpb24odCxuKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7dD1vW3QudG9Mb3dlckNhc2UoKV1bcl18fHQ7cmV0dXJuIDA8bj90LmNoYXJBdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpOnR9KX0sb3JpZW50OmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh0KXtyZXR1cm4gdCooZS5kaXJlY3Rpb249PT1zPzE6LTEpfX19dmFyIGk9InNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUiLHQ9aSsiX18iLHI9aSxhPXQrInRyYWNrIixjPXQrImxpc3QiLGg9dCsic2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIixmPWgrIi0tY2xvbmUiLG49dCsiYXJyb3ciLGw9dCsicGFnaW5hdGlvbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q9ImlzLWFjdGl2ZSIsdj17dHlwZToic2xpZGUiLHJvbGU6InJlZ2lvbiIsc3BlZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkOjQwMCxwZXJQYWdlOjEsY2xvbmVTdGF0dXM6ITAsYXJyb3dzOiEwLHBhZ2luYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uOiEwLHBhZ2luYXRpb25LZXlib2FyZDohMCxpbnRlcnZhbDo1ZTMscGF1c2VPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25Ib3ZlcjohMCxwYXVzZU9uRm9jdXM6ITAscmVzZXRQcm9ncmVzczohMCxlYXNpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnOiJjdWJpYy1iZXppZXIoMC4yNSwgMSwgMC41LCAxKSIsZHJhZzohMCxkaXJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uOiJsdHIiLHRyaW1TcGFjZTohMCxmb2N1c2FibGVOb2RlczoiYSwgYnV0dG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgdGV4dGFyZWEsIGlucHV0LCBzZWxlY3QsIGlmcmFtZSIsbGl2ZTohMCxjbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlczp7c2xpZGU6aCxjbG9uZTpmLGFycm93czp0KyJhcnJvd3MiLGFycm93Om4scHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXY6bisiLS1wcmV2IixuZXh0Om4rIi0tbmV4dCIscGFnaW5hdGlvbjpsLHBhZ2U6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wrIl9fcGFnZSIsc3Bpbm5lcjp0KyJzcGlubmVyIn0saTE4bjp7cHJldjoiUHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb3VzIHNsaWRlIixuZXh0OiJOZXh0IHNsaWRlIixmaXJzdDoiR28gdG8gZmlyc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlIixsYXN0OiJHbyB0byBsYXN0IHNsaWRlIixzbGlkZVg6IkdvIHRvIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSAlcyIscGFnZVg6IkdvIHRvIHBhZ2UgJXMiLHBsYXk6IlN0YXJ0IGF1dG9wbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheSIscGF1c2U6IlBhdXNlIGF1dG9wbGF5IixjYXJvdXNlbDoiY2Fyb3VzZWwiLHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZToic2xpZGUiLHNlbGVjdDoiU2VsZWN0IGEgc2xpZGUgdG8gc2hvdyIsc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlTGFiZWw6IiVzIG9mICVzIn0scmVkdWNlZE1vdGlvbjp7c3BlZWQ6MCxyZXdpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkU3BlZWQ6MCxhdXRvcGxheToicGF1c2UifX07ZnVuY3Rpb24gcCh0LG4saSl7cmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0LG4saSl9ZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2codCl7cmV0dXJuIHQuYmluZC5hcHBseSh0LFtudWxsXS5jb25jYXQocChhcmd1bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLDEpKSl9ZnVuY3Rpb24gdyh0LG4pe3JldHVybiB0eXBlb2Ygbj09PXR9ZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGIodCl7cmV0dXJuIG51bGwhPT10JiZ3KCJvYmplY3QiLHQpfXZhciBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz1BcnJheS5pc0FycmF5LHk9KGcodywiZnVuY3Rpb24iKSxnKHcsInN0cmluZyIpKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7ZnVuY3Rpb24geCh0KXtyZXR1cm4gbSh0KT90Olt0XX1mdW5jdGlvbiBfKHQsbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3godCkuZm9yRWFjaChuKX1mdW5jdGlvbiBBKHQsbil7cmV0dXJuIHQucHVzaC5hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BwbHkodCx4KG4pKSx0fWZ1bmN0aW9uIEwodCxuKXtyZXR1cm4gZnVuY3Rpb24odCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpe3RyeXtyZXR1cm4gdCBpbnN0YW5jZW9mKHQub3duZXJEb2N1bWVudC5kZWZhdWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndFZpZXd8fHdpbmRvdykuSFRNTEVsZW1lbnR9Y2F0Y2godCl7cmV0dXJuITF9fSh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykmJih0Lm1zTWF0Y2hlc1NlbGVjdG9yfHx0Lm1hdGNoZXMpLmNhbGwodCxuKX1mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gTSh0LG4pe3JldHVybiBuPyhpPW4sbj0obj10KT9wKG4uY2hpbGRyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTpbXSwoaT9uLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gTCh0LGkpfSk6bilbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBdKTp0LmZpcnN0RWxlbWVudENoaWxkO3ZhciBpfWcodywidW5kZWZpbmVkIik7dicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBFPU9iamVjdC5rZXlzO2Z1bmN0aW9uIFAobixpLHQpe24mJih0P0UobikucmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVyc2UoKTpFKG4pKS5mb3JFYWNoKGZ1bmN0aW9uKHQpeyJfX3Byb3RvX18iIT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QmJmkoblt0XSx0KX0pfWZ1bmN0aW9uIFMocil7cmV0dXJuIHAoYXJndW1lbnRzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe1AoaSxmdW5jdGlvbih0LG4pe3Jbbl09aVsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbl19KX0pLHJ9ZnVuY3Rpb24gWChpKXtyZXR1cm4gcChhcmd1bWVudHMsMSkuZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VhY2goZnVuY3Rpb24odCl7UCh0LGZ1bmN0aW9uKHQsbil7bSh0KT9pW25dPXQucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWNlKCk6Yih0KT9pW25dPVgoe30sYihpW25dKT9pW25dOnt9LHQpOmlbbl09dH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKX0pLGl9ZnVuY3Rpb24gaih0KXtfKHQsZnVuY3Rpb24odCl7dCYmdC5wYXJlbnROJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSl9ZnVuY3Rpb24gRyh0KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7cmV0dXJuIHkodCk/dDp0P3QrInB4IjoiIn1mdW5jdGlvbiBPKHQsbil7aWYoIXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKXRocm93IG5ldyBFcnJvcigiWyIraSsiXSAiKyhufHwiIikpfU1hdGgubWluO3ZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgUj1NYXRoLm1heDtNYXRoLmZsb29yLE1hdGguY2VpbCxNYXRoLmFicztmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gVCh0KXtyZXR1cm4gdC5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJDEtJDIiKS50b0xvd2VyQ2FzZSgpfXZhciB6PXt9O2Z1bmN0aW9uIEIoKXt2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ289W107ZnVuY3Rpb24gaSh0LGkscil7Xyh0LGZ1bmN0aW9uKG4pe24mJl8oaSxmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24odCl7dC5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24odCl7dD10LnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpdCgiLiIpO3Iobix0WzBdLHRbMV0pfSl9KX0pfXJldHVybntiaW5kOmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbih0LG4scyx1KXtpKHQsbixmdW5jdGlvbih0LG4saSl7dmFyIHI9ImFkZEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudExpc3RlbmVyImluIHQsZT1yP3QucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4scyx1KTp0LnJlbW92ZUxpc3RlbmVyLmJpbmQodCxzKTtyP3QuYWRkRXZlbnRMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdGVuZXIobixzLHUpOnQuYWRkTGlzdGVuZXIocyksby5wdXNoKFt0LG4saSxzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlXSl9KX0sdW5iaW5kOmZ1bmN0aW9uKHQsbixlKXtpKHQsbixmdW5jdGlvbihuLGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHIpe289by5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISEodFswXSE9PW58fHRbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzFdIT09aXx8dFsyXSE9PXJ8fGUmJnRbM10hPT1lKXx8KHRbNF0oKSwhMSl9KX0pfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsZGlzcGF0Y2g6ZnVuY3Rpb24odCxuLGkpe3ZhciByO3JldHVybiJmdW5jdGlvbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT10eXBlb2YgQ3VzdG9tRXZlbnQ/cj1uZXcgQ3VzdG9tRXZlbnQobix7YnViYmxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6ITAsZGV0YWlsOml9KToocj1kb2N1bWVudC5jcmVhdGVFdmVudCgiQ3VzdG9tRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50IikpLmluaXRDdXN0b21FdmVudChuLCEwLCExLGkpLHQuZGlzcGF0Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQocikscn0sZGVzdHJveTpmdW5jdGlvbigpe28uZm9yRWFjaChmdW5jdGlvbih0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7dFs0XSgpfSksby5sZW5ndGg9MH19fWZ1bmN0aW9uIEModCl7dmFyIGk9dD90LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudC5idXM6ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHI9QignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtyZXR1cm4gdCYmdC5ldmVudC5vbigiZGVzdHJveSIsci5kZXN0cm95KSxTKHIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tidXM6aSxvbjpmdW5jdGlvbih0LG4pe3IuYmluZChpLHgodCkuam9pbigiICIpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbih0KXtuLmFwcGx5KG4sbSh0LmRldGFpbCk/dC5kZXRhaWw6W10pfSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSxvZmY6ZyhyLnVuYmluZCxpKSxlbWl0OmZ1bmN0aW9uKHQpe3IuZGlzcGF0Y2goJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ksdCxwKGFyZ3VtZW50cywxKSl9fSl9dmFyIFc9e2xpc3RUYWc6InVsIixzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUYWc6ImxpIn0saz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxuKXt0aGlzLnN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXM9e30sdGhpcy5pZD10LHRoaXMub3B0aW9ucz1ufXZhciBuPXQucHJvdG90eXBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztyZXR1cm4gbi5ydWxlPWZ1bmN0aW9uKHQsbixpLHIpe3I9dGhpcy5zdHlsZXNbcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9cnx8ImRlZmF1bHQiXT10aGlzLnN0eWxlc1tyXXx8e307KHJbdF09clt0XXx8e30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKVtuXT1pfSxuLmJ1aWxkPWZ1bmN0aW9uKCl7dmFyIGk9dGhpcyxuPSIiO3JldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdGhpcy5zdHlsZXMuZGVmYXVsdCYmKG4rPXRoaXMuYnVpbGRTZWxlY3RvcnModCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuc3R5bGVzLmRlZmF1bHQpKSxPYmplY3Qua2V5cyh0aGlzLnN0eWxlcykuc28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnQoZnVuY3Rpb24odCxuKXtyZXR1cm4ibWluIj09PWkub3B0aW9ucy5tZWRpYVF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyeT8rdC0rbjorbi0rdH0pLmZvckVhY2goZnVuY3Rpb24odCl7ImRlZmF1bHQiIScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PXQmJihuPShuKz0iQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogIit0KyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHgpIHsiKStpLmJ1aWxkU2VsZWN0b3JzKGkuc3R5bGVzW3RdKSsifSIpfSksbn0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uYnVpbGRTZWxlY3RvcnM9ZnVuY3Rpb24odCl7dmFyIGk9dGhpcyxyPSIiO3JldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gUCh0LGZ1bmN0aW9uKHQsbil7bj0oIiMiK2kuaWQrIiAiK24pLnRyaW0oKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncis9bisiIHsiLFAodCxmdW5jdGlvbih0LG4peyF0JiYwIT09dHx8KHIrPW4rIjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIrdCsiOyIpfSkscis9In0ifSkscn0sdH0oKTtyZXR1cm4gZnVuY3Rpb24oKXtmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdCh0LG4saSxyKXt0aGlzLnNsaWRlcz1bXSx0aGlzLm9wdGlvbnM9e30nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLHRoaXMuYnJlYWtwb2ludHM9W10sWCh2LHJ8fHt9KSxYKFgodGhpcy5vcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx2KSxufHx7fSksdGhpcy5jb250ZW50cz10LHRoaXMuY29uZmlnPVMoe30sVyxpfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8e30pLHRoaXMuaWQ9dGhpcy5jb25maWcuaWR8fCIiKyhyPSJzcGxpZGUiKSsoKHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPXpbcl09KHpbcl18fDApKzEpPDEwPyIwIityOiIiK3IpLHRoaXMuU3R5bGU9bmV3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBrKHRoaXMuaWQsdGhpcy5vcHRpb25zKSx0aGlzLkRpcmVjdGlvbj1lKDAsMCx0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zKSxPKHRoaXMuY29udGVudHMubGVuZ3RoLCJQcm92aWRlIGF0IGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFzdCAxIGNvbnRlbnQuIiksdGhpcy5pbml0KCl9dC5jbGVhbj1mdW5jdGlvbih0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl7dmFyIG4saT1DKHQpLm9uLHI9dC5yb290LHQ9KHQ9ciwobj0iLiIrZik/cCh0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVyeVNlbGVjdG9yQWxsKG4pKTpbXSk7aSgibW91bnRlZCIsZnVuY3Rpb24oKXsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaihNKHIsInN0eWxlIikpfSksaih0KX07dmFyIG49dC5wcm90b3R5cGU7cmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBuLmluaXQ9ZnVuY3Rpb24oKXt0aGlzLnBhcnNlQnJlYWtwb2ludHMoKSx0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbml0U2xpZGVzKCksdGhpcy5yZWdpc3RlclJvb3RTdHlsZXMoKSx0aGlzLnJlZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RlclRyYWNrU3R5bGVzKCksdGhpcy5yZWdpc3RlclNsaWRlU3R5bGVzKCksdGhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MucmVnaXN0ZXJMaXN0U3R5bGVzKCl9LG4uaW5pdFNsaWRlcz1mdW5jdGlvbigpeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgaT10aGlzO0EodGhpcy5zbGlkZXMsdGhpcy5jb250ZW50cy5tYXAoZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKHQsbil7KHQ9eSh0KT97aHRtbDp0fTp0KS5zdHlsZXM9dC5zdHlsZXN8fHt9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx0LmF0dHJzPXQuYXR0cnN8fHt9LGkuY292ZXIodCk7bj1pLm9wdGlvbnMuY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMuc2xpZGUrIiAiKygwPT09bj8iaXMtYWN0aXZlIjoiIik7cmV0dXJuIFModC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMse2NsYXNzOihuKyIgIisodC5hdHRycy5jbGFzc3x8IiIpKS50cmltKCksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlOmkuYnVpbGRTdHlsZXModC5zdHlsZXMpfSksdH0pKSx0aGlzLmlzTG9vcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSYmdGhpcy5nZW5lcmF0ZUNsb25lcyh0aGlzLnNsaWRlcyl9LG4ucmVnaXN0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUm9vdFN0eWxlcz1mdW5jdGlvbigpe3ZhciBpPXRoaXM7dGhpcy5icmVha3BvaW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj10WzBdLHQ9dFsxXTtpLlN0eWxlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydWxlKCIgIiwibWF4LXdpZHRoIixHKHQud2lkdGgpLG4pfSl9LG4ucmVnaXN0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVHJhY2tTdHlsZXM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9dGhpcy5TdHlsZSxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0iLiIrYTt0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduPXRbMF0sdD10WzFdO3IucnVsZShlLGkucmVzb2x2ZSgicGFkZGluZ0xlZnQiKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaS5jc3NQYWRkaW5nKHQsITEpLG4pLHIucnVsZShlLGkucmVzb2x2ZSgicGFkZGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dSaWdodCIpLGkuY3NzUGFkZGluZyh0LCEwKSxuKSxyLnJ1bGUoZSwiaGVpZ2h0IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsaS5jc3NUcmFja0hlaWdodCh0KSxuKX0pfSxuLnJlZ2lzdGVyTGlzdFN0eWxlcz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9dGhpcy5TdHlsZSxlPSIuIitjO3RoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JyZWFrcG9pbnRzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dFswXSx0PXRbMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddO3IucnVsZShlLCJ0cmFuc2Zvcm0iLGkuYnVpbGRUcmFuc2xhdGUodCksbiksaS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3NzU2xpZGVIZWlnaHQodCl8fHIucnVsZShlLCJhc3BlY3QtcmF0aW8iLGkuY3NzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FzcGVjdFJhdGlvKHQpLG4pfSl9LG4ucmVnaXN0ZXJTbGlkZVN0eWxlcz1mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24oKXt2YXIgaT10aGlzLHI9dGhpcy5TdHlsZSxlPSIuIitoO3RoaXMuYnJlYWsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9pbnRzLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dFswXSx0PXRbMV07ci5yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsZShlLCJ3aWR0aCIsaS5jc3NTbGlkZVdpZHRoKHQpLG4pLHIucnVsZShlLCJoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZ2h0IixpLmNzc1NsaWRlSGVpZ2h0KHQpfHwiMTAwJSIsbiksci5ydWxlKGUsaS4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVzb2x2ZSgibWFyZ2luUmlnaHQiKSxHKHQuZ2FwKXx8IjBweCIsbiksci5ydWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhlKyIgPiBpbWciLCJkaXNwbGF5Iix0LmNvdmVyPyJub25lIjoiaW5saW5lIixuKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KX0sbi5idWlsZFRyYW5zbGF0ZT1mdW5jdGlvbih0KXt2YXIgbj10aGlzLkRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24saT1uLnJlc29sdmUsbj1uLm9yaWVudCxyPVtdO3JldHVybiByLnB1c2goJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXMuY3NzT2Zmc2V0Q2xvbmVzKHQpKSxyLnB1c2godGhpcy5jc3NPZmZzZXRHYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcyh0KSksdGhpcy5pc0NlbnRlcih0KSYmKHIucHVzaCh0aGlzLmJ1aWxkQ3NzVmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKG4oLTUwKSwiJSIpKSxyLnB1c2guYXBwbHkocix0aGlzLmNzc09mZnNldENlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXIodCkpKSxyLmZpbHRlcihCb29sZWFuKS5tYXAoZnVuY3Rpb24odCl7cmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiJ0cmFuc2xhdGUiK2koIlgiKSsiKCIrdCsiKSJ9KS5qb2luKCIgIil9LG4uY3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc09mZnNldENsb25lcz1mdW5jdGlvbih0KXt2YXIgbixpPXRoaXMuRGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxyPWkucmVzb2x2ZSxpPWkub3JpZW50LGU9dGhpcy5nZXRDbG9uZUNvdW50KCk7cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiB0aGlzLmlzRml4ZWRXaWR0aCh0KT8obj0ocj10aGlzLnBhcnNlQ3NzVmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKHRbcigiZml4ZWRXaWR0aCIpXSkpLnZhbHVlLHI9ci51bml0LHRoaXMuYnVpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xkQ3NzVmFsdWUoaShuKSplLHIpKTppKDEwMCplL3QucGVyUGFnZSkrIiUifSxuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NPZmZzZXRDZW50ZXI9ZnVuY3Rpb24odCl7dmFyIG4saSxyPXRoaXMuRGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbixlPXIucmVzb2x2ZSxyPXIub3JpZW50O3JldHVybiB0aGlzLmlzRml4ZWRXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkdGgodCk/KG49KGU9dGhpcy5wYXJzZUNzc1ZhbHVlKHRbZSgiZml4ZWRXaWR0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKV0pKS52YWx1ZSxlPWUudW5pdCxbdGhpcy5idWlsZENzc1ZhbHVlKHIobi8yKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSldKToobj10LnBlclBhZ2UsZT10LmdhcCwodD1bXSkucHVzaChyKDUwL24pKyIlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIpLGUmJihpPShlPXRoaXMucGFyc2VDc3NWYWx1ZShlKSkudmFsdWUsZT1lLnVuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LHQucHVzaCh0aGlzLmJ1aWxkQ3NzVmFsdWUocigoaS9uLWkpLzIpLGUpKSksdCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSxuLmNzc09mZnNldEdhcHM9ZnVuY3Rpb24odCl7dmFyIG4saSxyLGU9dGhpcy5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0Q2xvbmVDb3VudCgpO3JldHVybiBlJiZ0LmdhcD8obj10aGlzLkRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicub3JpZW50LGk9KHI9dGhpcy5wYXJzZUNzc1ZhbHVlKHQuZ2FwKSkudmFsdWUscj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInci51bml0LHRoaXMuaXNGaXhlZFdpZHRoKHQpP3RoaXMuYnVpbGRDc3NWYWx1ZShuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhpKmUpLHIpOih0PXQucGVyUGFnZSx0aGlzLmJ1aWxkQ3NzVmFsdWUobihlL3QqaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLHIpKSk6IiJ9LG4ucmVzb2x2ZT1mdW5jdGlvbih0KXtyZXR1cm4gVCh0aGlzLkQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXJlY3Rpb24ucmVzb2x2ZSh0KSl9LG4uY3NzUGFkZGluZz1mdW5jdGlvbih0LG4pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t0PXQucGFkZGluZyxuPXRoaXMuRGlyZWN0aW9uLnJlc29sdmUobj8icmlnaHQiOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicibGVmdCIsITApO3JldHVybiB0JiZHKHRbbl18fChiKHQpPzA6dCkpfHwiMHB4In0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4uY3NzVHJhY2tIZWlnaHQ9ZnVuY3Rpb24odCl7dmFyIG49IiI7cmV0dXJuIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmlzVmVydGljYWwoKSYmKE8obj10aGlzLmNzc0hlaWdodCh0KSxcJyJoZWlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiBpcyBtaXNzaW5nLlwnKSxuPSJjYWxjKCIrbisiIC0gIit0aGlzLmNzc1BhZGRpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnKHQsITEpKyIgLSAiK3RoaXMuY3NzUGFkZGluZyh0LCEwKSsiKSIpLG59LG4uY3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc0hlaWdodD1mdW5jdGlvbih0KXtyZXR1cm4gRyh0LmhlaWdodCl9LG4uY3NzU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlV2lkdGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQuYXV0b1dpZHRoPyIiOkcodC5maScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ZWRXaWR0aCl8fCh0aGlzLmlzVmVydGljYWwoKT8iIjp0aGlzLmNzc1NsaWRlU2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInemUodCkpfSxuLmNzc1NsaWRlSGVpZ2h0PWZ1bmN0aW9uKHQpe3JldHVybiBHKHQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpeGVkSGVpZ2h0KXx8KHRoaXMuaXNWZXJ0aWNhbCgpP3QuYXV0b0hlaWdodD8iIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6dGhpcy5jc3NTbGlkZVNpemUodCk6dGhpcy5jc3NIZWlnaHQodCkpfSxuLmNzc1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVNpemU9ZnVuY3Rpb24odCl7dmFyIG49Ryh0LmdhcCk7cmV0dXJuImNhbGMoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygxMDAlIisobiYmIiArICIrbikrIikvIisodC5wZXJQYWdlfHwxKSsobiYmIiAtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciK24pKyIpIn0sbi5jc3NBc3BlY3RSYXRpbz1mdW5jdGlvbih0KXt0PXQuaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndFJhdGlvO3JldHVybiB0PyIiKzEvdDoiIn0sbi5idWlsZENzc1ZhbHVlPWZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbih0LG4pe3JldHVybiIiK3Qrbn0sbi5wYXJzZUNzc1ZhbHVlPWZ1bmN0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KXtyZXR1cm4geSh0KT97dmFsdWU6cGFyc2VGbG9hdCh0KXx8MCx1bml0OnQucmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxhY2UoL1xcZCooXFwuXFxkKik/LywiIil8fCJweCJ9Ont2YWx1ZTp0LHVuaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiJweCJ9fSxuLnBhcnNlQnJlYWtwb2ludHM9ZnVuY3Rpb24oKXt2YXIgaT10aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyx0PXRoaXMub3B0aW9ucy5icmVha3BvaW50czt0aGlzLmJyZWFrcG9pbnRzLnB1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKFsiZGVmYXVsdCIsdGhpcy5vcHRpb25zXSksdCYmUCh0LGZ1bmN0aW9uKHQsbiknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne2kuYnJlYWtwb2ludHMucHVzaChbbixYKFgoe30saS5vcHRpb25zKSx0KV0pfSl9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxuLmlzRml4ZWRXaWR0aD1mdW5jdGlvbih0KXtyZXR1cm4hIXRbdGhpcy5EaXJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLnJlc29sdmUoImZpeGVkV2lkdGgiKV19LG4uaXNMb29wPWZ1bmN0aW9uKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne3JldHVybiJsb29wIj09PXRoaXMub3B0aW9ucy50eXBlfSxuLmlzQ2VudGVyPWZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbih0KXtpZigiY2VudGVyIj09PXQuZm9jdXMpe2lmKHRoaXMuaXNMb29wKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpKXJldHVybiEwO2lmKCJzbGlkZSI9PT10aGlzLm9wdGlvbnMudHlwZSlyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIXRoaXMub3B0aW9ucy50cmltU3BhY2V9cmV0dXJuITF9LG4uaXNWZXJ0aWNhbD1mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLmRpcmVjdGlvbj09PXV9LG4uYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1aWxkQ2xhc3Nlcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucztyZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW3IscisiLS0iK3QudHlwZSxyKyItLSIrdC5kaXJlY3Rpb24sdC5kcmFnJiZyKyItJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy1kcmFnZ2FibGUiLHQuaXNOYXZpZ2F0aW9uJiZyKyItLW5hdiIsZCwhdGhpcy5jbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZmlnLmhpZGRlbiYmImlzLXJlbmRlcmVkIl0uZmlsdGVyKEJvb2xlYW4pLmpvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCIgIil9LG4uYnVpbGRBdHRycz1mdW5jdGlvbih0KXt2YXIgaT0iIjtyZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1AodCxmdW5jdGlvbih0LG4pe2krPXQ/IiAiK1QobikrXCc9IlwnK3QrXCciXCc6IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicifSksaS50cmltKCl9LG4uYnVpbGRTdHlsZXM9ZnVuY3Rpb24odCl7dmFyIGk9IiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO3JldHVybiBQKHQsZnVuY3Rpb24odCxuKXtpKz0iICIrVChuKSsiOiIrdCsiOyJ9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksaS50cmltKCl9LG4ucmVuZGVyU2xpZGVzPWZ1bmN0aW9uKCl7dmFyIG49dGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsaT10aGlzLmNvbmZpZy5zbGlkZVRhZztyZXR1cm4gdGhpcy5zbGlkZXMubWFwKGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbih0KXtyZXR1cm4iPCIraSsiICIrbi5idWlsZEF0dHJzKHQuYXR0cnMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysiPiIrKHQuaHRtbHx8IiIpKyI8LyIraSsiPiJ9KS5qb2luKCIiKX0sbi5jb3ZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9ZnVuY3Rpb24odCl7dmFyIG49dC5zdHlsZXMsdD10Lmh0bWwsdD12b2lkIDA9PT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndD8iIjp0O3RoaXMub3B0aW9ucy5jb3ZlciYmIXRoaXMub3B0aW9ucy5sYXp5TG9hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QmJih0PXQubWF0Y2goLzxpbWcuKj9zcmNcXHMqPVxccyooW1wnIl0pKC4rPylcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxLio/Pi8pKSYmdFsyXSYmKG4uYmFja2dyb3VuZD0iY2VudGVyL2NvdmVyIG5vLXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXBlYXQgdXJsKFwnIit0WzJdKyJcJykiKX0sbi5nZW5lcmF0ZUNsb25lcz1mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24ocil7Zm9yKHZhciBlPXRoaXMub3B0aW9ucy5jbGFzc2VzLHM9dGhpcy5nZXRDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVDb3VudCgpLHQ9ci5zbGljZSgpO3QubGVuZ3RoPHM7KUEodCx0KTtBKHQucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWNlKC1zKS5yZXZlcnNlKCksdC5zbGljZSgwLHMpKS5mb3JFYWNoKGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbih0LG4pe3ZhciBpPVMoe30sdC5hdHRycyx7Y2xhc3M6dC5hdHRycy5jbGFzcysiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiK2UuY2xvbmV9KSx0PVMoe30sdCx7YXR0cnM6aX0pO248cz9yLnVuc2hpZnQodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOnIucHVzaCh0KX0pfSxuLmdldENsb25lQ291bnQ9ZnVuY3Rpb24oKXt2YXIgdDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRoaXMuaXNMb29wKCk/KHQ9dGhpcy5vcHRpb25zKS5jbG9uZXN8fFIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KHZvaWQgMCx0aGlzLmJyZWFrcG9pbnRzLm1hcChmdW5jdGlvbih0KXtyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIHRbMV0ucGVyUGFnZX0pKSooKHQuZmxpY2tNYXhQYWdlc3x8MSkrMSk6MH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLG4ucmVuZGVyQXJyb3dzPWZ1bmN0aW9uKCl7dmFyIHQ9IiI7cmV0dXJuKHQrPVwnPCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaXYgY2xhc3M9IlwnK3RoaXMub3B0aW9ucy5jbGFzc2VzLmFycm93cytcJyI+JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1wnKSt0aGlzLnJlbmRlckFycm93KCEwKSt0aGlzLnJlbmRlckFycm93KCExKSsiPC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGl2PiJ9LG4ucmVuZGVyQXJyb3c9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucyxpPW4uY2xhc3NlcyxuPW4uaTE4bixpPXtjbGFzczppLmFycm93KyIgIisodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/aS5wcmV2OmkubmV4dCksdHlwZToiYnV0dG9uIixhcmlhTGFiZWw6dD9uLnByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOm4ubmV4dH07cmV0dXJuIjxidXR0b24gIit0aGlzLmJ1aWxkQXR0cnMoaSkrXCc+PCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCAwIDQwIDQwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiPjxwYXRoIGQ9IlwnKyh0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zLmFycm93UGF0aHx8Im0xNS41IDAuOTMyLTQuMyA0LjM4IDE0LjUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDE0LjYtMTQuNSAxNC41IDQuMyA0LjQgMTQuNi0xNC42IDQuNC00LjMtNC40LTQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzQtMTQuNi0xNC42eiIpK1wnIiAvPjwvc3ZnPjwvYnV0dG9uPlwnfSxuLmh0bWw9ZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uKCl7dmFyIHQ9dGhpcy5jb25maWcsbj10LnJvb3RDbGFzcyxpPXQubGlzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUYWcscj10LmFycm93cyxlPXQuYmVmb3JlVHJhY2sscz10LmFmdGVyVHJhY2ssdT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5zbGlkZXIsbz10LmJlZm9yZVNsaWRlcix0PXQuYWZ0ZXJTbGlkZXIsYT0iIjtyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGE9KGErPVwnPGRpdiBpZD0iXCcrdGhpcy5pZCtcJyIgY2xhc3M9IlwnKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmJ1aWxkQ2xhc3NlcygpKyIgIisobnx8IiIpK1wnIj5cJykrKCI8c3R5bGU+IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrdGhpcy5TdHlsZS5idWlsZCgpKyI8L3N0eWxlPiIpLHUmJihhPWErKG98fCIiKSsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXCc8ZGl2IGNsYXNzPSJzcGxpZGVfX3NsaWRlciI+XCcpLGErPWV8fCIiLHImJihhKz0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5yZW5kZXJBcnJvd3MoKSksYT0oYT0oYT1hK1wnPGRpdiBjbGFzcz0ic3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZV9fdHJhY2siPlwnKygiPCIraStcJyBjbGFzcz0ic3BsaWRlX19saXN0Ij5cJycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpKSt0aGlzLnJlbmRlclNsaWRlcygpKygiPC8iK2krIj4iKSkrIjwvZGl2PiIrKHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfHwiIiksdSYmKGE9YSsiPC9kaXY+IisodHx8IiIpKSxhKz0iPC9kaXY+In0sdH0oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyl9LCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmInVuZGVmaW5lZCIhPXR5cGVvZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbW9kdWxlP21vZHVsZS5leHBvcnRzPW4oKToiZnVuY3Rpb24iPT10eXBlb2YgZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUobik6KHQ9InVuZGVmaW5lZCIhPXR5cGVvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLlNwbGlkZVJlbmRlcmVyPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zcGxpZGUtcmVuZGVyZXIubWluLmpzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5tYXBcbicsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUtcmVuZGVyZXIubWluLmpzJywKICAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJywKICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciBjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIGZpeGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNTc2cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7IHBhZGRpbmc6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgV2lkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2NyZWVucyAqLyBAbWVkaWEgb25seSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NyZWVuIGFuZCAobWluLXdpZHRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IDk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fSwKIDM1OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYid7InZlcnNpb24iOjMsImZpbGUiOiJzcGxpZGUubWluLmpzIiwic291cmNlcyI6WyIuLi8uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4vc3JjL2pzL2NvbnN0YW50cy9tZWRpYS50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInL3N0YXRlcy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheS9lbXB0eS9lbXB0eS50cycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCIuLi8uLi9zcmMvanMvdXRpbHMvYXJyYXlMaWtlL3NsaWNlL3NsaWNlLnRzIiwiLi4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uL3NyYy9qcy91dGlscy9mdW5jdGlvbi9hcHBseS9hcHBseS50cyIsIi4uLy4uL3NyYy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInanMvdXRpbHMvZnVuY3Rpb24vbm9vcC9ub29wLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzLycKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbi9uZXh0VGljay9uZXh0VGljay50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24vcmFmL3JhZi50cyIsIi4uLy4uL3NyYy9qcy91dGlscy90eXBlL3R5cGUudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L3RvQXJyYXkvdG9BcnJheS50cyIsIi4uLycKICAgICAgICAgICAgICAgICAgICAgICAgYicuLi9zcmMvanMvdXRpbHMvYXJyYXkvZm9yRWFjaC9mb3JFYWNoLnRzIiwiLi4vLi4vc3JjJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9qcy91dGlscy9hcnJheS9pbmNsdWRlcy9pbmNsdWRlcy50cyIsIi4uLy4uL3NyYy9qcy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXRpbHMvYXJyYXkvcHVzaC9wdXNoLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS90bycKICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2xlQ2xhc3MvdG9nZ2xlQ2xhc3MudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2FkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RDbGFzcy9hZGRDbGFzcy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vYXBwZW5kL2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlbmQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2JlZm9yZS9iZWZvcmUudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9tYXRjaGVzL21hdGNoZXMudHMiLCIuLi8uLi9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JjL2pzL3V0aWxzL2RvbS9jaGlsZHJlbi9jaGlsZHJlbi50cyIsIi4uLy4uL3NyYy9qcy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXRpbHMvZG9tL2NoaWxkL2NoaWxkLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicvb3duS2V5cy9vd25LZXlzLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL29iamVjdC9mb3JPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3duL2Zvck93bi50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9vYmplY3QvYXNzaWduL2Fzc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ24udHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvb2JqZWN0L21lcmdlL21lcmdlLnRzIiwiLicKICAgICAgICAgICAgICAgICAgICAgICAgYicuLy4uL3NyYy9qcy91dGlscy9vYmplY3Qvb21pdC9vbWl0LnRzIiwiLi4vLi4vc3JjL2pzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy91dGlscy9kb20vcmVtb3ZlQXR0cmlidXRlL3JlbW92ZUF0dHJpYnV0ZS50cyIsIi4uLy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi9zcmMvanMvdXRpbHMvZG9tL3NldEF0dHJpYnV0ZS9zZXRBdHRyaWJ1dGUudHMiLCIuLicKICAgICAgICAgICAgICAgICAgICAgICAgYicvLi4vc3JjL2pzL3V0aWxzL2RvbS9jcmVhdGUvY3JlYXRlLnRzIiwiLi4vLi4vc3JjL2pzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy91dGlscy9kb20vc3R5bGUvc3R5bGUudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNwbGF5L2Rpc3BsYXkudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2ZvY3VzL2ZvYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1cy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vZ2V0QXR0cmlidXRlL2dldEF0dHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dGUudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2hhc0NsYXNzL2hhc0NsYXNzLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vcmVjdC9yZWN0LnRzIiwiLi4vLi4vc3JjLycKICAgICAgICAgICAgICAgICAgICAgICAgYidqcy91dGlscy9kb20vcmVtb3ZlL3JlbW92ZS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tL3BhcnNlSHRtbC9wYXJzZUh0bWwudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2ZW50L3ByZXZlbnQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3F1ZXJ5L3F1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyeS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vcXVlcnlBbGwvcXVlcnlBbGwudHMiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9yZW1vdmVDbGFzcy9yZW1vdmVDbGFzcy50cyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3RpbWVPZi90aW1lT2YudHMiLCIuLi8uLi9zcicKICAgICAgICAgICAgICAgICAgICAgICAgYidjL2pzL3V0aWxzL2RvbS91bml0L3VuaXQudHMiLCIuLi8uLi9zcmMvanMvY29uc3RhbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9wcm9qZWN0LnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2Vycm9yL2Fzc2VydC9hc3NlcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvbWF0aC9tYXRoLnRzIiwiLi4vLi4vcycKICAgICAgICAgICAgICAgICAgICAgICAgYidyYy9qcy91dGlscy9tYXRoL2FwcHJveGltYXRlbHlFcXVhbC9hcHByb3hpbWF0ZWx5RXF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvYmV0d2Vlbi9iZXR3ZWVuLnRzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIi4uLy4uL3NyYy9qcy91dGlscy9tYXRoL2NsYW1wL2NsYW1wLnRzIiwiLi4vLi4vc3JjLycKICAgICAgICAgICAgICAgICAgICAgICAgYidqcy91dGlscy9tYXRoL3NpZ24vc2lnbi50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9zdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nL2Zvcm1hdC9mb3JtYXQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvc3RyaW5nL3BhZC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFkLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL3N0cmluZy91bmlxdWVJZC91bmlxdWVJZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicudHMiLCIuLi8uLi9zcmMvanMvY29uc3RydWN0b3JzL0V2ZW50QmluZGVyL0V2ZW50QmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlci50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvZXZlbnRzLnRzIiwiLi4vLi4vc3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInYy9qcy9jb25zdHJ1Y3RvcnMvRXZlbnRJbnRlcmZhY2UvRXZlbnRJbnRlcmZhY2UudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLi4vLi4vc3JjL2pzL2NvbnN0cnVjdG9ycy9SZXF1ZXN0SW50ZXJ2YWwvUmVxdWVzdEluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcnZhbC50cyIsIi4uLy4uL3NyYy9qcy9jb25zdHJ1Y3RvcnMvU3RhdGUvU3RhdGUudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9hcnJvd3MudHMiLCIuLi8uLi9zcmMvanMvYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0YW50cy9kaXJlY3Rpb25zLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvRGlyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbi9EaXJlY3Rpb24udHMiLCIuLi8uLi9zcmMvanMvY29uc3RhbnRzL2F0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVzLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9jbGFzc2VzLnRzIiwiLi4vLi4vcycKICAgICAgICAgICAgICAgICAgICAgICAgYidyYy9qcy9jb21wb25lbnRzL0RyYWcvY29uc3RhbnRzLnRzIiwiLi4vLi4vc3JjL2pzL2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdGFudHMvdHlwZXMudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9TbGlkZXMvU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQXV0b3BsYXkvY29uc3RhbnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvbGlzdGVuZXItb3B0aW9ucy50cyIsIi4uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8uLi9zcmMvanMvdXRpbHMvZG9tL25vcm1hbGl6ZUtleS9ub3JtYWxpemVLZXkudHMiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvS2V5Ym9hcmQvS2V5Ym9hcmQudHMiLCIuLi8uLicKICAgICAgICAgICAgICAgICAgICAgICAgYicvc3JjL2pzL2NvbXBvbmVudHMvTGF6eUxvYWQvY29uc3RhbnRzLnRzIiwiLi4vLi4vc3JjJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9qcy9jb21wb25lbnRzL1N5bmMvU3luYy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy9NZWRpYS9NZWRpYS50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0VsZW1lbnRzLycKICAgICAgICAgICAgICAgICAgICAgICAgYidFbGVtZW50cy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vY2xvc2VzdC9jbG9zZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL1NsaWRlcy9TbGlkZXMudHMiLCIuLi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi4vc3JjL2pzL2NvbXBvbmVudHMvTGF5b3V0L0xheW91dC50cyIsIi4uLy4uL3NyYy9qcycKICAgICAgICAgICAgICAgICAgICAgICAgYicvY29uc3RydWN0b3JzL1Rocm90dGxlL1Rocm90dGxlLnRzIiwiLi4vLi4vc3JjL2pzL2NvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzL0Nsb25lcy9DbG9uZXMudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZS9Nb3ZlLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQ29udHJvbGxlci9DbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudHJvbGxlci50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0Fycm93cy9BcnJvd3MuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQXJyb3dzL3BhdGgudHMiLCIuLi8uLi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3JjL2pzL2NvbXBvbmVudHMvQXV0b3BsYXkvQXV0b3BsYXkudHMiLCIuLi8uLi9zcmMvaicKICAgICAgICAgICAgICAgICAgICAgICAgYidzL2NvbXBvbmVudHMvQ292ZXIvQ292ZXIudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MvU2Nyb2xsL1Njcm9sbC50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL1Njcm9sbC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3RhbnRzLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvRHJhZy9EcmFnLnRzIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0xhenlMb2FkL0xhenlMb2FkLnRzIiwiLi4vJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4uL3NyYy9qcy9jb21wb25lbnRzL1BhZ2luYXRpb24vUGFnaW5hdGlvbi50cyIsIi4uLy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLi9zcmMvanMvY29tcG9uZW50cy9XaGVlbC9XaGVlbC50cyIsIi4uLy4uL3NyYy9qcy9jbycKICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50cy9MaXZlL0xpdmUudHMiLCIuLi8uLi9zcmMvanMvY29uc3RhbnRzL2RlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x0cy50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvaTE4bi50cyIsIi4uLy4uL3NyYy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInanMvdHJhbnNpdGlvbnMvRmFkZS9GYWRlLnRzIiwiLi4vLi4vc3JjL2pzL3RyYW5zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy9TbGlkZS9TbGlkZS50cyIsIi4uLy4uL3NyYy9qcy9jb3JlL1NwbGlkZS9TcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxcclxcbiAqIE1hdGNoZXMgd2hlbiB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcnMgcmVxdWVzdCByZWR1Y2luZyBub24tZXNzZW50aWFsIGFuaW1hdGlvbnMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqXFxyXFxuICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VuLVVTL2RvY3MvV2ViL0NTUy9AbWVkaWEvcHJlZmVycy1yZWR1Y2VkLW1vdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RJT04gPSBcJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpXCc7IiwiLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFNwbGlkZSBoYXMgYmVlbiBqdXN0IGNyZWF0ZWQuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBDUkVBVEVEID0gMTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogU3BsaWRlIGhhcyBtb3VudGVkIGNvbXBvbmVudHMuXFxyXFxuICovXFxyXFxuZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBjb25zdCBNT1VOVEVEID0gMjtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzIHJlYWR5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBJRExFID0gMztcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuLyoqXFxyXFxuICogU3BsaWRlIGlzIG1vdmluZy5cXHJcXG4gKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXhwb3J0IGNvbnN0IE1PVklORyA9IDQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZSBpcyBtb3ZpbmcuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFNDUk9MTElOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0cgPSA1O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSB1c2VyIGlzIGRyYWdnaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgc2xpZGVyLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBEUkFHR0lORyA9IDYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFNwbGlkZSBoYXMgYmVlbiBkZXN0cm95ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBERVNUUk9ZRUQgPSA3O1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBUaGUgY29sbGVjdGlvbiBvZiBhbGwgc3RhdGVzLlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RBVEVTID0ge1xcclxcbiAgQ1JFQVRFRCxcXHJcXG4gIE1PVU5URUQsXFxyXFxuICBJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RMRSxcXHJcXG4gIE1PVklORyxcXHJcXG4gIFNDUk9MTElORyxcXHJcXG4gIERSQUdHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lORyxcXHJcXG4gIERFU1RST1lFRCxcXHJcXG59O1xcclxcbiIsIi8qKlxcclxcbiAqIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXB0aWVzIHRoZSBhcnJheS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEEgYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5IHRvIGVtcHR5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBlbXB0eSggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5OiBhbnlbXSApOiB2b2lkIHtcXHJcXG4gIGFycmF5Lmxlbmd0aCA9IDA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgc2xpY2UgbWV0aG9kIGZvciBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYictbGlrZSBvYmplY3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gYXJyYXlMaWtlIC0gQW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5LWxpa2Ugb2JqZWN0LlxcclxcbiAqIEBwYXJhbSBzdGFydCAgICAgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uYWwuIEEgc3RhcnQgaW5kZXguXFxyXFxuICogQHBhcmFtIGVuZCAgICAgICAtIE9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25hbC4gQSBlbmQgaW5kZXguXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFycmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSB3aXRoIHNsaWNlZCBlbGVtZW50cy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNsaWNlPFQ+KCBhcnJheUxpa2U6IEFycmF5TGlrZTxUPiwgc3RhcnQ/OiBudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbmQ/OiBudW1iZXIgKTogVFtdIHtcXHJcXG4gIHJldHVybiBBcnJheS5wcm90b3R5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BlLnNsaWNlLmNhbGwoIGFycmF5TGlrZSwgc3RhcnQsIGVuZCApO1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaW1wb3J0IHsgQW55RnVuY3Rpb24sIFNoaWZ0TiB9IGZyb20gXCcuLi8uLi8uLi90eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXMnO1xcclxcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi4vLi4vYXJyYXlMaWtlJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHByb3ZpZGVkIGFyZ3VtZW50cyBhcmUgYm91bmQuXFxyXFxuICogYHRoaXNgIHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbWV0ZXIgd2lsbCBiZSBhbHdheXMgbnVsbC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuYyAtIEEgZnVuY3Rpb24uXFxyXFxuICogQHBhcmFtIGFyZ3MgLSBBcmd1bWVudHMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGJpbmQgdG8gdGhlIGZ1bmN0aW9uLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiB3aGVyZSBhcmd1bWVudHMgYXJlIGJvdW5kLlxcclxcbiAqL1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgZnVuY3Rpb24gYXBwbHk8RiBleHRlbmRzIEFueUZ1bmN0aW9uLCBBIGV4dGVuZHMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FueVtdID0gYW55W10+KFxcclxcbiAgZnVuYzogRixcXHJcXG4gIC4uLmFyZ3M6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBXFxyXFxuKTogKCAuLi5hcmdzOiBTaGlmdE48UGFyYW1ldGVyczxGPiwgQVtcXCJsZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ3RoXFwiXT4gKSA9PiBSZXR1cm5UeXBlPEY+O1xcclxcblxcclxcbi8qKlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDcmVhdGUgYSBmdW5jdGlvbiB3aGVyZSBwcm92aWRlZCBhcmd1bWVudHMgYXJlIGJvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZC5cXHJcXG4gKiBgdGhpc2AgcGFyYW1ldGVyIHdpbGwgYmUgYWx3YXlzIG51bGwuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHBhcmFtIGZ1bmMgLSBBIGZ1bmN0aW9uLlxcclxcbiAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5leHBvcnQgZnVuY3Rpb24gYXBwbHkoIGZ1bmM6IEFueUZ1bmN0aW9uICk6IGFueSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbXMsIHByZWZlci1zcHJlYWRcXHJcXG4gIHJldHVybiBmdW5jLmJpbmQoIG51bGwsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAuLi5zbGljZSggYXJndW1lbnRzLCAxICkgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIE5vIG9wZXJhdGlvbi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3Qgbm9vcCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSAoKTogdm9pZCA9PiB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eS1mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24sIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJpbXBvcnQgeyBBbnlGdW5jdGlvbiB9IGZyb20gXCcuLi8uLi8uLi90eXBlc1wnOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJbnZva2VzIHRoZSBjYWxsYmFjayBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gdGhlIG5leHQgdGljay5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBuZXh0VCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpY2s6ICggY2FsbGJhY2s6IEFueUZ1bmN0aW9uICkgPT4gUmV0dXJuVHlwZTx0eXBlb2YgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NldFRpbWVvdXQ+ID0gc2V0VGltZW91dDtcXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWFzIG9mIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKClgLlxcclxcbiAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5leHBvcnQgZnVuY3Rpb24gcmFmKCBmdW5jOiBGcmFtZVJlcXVlc3RDYWxsYmFjayApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyIHtcXHJcXG4gIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jICk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFueUZ1bmN0aW9uIH0gZnJvbSBcJy4uJwogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYXBwbHkgfSBmcm9tICcuLi9mdW5jdGlvIgogICAgICAgICAgICAgICAgICAgICAgICBiIm4nO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBhbGlhcyBvZiB0aGUgdHkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGUgY2hlY2sgZnVuY3Rpb24uXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdHlwZSAgICAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBIHR5cGUuXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzcGVjaWZpZWQgdHlwZS5cXHJcXG4gKi9cXHJcXG5mdW5jdGlvbiB0eXBlT2YoIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlOiBzdHJpbmcsIHN1YmplY3Q6IHVua25vd24gKTogYm9vbGVhbiB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSB0eXBlO1xcclxcbn1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGFuIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Qgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IGlzIGFuIG9iamVjdCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCggc3ViamVjdDogdW5rbm93biApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogc3ViamVjdCBpcyBvYmplY3Qge1xcclxcbiAgcmV0dXJuICEgaXNOdWxsKCBzdWJqJwogICAgICAgICAgICAgICAgICAgICAgICBiImVjdCApICYmIHR5cGVPZiggJ29iamVjdCcsIHN1YmplY3QgKTtcXHJcXG59XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhbiBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0IGlzIGFuIGFycmF5LCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGNvbnN0IGlzQXJyYXk6IDxUPiggc3ViamVjdDogdW5rbm93biAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA9PiBzdWJqZWN0IGlzIFRbXSA9IEFycmF5LmlzQXJyYXk7XFxyXFxuXFxyXFxuLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhIGZ1bmN0aW9uIG9yIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgYSBmdW5jdGlvbiwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCBjb25zdCBpc0Z1bmN0aW9uID0gPCggc3ViamVjdDogdW5rbm93biApID0+IHN1YicKICAgICAgICAgICAgICAgICAgICAgICAgYiJqZWN0IGlzIEFueUZ1bmN0aW9uPmFwcGx5KCB0eXBlT2YsICdmdW5jdGlvbicgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBhIHN0cmluZyBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2AgaWYgdGhlIHN1YmplY3QgaXMgYSBzdHJpbmcsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgaXNTdHJpbmcgPSA8KCBzdWJqZWN0OiB1bicKICAgICAgICAgICAgICAgICAgICAgICAgYiJrbm93biApID0+IHN1YmplY3QgaXMgc3RyaW5nPmFwcGx5KCB0eXBlT2YsICdzdHJpbmcnIgogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QgaXMgYHVuZGVmaW5lZGAgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGB1bmRlZmluZWRgLCBvciBvdGhlcndpc2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2BmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IGlzVW5kZWZpbmVkID0gPCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqZWN0IGlzIHVuZGVmaW5lZD5hcHBseSggdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ5cGVPZiwgJ3VuZGVmaW5lZCcgKTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGVjayIKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGBudWxsYCBvciBub3QuXFxyXFxuICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgYG51bGxgLCBvciBvdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2woIHN1YmplY3Q6IHVua25vd24gKTogc3ViamVjdCBpcyBudWxsIHtcXHJcXG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gc3ViamVjdCA9PT0gbnVsbDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY2Ugb3Igbm90LlxcclxcbiAqIFRoaXMgbWV0aG9kIHRha2VzIGludG8gYWNjb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgd2hpY2ggYHdpbmRvd2AgdGhlIG5vZGUgYmVsb25ncyB0by5cXHJcXG4gKlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdGFuY2UsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaXNIVE1MRWxlbWVudCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZWN0IGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBIVE1MRWxlbWVudCB7XFxyXFxuICB0cnkge1xcclxcbiAgICByZXR1cm4gc3ViamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5zdGFuY2VvZiAoICggc3ViamVjdCBhcyBOb2RlICkub3duZXJEb2N1bWVudC5kZWZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VsdFZpZXcgfHwgd2luZG93ICkuSFRNTEVsZW1lbnQ7XFxyXFxuICB9IGNhdGNoICggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKSB7XFxyXFxuICAgIHJldHVybiBmYWxzZTtcXHJcXG4gIH1cXHJcXG59IiwiaW1wJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBQdXNoIHRoZSBwcm92aWRlZCB2YWx1ZSB0byBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgdGhlIHZhbHVlIGlzIG5vdCBhbiBhcnJheS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20gdmFsdWUgLSBBIHZhbHVlIHRvIHB1c2guXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBhcnJheSBjb250YWluaW5nIHRoZSB2YWx1ZSwgb3IgdGhlIHZhbHVlIGl0c2VsZiBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaXQgaXMgYWxyZWFkeSBhbiBhcnJheS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHRvQXJyYXk8VD4oIHZhbHVlOiBUIHwgVFtdICk6IFRbXSB7XFxyXFxuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGlzQXJyYXkoIHZhbHVlICkgPyB2YWx1ZSA6IFsgdmFsdWUgXTtcXHJcXG59XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiIsImltcG9ydCB7IHRvQXJyYXkgfSBmcm9tIFwnLi4vdG9BcnJheS90b0FycmF5XCcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBleHRlbmRlZCBgQXJyYXkjZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2hgIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgdmFsdWUgYXMgYW4gYXJnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlcyAgIC0gQSB2YWx1ZSBvciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWVzIHRvIGl0ZXJhdGUgb3Zlci5cXHJcXG4gKiBAcGFyYW0gaXRlcmF0ZWUgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoPFQ+KCB2YWx1ZXM6IFQgfCBUW10sIGl0ZXJhdGVlOiAoIHZhbHVlOiBULCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg6IG51bWJlciwgYXJyYXk6IFRbXSApID0+IHZvaWQgKTogdm9pZCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdG9BcnJheSggdmFsdWVzICkuZm9yRWFjaCggaXRlcmF0ZWUgKTtcXHJcXG59XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiIsIi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgYXJyYXkgaW5jbHVkZXMgdGhlIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSBvciBub3QuXFxyXFxuICogYEFycmF5I2luY2x1ZGVzYCBpcyBub3Qgc3VwcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRlZCBieSBJRS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEFuIGFycmF5LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGFycmF5IGluY2x1ZGVzIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgdmFsdWUsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gaW5jbHVkZXM8VD4oIGFycmF5OiBUW10sIHZhbHVlOiBUICk6IGJvb2xlYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHtcXHJcXG4gIHJldHVybiBhcnJheS5pbmRleE9mKCB2YWx1ZSApID4gLTE7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG4iLCJpbXBvcnQgeyB0b0FycmF5IH0gZnJvbSBcJy4uL3RvQXJyYXkvdG9BcicKICAgICAgICAgICAgICAgICAgICAgICAgYiJyYXknO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEV4dGVuZGVkIGBBcnJheSNwIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzaCgpYCB0aGF0IGFjY2VwdHMgYW4gaXRlbSBvciBhbiBhcnJheSB3aXRoIGl0ZW1zLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEFuIGFycmF5IHRvIHB1c2ggaXRlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAqIEBwYXJhbSBpdGVtcyAtIEFuIGl0ZW0gb3IgaXRlbXMgdG8gcHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgcHJvdmlkZWQgYXJyYXkgaXRzZWxmLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcHVzaDxUPiggYXJyYXk6IFRbXSwgaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1zOiBUIHwgVFtdICk6IFRbXSB7XFxyXFxuICBhcnJheS5wdXNoKCAuLi50b0FycmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSggaXRlbXMgKSApO1xcclxcbiAgcmV0dXJuIGFycmF5O1xcclxcbn1cXHJcXG4iLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gJy4uLy4uL2FycmF5JztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVG9nZ2xlcyB0aGUgcHJvdmlkZWQgY2xhc3Mgb3IgY2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgYnkgZm9sbG93aW5nIHRoZSBgYWRkYCBib29sZWFuLlxcclxcbiAqXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBlbG0gICAgIC0gQW4gZWxlbWVudCB3aG9zZSBjbGFzc2VzIGFyZSB0b2dnbGVkLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gY2xhc3NlcyAtIEEgY2xhc3Mgb3IgY2xhc3MgbmFtZXMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEBwYXJhbSBhZGQgICAgIC0gV2hldGhlciB0byBhZGQgb3IgcmVtb3ZlIGEgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVDbGFzcyggZWxtOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRWxlbWVudCwgY2xhc3Nlczogc3RyaW5nIHwgc3RyaW5nW10sIGFkZDogYm9vbGVhbiApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZCB7XFxyXFxuICBpZiAoIGVsbSApIHtcXHJcXG4gICAgZm9yRWFjaCggY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMsIG5hbWUgPT4ge1xcclxcbiAgICAgIGlmICggbmFtZSApIHtcXHJcXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJlbG0uY2xhc3NMaXN0WyBhZGQgPyAnYWRkJyA6ICdyZW1vdmUnIF0oIG5hbWUgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgfVxcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxufVxcclxcbiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gXCcuLi8uLi90eXBlL3R5cGVcJztcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJuaW1wb3J0IHsgdG9nZ2xlQ2xhc3MgfSBmcm9tICcuLi90b2dnbGVDbGFzcy90b2dnbGVDIgogICAgICAgICAgICAgICAgICAgICAgICBiImxhc3MnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEFkZHMgY2xhc3NlcyB0byAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIGVsZW1lbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtICAgICAtIEFuIGVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50IHRvIGFkZCBjbGFzc2VzIHRvLlxcclxcbiAqIEBwYXJhbSBjbGFzc2VzIC0gQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMgdG8gYWRkLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBhZGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoIGVsbTogRWxlbWVudCwgY2xhc3Nlczogc3RyaW5nIHwgc3RyaW5nW10gKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgdG9nZ2xlQ2xhc3MoIGVsbSwgaXNTdHJpbmcoIGNsYXNzZXMgKSA/IGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGFzc2VzLnNwbGl0KCAnICcgKSA6IGNsYXNzZXMsIHRydWUgKTtcXHJcXG59XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiIsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tIFwnLi4vLi4vYXJyYXlcJztcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQXBwZW5kcyBjaGlsZHJlbiB0byB0aGUgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVudCBlbGVtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHBhcmVudCAgIC0gQSBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50IGVsZW1lbnQuXFxyXFxuICogQHBhcmFtIGNoaWxkcmVuIC0gQSBjaGlsZCBvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2hpbGRyZW4gdG8gYXBwZW5kIHRvIHRoZSBwYXJlbnQuXFxyXFxuICovXFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCBmdW5jdGlvbiBhcHBlbmQoIHBhcmVudDogRWxlbWVudCwgY2hpbGRyZW46IE5vZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgTm9kZVtdICk6IHZvaWQge1xcclxcbiAgZm9yRWFjaCggY2hpbGRyZW4sIHBhcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuYXBwZW5kQ2hpbGQuYmluZCggcGFyZW50ICkgKTtcXHJcXG59XFxyXFxuIiwiaW1wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJydCB7IGZvckVhY2ggfSBmcm9tICcuLi8uLi9hcnJheSc7XFxyXFxuXFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbi8qKlxcclxcbiAqIEluc2VydHMgYSBub2RlIG9yIG5vZGVzIGJlZm9yZSB0aGUgcycKICAgICAgICAgICAgICAgICAgICAgICAgYidwZWNpZmllZCByZWZlcmVuY2Ugbm9kZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBub2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgLSBBIG5vZGUgb3Igbm9kZXMgdG8gaW5zZXJ0LlxcclxcbiAqIEBwYXJhbSByZWYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgLSBBIHJlZmVyZW5jZSBub2RlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVmb3JlKCBub2RlczogTm9kZSB8IE5vZGVbXSwgcmVmOiBOb2RlIHwgbnVsbCApOiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgYidpZCB7XFxyXFxuICBmb3JFYWNoKCBub2Rlcywgbm9kZSA9PiB7XFxyXFxuICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJlbnQgPSAoIHJlZiB8fCBub2RlICkucGFyZW50Tm9kZTtcXHJcXG5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICggcGFyZW50ICkge1xcclxcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUoIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2RlLCByZWYgKTtcXHJcXG4gICAgfVxcclxcbiAgfSApO1xcclxcbn1cXHJcXG4iLCJpbScKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJy4uLy4uL3R5cGUvdHlwZSc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZWxlbWVudCBjYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGJlIHNlbGVjdGVkIGJ5IHRoZSBwcm92aWRlZCBzZWxlY3RvciBvciBub3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHBhcmFtIGVsbSAgICAgIC0gQW4gZWxlbWVudCB0byBjaGVjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICogQHBhcmFtIHNlbGVjdG9yIC0gQSBzZWxlY3RvciB0byB0ZXN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzZWxlY3RvciBtYXRjaGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgZWxlbWVudCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCBmdW5jdGlvbiBtYXRjaGVzKCBlbG06IEVsZW1lbnQgfCBFdmVudFRhcmdldCwgcycKICAgICAgICAgICAgICAgICAgICAgICAgYidlbGVjdG9yOiBzdHJpbmcgKTogYm9vbGVhbiB7XFxyXFxuICByZXR1cm4gaXNIVE1MRScKICAgICAgICAgICAgICAgICAgICAgICAgYiJsZW1lbnQoIGVsbSApICYmICggZWxtWyAnbXNNYXRjaGVzU2VsZWN0b3InIF0gfHwgZWxtIgogICAgICAgICAgICAgICAgICAgICAgICBiJy5tYXRjaGVzICkuY2FsbCggZWxtLCBzZWxlY3RvciApO1xcclxcbn1cXHJcXG4iLCJpbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3J0IHsgc2xpY2UgfSBmcm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIieyBtYXRjaGVzIH0gZnJvbSAnLi4vbWF0Y2hlcy9tYXRjaGVzJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogRmluZHMgY2hpbGRyZW4gdGhhdCBoYXMgdGhlIHNwZWNpZmllJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgdGFnIG9yIGNsYXNzIG5hbWUuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gcGFyZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gQSBwYXJlbnQgZWxlbWVudC5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uYWwuIEEgc2VsZWN0b3IgdG8gZmlsdGVyIGNoaWxkcmVuLlxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBmaWx0ZXJlZCBjaGlsZHJlbi5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkcmVuPEUgZXh0ZW5kcyBIVE1MRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQ+KCBwYXJlbnQ6IEhUTUxFbGVtZW50LCBzZWxlY3Rvcj86IHN0cmluZyApOiBFW10gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50ID8gc2xpY2UoIHBhcmVudC5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGRyZW4gKSBhcyBFW10gOiBbXTtcXHJcXG4gIHJldHVybiBzZWxlY3RvciA/IGNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZHJlbi5maWx0ZXIoIGNoaWxkID0+IG1hdGNoZXMoIGNoaWxkLCBzZWxlY3RvciApICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDogY2hpbGRyZW47XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGNoaWxkcmVuIH0gZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uL2NoaWxkcmVuL2NoaWxkcmVuJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyogUmV0dXJucyBhIGNoaWxkIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRhZyBvciBjbGFzcyBuYW1lLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHBhcmVudCAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYictIEEgcGFyZW50IGVsZW1lbnQuXFxyXFxuICogQHBhcmFtIHNlbGVjdG9yIC0gQSBzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IgdG8gZmlsdGVyIGNoaWxkcmVuLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtYXRjaGVkIGNoaWxkIGVsZW1lbnQgaWYgYXZhaWxhYmxlLCBvciBvdGhlcndpc2UgYHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlZmluZWRgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBjaGlsZDxFIGV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRzIEhUTUxFbGVtZW50PiggcGFyZW50OiBIVE1MRWxlbWVudCwgc2VsZWN0b3I/OiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaW5nICk6IEUgfCB1bmRlZmluZWQge1xcclxcbiAgcmV0dXJuIHNlbGVjdG9yID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoaWxkcmVuPEU+KCBwYXJlbnQsIHNlbGVjdG9yIClbIDAgXSA6IHBhcmVudC5maXJzdEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50Q2hpbGQgYXMgRTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogQW4gYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWFzIG9mIGBPYmplY3Qua2V5cygpYFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBvdycKICAgICAgICAgICAgICAgICAgICAgICAgYiduS2V5cyA9IE9iamVjdC5rZXlzOyIsImltcG9ydCB7IG93bktleXMgfSBmcm9tIFwnLi4vbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJ3bktleXMvb3duS2V5cyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogSXRlcmF0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIG92ZXIgdGhlIHByb3ZpZGVkIG9iamVjdCBieSBvd24gZW51bWVyYWJsZSBrZXlzIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRoIGNhbGxpbmcgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAqXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBvYmplY3QgICAtIEFuIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBpdGVyYXRlZSAtIEFuIGl0ZXJhdGVlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2B2YWx1ZWAgYW5kIGBrZXlgIGFzIGFyZ3VtZW50cy5cXHJcXG4gKiBAcGFyYW0gcmlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0ICAgIC0gSWYgYHRydWVgLCB0aGUgbWV0aG9kIGl0ZXJhdGVzIG92ZXIgdGhlIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgZnJvbSB0aGUgZW5kIGxpa2UgYGZvckVhY2hSaWdodCgpYC5cXHJcXG4gKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIEEgcHJvdmlkZWQgb2JqZWN0IGl0c2VsZi5cXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGZ1bmN0aW9uIGZvck93bjxUIGV4dGVuZHMgb2JqZWN0PihcXHJcXG4gIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Q6IFQsXFxyXFxuICBpdGVyYXRlZTogKCB2YWx1ZTogVFsga2V5b2YgVCBdLCBrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V5OiBzdHJpbmcgKSA9PiBib29sZWFuIHwgdm9pZCxcXHJcXG4gIHJpZ2h0PzogYm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW5cXHJcXG4pOiBUIHtcXHJcXG4gIGlmICggb2JqZWN0ICkge1xcclxcbiAgICAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByaWdodCA/IG93bktleXMoIG9iamVjdCApLnJldmVyc2UoKSA6IG93bktleXMoIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiY3QgKSApLmZvckVhY2goIGtleSA9PiB7XFxyXFxuICAgICAga2V5ICE9PSAnX19wcm8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidG9fXycgJiYgaXRlcmF0ZWUoIG9iamVjdFsga2V5IF0sIGtleSApO1xcclxcbiAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIG9iamVjdDtcXHJcXG59JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiIsImltcG9ydCB7IENhc3QsIEhlYWQsIFB1c2gsIFJlc29sdmUsIFNoaWZ0JwogICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBzbGljZSB9IGZyIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCB7IGZvck93biB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICBiIicuLi9mb3JPd24vZm9yT3duJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBBc3MiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWducyBVIHRvIFQuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVBhcmFtIFQgLSBBbiBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHRvIGFzc2lnbiB0by5cXHJcXG4gKiBAdHlwZVBhcmFtIFUgLSBBbiBvYmplY3QgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvIGFzc2lnbi5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXNzaWduZWQgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCB0eXBlIEFzc2lnbjxULCBVPiA9IE9taXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPFQsIGtleW9mIFU+ICYgVTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZWN1cnNpdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHkgYXNzaWducyBVW10gdG8gVC5cXHJcXG4gKlxcclxcbiAqIEB0eXBlUGFyYW0gVCAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbiBvYmplY3QgdG8gYXNzaWduIHRvLlxcclxcbiAqIEB0eXBlUGFyYW0gVSAtIEEgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cGxlIGNvbnRhaW5zIG9iamVjdHMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpZ25lZCBvYmplY3QgdHlwZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBBc3NpZ24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQ8VCBleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdFtdLCBOIGV4dGVuZHMgbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciwgQyBleHRlbmRzIGFueVtdID0gW10+ID0ge1xcclxcbiAgMDogVCxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxOiBBc3NpZ25lZDxBc3NpZ248VCwgSGVhZDxVPj4sIFNoaWZ0PFU+LCBOLCBQdXNoPEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiPj4sXFxyXFxufVsgQ1snbGVuZ3RoJ10gZXh0ZW5kcyBOID8gMCA6IDEgXSBleHRlbmQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBpbmZlciBBID8gQ2FzdDxBLCBhbnk+IDogbmV2ZXI7XFxyXFxuXFxyXFxuZXhwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBhc3NpZ248VCBleHRlbmRzIG9iamVjdD4oIG9iamVjdDogVCApOiBUO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQgZXh0ZW5kcyBvYmplY3QsIFUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4dGVuZHMgb2JqZWN0W10+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgLi4uc291cicKICAgICAgICAgICAgICAgICAgICAgICAgYiJjZXM6IFVcXHJcXG4pOiBSZXNvbHZlPEFzc2lnbmVkPFQsIFUsIFVbJ2xlbmd0aCddPiIKICAgICAgICAgICAgICAgICAgICAgICAgYic+XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQXNzaWducyBhbGwgb3duIGVudW1lcmFibCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHByb3BlcnRpZXMgb2YgYWxsIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBwcm92aWRlZCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG9iamVjdCAtIEFuIG9iamVjdCB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzaWduIHByb3BlcnRpZXMgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QgYXNzaWduZWQgcHJvcGVydGllcyBvZiB0aGUgc291cmNlcyB0by5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUIGV4dGVuZHMgb2JqZWN0PiggbycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdDogVCApOiBhbnkge1xcclxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZSBwcmVmZXItcmVzdC1wYXJhbXMsIHByZWZlci1zcHJlYWRcXHJcXG4gIHNsaWNlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYXJndW1lbnRzLCAxICkuZm9yRWFjaCggc291cmNlID0+IHtcXHJcXG4gICAgZm9yTycKICAgICAgICAgICAgICAgICAgICAgICAgYid3biggc291cmNlLCAoIHZhbHVlLCBrZXkgKSA9PiB7XFxyXFxuICAgICAgb2JqZWN0WycKICAgICAgICAgICAgICAgICAgICAgICAgYicga2V5IF0gPSBzb3VyY2VbIGtleSBdO1xcclxcbiAgICB9ICk7XFxyXFxuICB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgcmV0dXJuIG9iamVjdDtcXHJcXG59XFxyXFxuIiwiaW1wb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IENhc3QsIEhlYWQsIFB1c2gsIFJlc29sdmUsIFNoaWZ0IH0gZnJvbSAnLi4vLi4vLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiInR5cGVzJztcXHJcXG5pbXBvcnQgeyBzbGljZSB9IGZyb20gJy4uLy4uL2FycmF5TGlrIgogICAgICAgICAgICAgICAgICAgICAgICBiImUnO1xcclxcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0IH0gZnJvbSAnLi4vLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiInR5cGUvdHlwZSc7XFxyXFxuaW1wb3J0IHsgZm9yT3duIH0gZnJvbSAnLi4vZm9yT3duIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9mb3JPd24nO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIE1lcmdlcyBVIHRvIFQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHR5cGVQYXJhbSBUIC0gQW4gb2JqZWN0IHRvIG1lcmdlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidVIGludG8uXFxyXFxuICogQHR5cGVQYXJhbSBVIC0gQW4gb2JqZWN0IHRvIG1lcmdlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwcm9wZXJ0aWVzIGZyb20uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgbWVyZ2VkIG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QgdHlwZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBNZXJnZTxUIGV4dGVuZHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdD4gPSBPbWl0PFQsIGtleW9mIFU+ICYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIFsgSyBpbiAoIGtleW9mIFQgJiBrZXlvZiBVICkgXTogVVsgSyBdIGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIG9iamVjdFxcclxcbiAgICA/IFVbIEsgXSBleHRlbmRzIGFueVtdXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgID8gVVsgSyBdXFxyXFxuICAgICAgOiBUWyBLIF0gZXh0ZW5kcyBvYmplY3RcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgICA/IE1lcmdlPFRbIEsgXSwgVVsgSyBdPiBleHRlbmRzIGluZmVyIEEgPyBSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzb2x2ZTxDYXN0PEEsIG9iamVjdD4+IDogbmV2ZXJcXHJcXG4gICAgICAgIDogVVsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0sgXVxcclxcbiAgICA6IFVbIEsgXTtcXHJcXG59ICYgT21pdDxVLCBrZXlvZiBUPicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmVjdXJzaXZlbHkgbWVyZ2VzIFVbXSB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYicgVC5cXHJcXG4gKlxcclxcbiAqIEB0eXBlUGFyYW0gVCAtIEFuIG9iamVjdCB0byBhc3NpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2duIHRvLlxcclxcbiAqIEB0eXBlUGFyYW0gVSAtIEEgdHVwbGUgY29udGFpbnMgb2JqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdHMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFzc2lnbmVkIG9iamVjdCB0eXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBNZXJnZWQ8VCBleHRlbmRzIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIFUgZXh0ZW5kcyBvYmplY3RbXSwgTiBleHRlbmRzIG51bWJlciwgQyBleHRlbmRzIGFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lbXSA9IFtdPiA9IHtcXHJcXG4gIDA6IFQsXFxyXFxuICAxOiBNZXJnZWQ8TWVyZ2U8VCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEhlYWQ8VT4+LCBTaGlmdDxVPiwgTiwgUHVzaDxDPj4sXFxyXFxufVsgQ1snbGVuZ3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaCddIGV4dGVuZHMgTiA/IDAgOiAxIF0gZXh0ZW5kcyBpbmZlciBBID8gQ2FzdDxBLCBhbiIKICAgICAgICAgICAgICAgICAgICAgICAgYid5PiA6IG5ldmVyO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZTxUIGV4dGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RzIG9iamVjdD4oIG9iamVjdDogVCApOiBUO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gbWVyZ2U8VCBleHRlbmRzIG9iamVjdCwgVSBleHRlbmRzIG9iamVjdFtdPihcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBvYmplY3Q6IFQsXFxyXFxuICAuLi5zb3VyY2VzOiBVXFxyXFxuKTogUmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiI8TWVyZ2VkPFQsIFUsIFVbJ2xlbmd0aCddPj5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiIKICAgICAgICAgICAgICAgICAgICAgICAgYicgUmVjdXJzaXZlbHkgbWVyZ2VzIHNvdXJjZSBwcm9wZXJ0aWVzIHRvIHRoZSBvYmplY3QuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEJlIGF3YXJlIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3QgbWVyZ2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5cy4gVGhleSBhcmUganVzdCBkdXBsaWNhdGVkIGJ5IGBzbGljZSgpYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gb2JqZWN0IHRvIG1lcmdlIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wZXJ0aWVzIHRvLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIG5ldyBvYmplY3Qgd2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGggbWVyZ2VkIHByb3BlcnRpZXMuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtZXJnZTxUIGV4dGVuZHMgb2JqZWN0Piggb2JqZWN0OiBUICk6IGFueSB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIHNsaWNlKCBhcmd1bWVudHMsIDEgKS5mb3JFYWNoKCBzb3VyY2UgPT4ge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgZm9yT3duKCBzb3VyY2UsICggdmFsdWUsIGtleSApID0+IHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKCBpc0FycmF5KCB2YWx1ZSApICkge1xcclxcbiAgICAgICAgb2JqZWN0WycKICAgICAgICAgICAgICAgICAgICAgICAgYicga2V5IF0gPSB2YWx1ZS5zbGljZSgpO1xcclxcbiAgICAgIH0gZWxzZSBpZiAoIGlzTycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCggdmFsdWUgKSApIHtcXHJcXG4gICAgICAgIG9iamVjdFsga2V5IF0gPSBtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2UoIHt9LCBpc09iamVjdCggb2JqZWN0WyBrZXkgXSApID8gb2JqZWN0WyBrZXkgXSA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7fSwgdmFsdWUgKTtcXHJcXG4gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFsga2V5IF0gPSB2YWx1ZTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9ICk7XFxyXFxuXFxyXFxuICByZXR1cm4gb2JqZWN0O1xcclxcbn1cXHJcXG4iLCJpbScKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgZm9yRWFjaCB9IGZyb20gJy4uLy4uL2FycmF5JztcXHJcXG5pbXBvcnQgeyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgb3duS2V5cyB9IGZyb20gJy4uL293bktleXMvb3duS2V5cyc7XFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbi8qKlxcclxcbiAqIERlbGV0ZXMgc3BlY2lmaWVkIG93biBrZXlzIGZyb20gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBvYmplY3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKiBAcGFyYW0ga2V5cyAgIC0gQSBrZXkgb3Iga2V5cyB0byBkZWxldGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBJZiBub3Qgc3BlY2lmaWVkLCBhbGwgb3duIGVudW1lcmFibGUga2V5cyB3aWxsIGJlIGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxldGVkLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBvbWl0KCBvYmplY3Q6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3QsIGtleXM/OiBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoKCBrZXlzIHx8IG93bktleXMoIG9iamVjdCApLCBrZXkgPT4ge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVsZXRlIG9iamVjdFsga2V5IF07XFxyXFxuICB9ICk7XFxyXFxufSIsImltcG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBmb3JFYWNoIH0gZnJvbSAnLi4vLi4vYXJyYXknO1xcclxcblxcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBSZW1vdmVzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZWxlbWVudC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtcyAgLSBBbiBlbGVtZW50IG9yIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gKiBAcGFyYW0gYXR0cnMgLSBBbiBhdHRyaWJ1dGUgb3IgYXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgdG8gcmVtb3ZlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlidXRlKCBlbG1zOiBFbGVtZW50IHwgRWxlbWVudFtdLCBhdHRyczogc3RyaW5nIHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZ1tdICk6IHZvaWQge1xcclxcbiAgZm9yRWFjaCggZWxtcywgZWxtID0+IHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGZvckVhY2goIGF0dHJzLCBhdHRyID0+IHtcXHJcXG4gICAgICBlbG0gJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVsbS5yZW1vdmVBdHRyaWJ1dGUoIGF0dHIgKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCcuLi8uLi9hcicKICAgICAgICAgICAgICAgICAgICAgICAgYiJyYXknO1xcclxcbmltcG9ydCB7IGZvck93biB9IGZyb20gJy4uLy4uL29iamVjdCc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IGlzTnVsbCwgaXNPYmplY3QgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5pbXBvcnQgeyByZW1vdmVBdHRyaWJ1dGUgfSBmcm9tICcuLi9yZW1vdmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiQXR0cmlidXRlL3JlbW92ZUF0dHJpYnV0ZSc7XFxyXFxuXFxyXFxuXFxyXFxuZXhwb3IiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoIGVsbXM6IEVsZW1lbnQgfCBFbGVtZW50W10sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuICk6IHZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkO1xcclxcbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoIGVsbXM6IEVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IHwgRWxlbWVudFtdLCBhdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB8IGJvb2xlYW4+ICk6IHZvaWQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogU2V0cyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cmlidXRlL2F0dHJpYnV0ZXMgdG8gdGhlIGVsZW1lbnQgb3IgZWxlbWVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIElmIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgYW4gZW1wdHkgc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdGhlIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQuXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIGVsbXMgIC0gQW4gZWxlbWVudCBvciBhbiBhcnJheSB3aXRoIGVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKiBAcGFyYW0gYXR0cnMgLSBBbiBhdHRyaWJ1dGUgbmFtZSBvZiBhbiBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IHdpdGggcGFpcnMgb2YgYSBuYW1lIGFuZCBhIHZhbHVlLlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIHNldC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHNldEF0dHJpYnV0ZShcXHJcXG4gIGVsbXM6IEVsZW1lbnQgfCBFbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFtdLFxcclxcbiAgYXR0cnM6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfCBudW1iZXIgfCBib29sZWFuPixcXHJcXG4gIHZhbHVlPzogc3RyaW5nIHwgbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB8IGJvb2xlYW5cXHJcXG4pOiB2b2lkIHtcXHJcXG4gIGlmICggaXNPYmplY3QoIGF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidycyApICkge1xcclxcbiAgICBmb3JPd24oIGF0dHJzLCAoIHZhbHVlLCBuYW1lICkgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+IHtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGVsbXMsIG5hbWUsIHZhbHVlICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB9ICk7XFxyXFxuICB9IGVsc2Uge1xcclxcbiAgICBmb3JFYWNoKCBlbG1zLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZWxtID0+IHtcXHJcXG4gICAgICBpc051bGwoIHZhbHVlICkgfHwgdmFsdWUgPT09ICciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJyA/IHJlbW92ZUF0dHJpYnV0ZSggZWxtLCBhdHRycyApIDogZWxtLnNldEF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGF0dHJzLCBTdHJpbmcoIHZhbHVlICkgKTtcXHJcXG4gICAgfSApO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG59XFxyXFxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tIFwnLi4vLi4vdHlwZS90JwogICAgICAgICAgICAgICAgICAgICAgICBiInlwZSc7XFxyXFxuaW1wb3J0IHsgYWRkQ2xhc3MgfSBmcm9tICcuLi9hZGRDbGFzcy9hIgogICAgICAgICAgICAgICAgICAgICAgICBiImRkQ2xhc3MnO1xcclxcbmltcG9ydCB7IGFwcGVuZCB9IGZyb20gJy4uL2FwcGVuZC9hIgogICAgICAgICAgICAgICAgICAgICAgICBiInBwZW5kJztcXHJcXG5pbXBvcnQgeyBzZXRBdHRyaWJ1dGUgfSBmcm9tICcuLi9zZXRBIgogICAgICAgICAgICAgICAgICAgICAgICBiInR0cmlidXRlL3NldEF0dHJpYnV0ZSc7XFxyXFxuXFxyXFxuXFxyXFxuZXhwb3J0IGZ1IgogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjcmVhdGU8SyBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFxcclxcbiAgdGFnOiBLLFxcclxcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnIHwgbnVtYmVyIHwgYm9vbGVhbj4gfCBzdHJpbmcsXFxyXFxuICBwYXJlbnQ/OiBIVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidNTEVsZW1lbnRcXHJcXG4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbIEsgXTtcXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZShcXHJcXG4gIHRhZzogc3RyaW5nLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGF0dHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgc3RyaW5nLFxcclxcbiAgcGFyZW50PzogSFRNTEVsZW1lbnRcXHJcXG4pOiBIVE1MRWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ3JlYXRlcyBhIEhUTUwgZWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdGFnICAgIC0gQSB0YWcgbmFtZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHBhcmFtIGF0dHJzICAtIE9wdGlvbmFsLiBBbiBvYmplY3Qgd2l0aCBhdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYididXRlcyB0byBhcHBseSB0aGUgY3JlYXRlZCBlbGVtZW50IHRvLCBvciBhIHN0cmluZyB3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aCBjbGFzc2VzLlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgLSBPcHRpb25hbC4gQSBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50IGVsZW1lbnQgd2hlcmUgdGhlIGNyZWF0ZWQgZWxlbWVudCBpcyBhcHBlbmRlZC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZTxLIGV4dGVuZHMga2V5bycKICAgICAgICAgICAgICAgICAgICAgICAgYidmIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4oXFxyXFxuICB0YWc6IEssXFxyXFxuICBhdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPiB8IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmcsXFxyXFxuICBwYXJlbnQ/OiBIVE1MRWxlbWVudFxcclxcbik6IEhUTUxFbGVtZW50VCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhZ05hbWVNYXBbIEsgXSB7XFxyXFxuICBjb25zdCBlbG0gPSBkb2N1bWVudC5jcmVhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlRWxlbWVudCggdGFnICk7XFxyXFxuXFxyXFxuICBpZiAoIGF0dHJzICkge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaXNTdHJpbmcoIGF0dHJzICkgPyBhZGRDbGFzcyggZWxtLCBhdHRycyApIDogc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZSggZWxtLCBhdHRycyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCAmJiBhcHBlbmQoIHBhcmVudCwgZWxtICk7XFxyXFxuXFxyXFxuICByZXR1cm4gZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgaXNOdWxsLCBpc1VuZGVmaW5lZCB9IGZybycKICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcclxcbmV4cG9ydCBmdW5jdCIKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gc3R5bGU8SyBleHRlbmRzIGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb24+KFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGVsbTogSFRNTEVsZW1lbnQsXFxyXFxuICBwcm9wOiBLLFxcclxcbik6IENTU1N0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZURlY2xhcmF0aW9uWyBLIF07XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHN0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShcXHJcXG4gIGVsbTogSFRNTEVsZW1lbnQsXFxyXFxuICBwcm9wOiBzdHJpbmcsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbik6IHN0cmluZztcXHJcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gc3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZWxtOiBIVE1MRWxlbWVudCxcXHJcXG4gIHByb3A6IHN0cmluZyxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyXFxyXFxuKTogdm9pZDtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogQXBwbGllcyBpbmxpbmUgc3R5bGVzIHRvIHRoZSBwcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlkZWQgZWxlbWVudCBieSBhbiBvYmplY3QgbGl0ZXJhbC5cXHJcXG4gKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZWxtICAgLSBBbiBlbGVtZW50IHRvIGFwcGx5IHN0eWxlcyB0by5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHBhcmFtIHByb3AgIC0gQW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBzdHlsZXMgb3IgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EgcHJvcGVydHkgbmFtZS5cXHJcXG4gKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHVlIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlKFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbTogSFRNTEVsZW1lbnQsXFxyXFxuICBwcm9wOiBzdHJpbmcsXFxyXFxuICB2YWx1ZT8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmcgfCBudW1iZXJcXHJcXG4pOiBzdHJpbmcgfCB2b2lkIHtcXHJcXG4gIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGlzVW5kZWZpbmVkKCB2YWx1ZSApICkge1xcclxcbiAgICByZXR1cm4gZ2V0Q29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGVkU3R5bGUoIGVsbSApWyBwcm9wIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKCAhIGlzTnVsbCggdmFsdWUgKSApIHtcXHJcXG4gICAgZWxtLnN0eWxlWyBwcm9wICcKICAgICAgICAgICAgICAgICAgICAgICAgYiddID0gYCR7IHZhbHVlIH1gO1xcclxcbiAgfVxcclxcbn1cXHJcXG4iLCJpbXBvcnQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgc3R5bGUgfSBmcm9tICcuLi9zdHlsZS9zdHlsZSc7XFxyXFxuXFxyXFxuXFxyXFxuLyIKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAqIFNldHMgdGhlIGBkaXNwbGF5YCBDU1MgdmFsdWUgdG8gdGhlIGVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGVsbSAgICAgLSBBbiBlbGVtZW50IHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXQgYSBuZXcgdmFsdWUgdG8uXFxyXFxuICogQHBhcmFtIGRpc3BsYXkgLSBBIG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3cgYGRpc3BsYXlgIHZhbHVlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxheSggZWxtOiBIVE1MRWxlbWVudCwgZGlzcGxheTogc3RyaW5nICk6IHZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiIntcXHJcXG4gIHN0eWxlKCBlbG0sICdkaXNwbGF5JywgZGlzcGxheSApO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuIiwiLyoqXFxyXFxuICogRm9jdXNlcyB0aGUgcHJvdmlkZWQgZWxlbWVudCB3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aG91dCBzY3JvbGxpbmcgdGhlIGFzY2VuZGFudCBlbGVtZW50LlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBwYXJhbSBlbG0gLSBBbiBlbGVtZW50IHRvIGZvY3VzLlxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgZnVuY3Rpb24gZm9jdXMoIGVsbTogSFRNTEVsZW1lbnQgKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIie1xcclxcbiAgZWxtWyAnc2V0QWN0aXZlJyBdICYmIGVsbVsgJ3NldEFjdGl2ZScgXSgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB8fCBlbG0uZm9jdXMoIHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9ICk7XFxyXFxufVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4iLCIvKipcXHJcXG4gKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBlbG0gIC0gQW4gZWxlbWVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHBhcmFtIGF0dHIgLSBBbiBhdHRyaWJ1dGUgdG8gZ2V0LlxcclxcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCBlbG06IEVsZW1lbnQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyOiBzdHJpbmcgKTogc3RyaW5nIHwgbnVsbCB7XFxyXFxuICByZXR1cm4gZWxtLicKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRBdHRyaWJ1dGUoIGF0dHIgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogQycKICAgICAgICAgICAgICAgICAgICAgICAgYidoZWNrcyBpZiB0aGUgZWxlbWVudCBjb250YWlucyB0aGUgc3BlY2lmaWVkIGNsYXNzIG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtICAgICAgIC0gQW4gZWxlbWVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gY2hlY2suXFxyXFxuICogQHBhcmFtIGNsYXNzTmFtZSAtIEEgY2xhc3MgbmFtZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhhdCBtYXkgYmUgY29udGFpbmVkIGJ5IHRoZSBlbGVtZW50LlxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBlbGVtZW50IGNvbnRhaW5zIHRoZSBjbGFzcywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGFzQ2xhc3MoIGVsbTogRWxlbWVudCwgY2xhc3NOYW1lOiBzdHJpbmcgKTogYm9vbGVhbicKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgcmV0dXJuIGVsbSAmJiBlbG0uY2xhc3NMaXN0LmNvbnRhaW5zKCBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NOYW1lICk7XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFJldHVybnMgYSBETycKICAgICAgICAgICAgICAgICAgICAgICAgYidNUmVjdCBvYmplY3Qgb2YgdGhlIHByb3ZpZGVkIGVsZW1lbnQuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIHRhcmdldCAtIEFuIGVsZW1lbnQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiByZWN0KCB0YXJnZXQ6IEVsZW1lbnQgKTogRE9NUmVjdCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcXHJcXG59XFxyXFxuIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsImltcG9ydCB7IGZvckVhY2ggfSBmcm9tIFwnLi4vLi4vYXJyYXlcJztcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmVtb3ZlcyB0aGUgcHJvdmlkZWQgbm9kZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnJvbSBpdHMgcGFyZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG5vZGVzIC0gQSBubycKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSBvciBub2RlcyB0byByZW1vdmUuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZW1vdmUoIG5vZGVzOiBOb2RlIHwgTm9kZVtdICk6IHZvaWQge1xcclxcbiAgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VhY2goIG5vZGVzLCBub2RlID0+IHtcXHJcXG4gICAgaWYgKCBub2RlICYmIG5vZGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmVudE5vZGUgKSB7XFxyXFxuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZCggbm9kZSApO1xcclxcbiAgICB9XFxyXFxuICB9ICk7XFxyXFxufVxcclxcbiIsImknCiAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBjaGlsZCB9IGZyb20gJy4uL2NoaWxkL2NoaWxkJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogUGFyc2VzIHRoZSBwcm92aWRlZCBIVE1MIHN0cmluZyBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gaHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWwgLSBBbiBIVE1MIHN0cmluZyB0byBwYXJzZS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIEFuIEVsZW1lbnQgb24gc3VjY2Vzcywgb3Igb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIdG1sPEUgZXh0ZW5kcyBIVE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEVsZW1lbnQ+KCBodG1sOiBzdHJpbmcgKTogRSB8IHVuZGVmaW5lZCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGNoaWxkPEU+KCBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCBodCcKICAgICAgICAgICAgICAgICAgICAgICAgYidtbCwgXCd0ZXh0L2h0bWxcJyApLmJvZHkgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIENhbGwgdGhlIGBwcmV2ZW50RGVmYXVsdCgpYCBvZiB0aGUgcHJvdmlkZWQgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGUgICAgICAgICAgICAgICAtIEFuIEV2ZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3QuXFxyXFxuICogQHBhcmFtIHN0b3BQcm9wYWdhdGlvbiAtIE9wdGlvbmFsLicKICAgICAgICAgICAgICAgICAgICAgICAgYicgV2hldGhlciB0byBzdG9wIHRoZSBldmVudCBwcm9wYWdhdGlvbiBvciBub3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBwcmV2ZW50KCBlOiBFdmVudCwgc3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidQcm9wYWdhdGlvbj86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICBlLnByZXZlbnREZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmYXVsdCgpO1xcclxcblxcclxcbiAgaWYgKCBzdG9wUHJvcGFnYXRpb24gKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcclxcbiAgICBlLnN0b3BJbW1lZGlhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlUHJvcGFnYXRpb24oKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JldHVybnMgYW4gZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHByb3ZpZGVkIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInci5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHNlbGVjdG9yIHRvIHF1ZXJ5LlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuZCBlbGVtZW50IG9yIGBudWxsYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHF1ZXJ5PEUgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4oIHBhcmVudDogRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfCBEb2N1bWVudCwgc2VsZWN0b3I6IHN0cmluZyApOiBFIHwgbnVsbCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHBhcmVudCAmJiBwYXJlbnQucXVlcnlTZWxlY3Rvciggc2VsZWN0b3IgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxufVxcclxcbiIsImltcG9ydCB7IHNsaWNlIH0gZnJvbSBcJy4uLy4uL2FycmF5TGlrJwogICAgICAgICAgICAgICAgICAgICAgICBiImUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFJldHVybnMgZWxlbWVudHMgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXQgbWF0Y2ggdGhlIHByb3ZpZGVkIHNlbGVjdG9yLlxcclxcbiAqXFxyXFxuICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQgdG8gc3RhcnQgc2VhcmNoaW5nIGZyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tLlxcclxcbiAqIEBwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IgdG8gcXVlcnkuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhcnJheSB3aXRoIG1hdGNoZWQgZWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUFsbDxFIGV4dGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzIEVsZW1lbnQgPSBFbGVtZW50PiggcGFyZW50OiBFbGVtZW50IHwgRG9jdW1lbnQsIHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3Rvcj86IHN0cmluZyApOiBFW10ge1xcclxcbiAgcmV0dXJuIHNlbGVjdG9yID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWNlPEU+KCBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCggc2VsZWN0b3IgKSApIDogW10nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyB0b2dnbGVDbGFzcyB9IGZyb20gXCcuLi90b2cnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZ2xlQ2xhc3MvdG9nZ2xlQ2xhc3MnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqICIKICAgICAgICAgICAgICAgICAgICAgICAgYidSZW1vdmVzIGNsYXNzZXMgZnJvbSB0aGUgZWxlbWVudC5cXHJcXG4gKlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gZWxtICAgICAtIEFuIGVsZW1lbnQgdG8gcmVtb3ZlIGNsYXNzZXMgZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICogQHBhcmFtIGNsYXNzZXMgLSBDbGFzc2VzIHRvIHJlbW92ZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKCBlbG06IEVsZW1lbnQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjbGFzc2VzOiBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkIHtcXHJcXG4gIHRvZ2dsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VDbGFzcyggZWxtLCBjbGFzc2VzLCBmYWxzZSApO1xcclxcbn1cXHJcXG4iLCIvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogRXh0cmFjdHMgdGhlIHRpbWVzdGFtcCBmcm9tIHRoZSBldmVudCBvYicKICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGUgLSBBbiBFdmVudCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB0aW1lT2YoIGU6IEV2ZW50ICk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIge1xcclxcbiAgcmV0dXJuIGUudGltZVN0YW1wO1xcclxcbn0iLCJpbXBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiInsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBBcHBlbmRzIGBweGAgdG8gdGhlIHByb3ZpZGVkIG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IuXFxyXFxuICogSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgc3RyaW5nLCBqdXN0IHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm5zIGl0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwZW5kIGBweGAgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgc3RyaW5nIHdpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoIHRoZSBDU1MgdW5pdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdW5pdCggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlOiBudW1iZXIgfCBzdHJpbmcgKTogc3RyaW5nIHtcXHJcXG4gIHJldHVybiBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NTdHJpbmcoIHZhbHVlICkgPyB2YWx1ZSA6IHZhbHVlID8gYCR7IHZhbHVlIH1weGAgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXCdcJztcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogVGhlIHByb2plY3QgY29kZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiInN0IFBST0pFQ1RfQ09ERSA9ICdzcGxpZGUnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgZGF0YSBhdHRyaWJ1dGUgcHJlZml4LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBEQVRBX0FUVFJJQlVURSA9IGBkYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0YS0keyBQUk9KRUNUX0NPREUgfWA7XFxyXFxuIiwiaW1wb3J0IHsgUFJPSkVDVF9DTycKICAgICAgICAgICAgICAgICAgICAgICAgYiJERSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9wcm9qZWN0JztcXHJcXG5cXHJcXG5cXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuLyoqXFxyXFxuICogVGhyb3dzIGFuIGVycm9yIGlmIHRoZSBwcm92aWRlZCBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGl0aW9uIGlzIGZhbHN5LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGNvbmRpdGlvbiAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidJZiBmYWxzeSwgYW4gZXJyb3IgaXMgdGhyb3duLlxcclxcbiAqIEBwYXJhbSBtZXNzYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnZSAgIC0gT3B0aW9uYWwuIEEgbWVzc2FnZSB0byBkaXNwbGF5LlxcclxcbiAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KCBjb25kaXRpb246IGFueSwgbWVzc2FnZT86IHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpbmcgKTogdm9pZCB7XFxyXFxuICBpZiAoICEgY29uZGl0aW9uICkge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhyb3cgbmV3IEVycm9yKCBgWyR7IFBST0pFQ1RfQ09ERSB9XSAkeyBtZXNzYWdlIHx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBcJ1wnIH1gICk7XFxyXFxuICB9XFxyXFxufVxcclxcbiIsImV4cG9ydCBjb25zdCB7IG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW4sIG1heCwgZmxvb3IsIGNlaWwsIGFicyB9ID0gTWF0aDtcXHJcXG4iLCJpbXBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHsgYWJzIH0gZnJvbSAnLi4vbWF0aC9tYXRoJztcXHJcXG5cXHJcXG5cXHJcXG4vKioiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBwcm92aWRlZCAyIG51bWJlcnMgYXJlIGFwcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3hpbWF0ZWx5IGVxdWFsIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSB4ICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIEEgbnVtYmVyLlxcclxcbiAqIEBwYXJhbSB5ICAgICAgIC0gQW5vdGhlciBudScKICAgICAgICAgICAgICAgICAgICAgICAgYidtYmVyIHRvIGNvbXBhcmUuXFxyXFxuICogQHBhcmFtIGVwc2lsb24gLSBBbiBhY2N1cicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY3kgdGhhdCBkZWZpbmVzIHRoZSBhcHByb3hpbWF0aW9uLlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ByZXR1cm4gYHRydWVgIGlmIDIgbnVtYmVycyBhcmUgY29uc2lkZXJlZCB0byBiZSBlcXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWwsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gYXBwcm94aW1hdGVseUVxdWFsKCB4OiBudW1iZXIsIHk6IG51bWJlciwgZXBzaWxvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ246IG51bWJlciApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiBhYnMoIHggLSB5ICkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzwgZXBzaWxvbjtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwnJwogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL21hdGgvbWF0aCc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiB0aGUgc3ViamVjdCBudW1iZXIgaXMgYmV0d2VlbiBgeGAgYW5kIGB5YC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gKiBAcGFyYW0gbnVtYmVyICAgIC0gQSBzdWJqZWN0IG51bWJlciB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2hlY2suXFxyXFxuICogQHBhcmFtIHggICAgICAgICAtIEEgbWluIG9yIG1heCBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyLlxcclxcbiAqIEBwYXJhbSB5ICAgICAgICAgLSBBIG1heCBvciBtaW4gbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci5cXHJcXG4gKiBAcGFyYW0gZXhjbHVzaXZlIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4Y2x1ZGUgYHhgIG9yIGB5YC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gYicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHdlZW4oIG51bWJlcjogbnVtYmVyLCB4OiBudW1iZXIsIHk6IG51bWJlciwgZXhjbHVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZT86IGJvb2xlYW4gKTogYm9vbGVhbiB7XFxyXFxuICBjb25zdCBtaW5pbXVtID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21pbiggeCwgeSApO1xcclxcbiAgY29uc3QgbWF4aW11bSA9IG1heCggeCwgeSApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHJldHVybiBleGNsdXNpdmVcXHJcXG4gICAgPyBtaW5pbXVtIDwgbnVtYmVyICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiBudW1iZXIgPCBtYXhpbXVtXFxyXFxuICAgIDogbWluaW11bSA8PSBudW1iZXIgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciA8PSBtYXhpbXVtO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBtYXgsIG1pbicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgfSBmcm9tICcuLi9tYXRoL21hdGgnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBDbGFtcHMgYSBudW1iZXIuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gbnVtYmVyIC0gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3ViamVjdCBudW1iZXIgdG8gY2hlY2suXFxyXFxuICogQHBhcmFtIHggICAgICAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1pbiBvciBtYXggbnVtYmVyLlxcclxcbiAqIEBwYXJhbSB5ICAgICAgLSBBIG1pbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgbWF4IG51bWJlci5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBjbGFtcGVkIG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wKCBudW1iZXI6IG51JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyICk6IG51bWJlciB7XFxyXFxuICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgbWluaW11bSA9IG1pbiggeCwgeSApO1xcclxcbiAgY29uc3QgbWF4aW11bSA9IG1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3goIHgsIHkgKTtcXHJcXG4gIHJldHVybiBtaW4oIG1heCggbWluaW11bSwgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApLCBtYXhpbXVtICk7XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFJldHVybnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzaWduIG9mIHRoZSBwcm92aWRlZCBudW1iZXIuXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIHggLSBBIG51bWJlci5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gYDFgIGZvciBwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidzaXRpdmUgbnVtYmVycywgYC0xYCBmb3IgbmVnYXRpdmUgbnVtYmVycywgb3IgYDBgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYDBgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBzaWduKCB4OiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInICk6IG51bWJlciB7XFxyXFxuICByZXR1cm4gKyggeCA+IDAgKSAtICsoIHggPCAwICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSBcJy4uLy4uL2FycmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIieSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRm9ybWF0cyBhIHN0cmluZy5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcGFyYW0gc3RyaW5nICAgICAgIC0gQSBzdHJpbmcgdG8gZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21hdC5cXHJcXG4gKiBAcGFyYW0gcmVwbGFjZW1lbnRzIC0gQSByZXBsYWNlbWVudCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgcmVwbGFjZW1lbnRzLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIGZvcm1hdHRlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXQoIHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHN0cmluZywgcmVwbGFjZW1lbnRzOiBzdHJpbmcgfCBudW1iZXIgfCBBcnJheTxzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nIHwgbnVtYmVyPiApOiBzdHJpbmcge1xcclxcbiAgZm9yRWFjaCggcmVwbGFjZW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cywgcmVwbGFjZW1lbnQgPT4ge1xcclxcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwJwogICAgICAgICAgICAgICAgICAgICAgICBiImxhY2UoICclcycsIGAkeyByZXBsYWNlbWVudCB9YCApO1xcclxcbiAgfSApO1xcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIHJldHVybiBzdHJpbmc7XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFBhZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRoZSBudW1iZXIgd2l0aCAwLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG51bWJlciAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBIG51bWJlciB0byBwYWQuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIHN0cmluZyAtIFAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRkZWQgbnVtYmVyLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBwYWQoIG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXI6IG51bWJlciApOiBzdHJpbmcge1xcclxcbiAgcmV0dXJuIG51bWJlciA8IDEwICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IGAwJHsgbnVtYmVyIH1gIDogYCR7IG51bWJlciB9YDtcXHJcXG59XFxyXFxuIiwiaW1wJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IHBhZCB9IGZyb20gJy4uL3BhZC9wYWQnO1xcclxcblxcclxcblxcclxcbi8qIgogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBTdG9yZXMgdW5pcXVlIElEcy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBpZHM6IFJlY29yZDxzdHJpbmcsIG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXI+ID0ge307XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmV0dXJucyBhIHNlcXVlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWFsIHVuaXF1ZSBJRCBhcyBcXCJ7IHByZWZpeCB9LXsgbnVtYmVyIH1cXCIuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHBhcmFtIHByZWZpeCAtIEEgcHJlZml4IGZvciB0aGUgSUQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB1bmlxdWVJZCggcHJlZml4OiBzdHJpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHN0cmluZyB7XFxyXFxuICByZXR1cm4gYCR7IHByZWZpeCB9JHsgcGFkKCAoIGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NbIHByZWZpeCBdID0gKCBpZHNbIHByZWZpeCBdIHx8IDAgKSArIDEgKSApIH1gOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQW55RnVuY3Rpb24gfSBmcm9tIFwnLi4vLi4vdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ5cGVzJztcXHJcXG5pbXBvcnQgeyBlbXB0eSwgZm9yRWFjaCB9IGZyb20gJy4uLy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ1dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIGFuIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudFRhcmdldCBvciBhbiBhcnJheSB3aXRoIEV2ZW50VGFyZ2V0IG9iamVjdHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyXFxudHlwZSBFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUYXJnZXRzID0gRXZlbnRUYXJnZXQgfCBFdmVudFRhcmdldFtdO1xcclxcblxcclxcbi8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRCaW5kZXIgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW50ZXJmYWNlIEV2ZW50QmluZGVyT2JqZWN0IHtcXHJcXG4gIGJpbmQoIHRhcmdldDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEV2ZW50VGFyZ2V0cywgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbnlGdW5jdGlvbiwgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zICk6IHZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkXFxyXFxuICB1bmJpbmQoIHRhcmdldDogRXZlbnRUYXJnZXQgfCBFdmVudFRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RbXSwgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s/OiBBbnlGdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKTogdm9pZDtcXHJcXG4gIGRpc3BhdGNoPFQ+KCB0YXJnZXQ6IEV2ZW50VGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgZXZlbnQ6IHN0cmluZywgZGV0YWlsPzogVCApOiB2b2lkO1xcclxcbiAgZGVzdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3koKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbnN0cicKICAgICAgICAgICAgICAgICAgICAgICAgYid1Y3RvciBmdW5jdGlvbiB0byBwcm92aWRlIG1ldGhvZHMgdG8gc3Vic2NyaWJlIG5hdGl2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgZXZlbnRzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICogQGNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdHJ1Y3RvclxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBFdmVudEJpbmRlciBvYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBFdmVudEJpbmRlcigpOiBFdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRCaW5kZXJPYmplY3Qge1xcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIGhhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kbGVycyB0aGF0IGxpc3RlbiB0byBuYXRpdmUgZXZlbnRzLlxcclxcbiAgICogYFsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSwgY2FsbGJhY2ssIHJlbW92ZXIgXWBcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGxldCBsaXN0ZW5lcnM6IFsgRXZlbnRUYXJnZXQsIHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2csIHN0cmluZyB8IHVuZGVmaW5lZCwgQW55RnVuY3Rpb24sICgpID0+IHZvaWQgXVtdID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBMaXN0ZW5zIHRvIG5hdGl2ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnRzLlxcclxcbiAgICogLSBgZGVzdHJveSgpYCBjYW4gdW5zdWJzY3JpYmUgYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCBldmVudHMuXFxyXFxuICAgKiAtIEluIElFLCBtZWRpYVF1ZXJ5TGlzdCBkb2VzIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QgaW5oZXJpdCBFdmVudFRhcmdldCxcXHJcXG4gICAqICAgYW5kIG9ubHkgc3VwcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRzIGRlcHJlY2F0ZWQgYGFkZExpc3RlbmVyYCBhbmQgYHJlbW92ZUxpc3RlbmVyYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9NZWRpYVF1ZXJ5TGlzdC9hZGRMaXN0ZW5lcicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0cyAgLSBBIHRhcmdldCBlbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCwgdGhlIHdpbmRvdyBvYmplY3Qgb3IgdGhlIGRvY3VtZW50IG9iamVjdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBvciBldmVudHMgdG8gbGlzdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB0by5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgIC0gT3B0aW9uYWwuIFRoZSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyB0byBwYXNzIHRvIHRoZSBgYWRkRXZlbnRMaXN0ZW5lcmAgZnVuY3Rpb24uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBiaW5kKFxcclxcbiAgICB0YXJnZXRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogRXZlbnRUYXJnZXRzLFxcclxcbiAgICBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gICAgY2FsbGJhY2s6IEFueUZ1bmN0aW9uLFxcclxcbiAgICBvcHRpb25zPzonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zXFxyXFxuICApOiB2b2lkIHtcXHJcXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2hFdmVudCggdGFyZ2V0cywgZXZlbnRzLCAoIHRhcmdldCwgZXZlbnQsIG5hbWVzJwogICAgICAgICAgICAgICAgICAgICAgICBiInBhY2UgKSA9PiB7XFxyXFxuICAgICAgY29uc3QgaXNFdmVudFRhcmdldCA9ICdhZGRFIgogICAgICAgICAgICAgICAgICAgICAgICBiInZlbnRMaXN0ZW5lcicgaW4gdGFyZ2V0O1xcclxcbiAgICAgIGNvbnN0IHJlbW92ZXIgIgogICAgICAgICAgICAgICAgICAgICAgICBiJz0gaXNFdmVudFRhcmdldFxcclxcbiAgICAgICAgPyB0YXJnZXQucmVtb3ZlRXZlbnRMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdGVuZXIuYmluZCggdGFyZ2V0LCBldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMgKScKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgICAgIDogdGFyZ2V0WyAncmVtb3ZlTGlzdGVuZXInIF0uYmluZCggdCIKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgY2FsbGJhY2sgKTtcXHJcXG5cXHJcXG4gICAgICBpc0V2ZW50VGFyZ2V0ID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldC5hZGRFdmVudExpc3RlbmVyKCBldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiOiB0YXJnZXRbICdhZGRMaXN0ZW5lcicgXSggY2FsbGJhY2sgKTtcXHJcXG4gICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdGVuZXJzLnB1c2goIFsgdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJlbW92ZXIgXSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBSZW1vdmVzIHRoZSBldmVudCBoYW5kbGVyLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0cyAgLSBBIHRhcmdldCBlbGVtZW50LCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHdpbmRvdyBvYmplY3Qgb3IgdGhlIGRvY3VtZW50IG9iamVjdC5cXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBuYW1lIG9yIG5hbWVzIHRvIHJlbW92ZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBPcHRpb25hbC4gU3BlY2lmeSB0aGUgY2FsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidiYWNrIHRvIHJlbW92ZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdW5iaW5kKCB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0czogRXZlbnRUYXJnZXRzLCBldmVudHM6IHN0cmluZyB8IHN0cmluZ1tdLCBjYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGJhY2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCggdGFyZ2V0cywgZXZlbnRzLCAoIHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSApID0+ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlciggbGlzdGVuZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyID0+IHtcXHJcXG4gICAgICAgIGlmICggbGlzdGVuZXJbIDAgXSA9PT0gdGFyZ2V0XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgICAmJiBsaXN0ZW5lclsgMSBdID09PSBldmVudFxcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgJiYgbGlzdGVuZXJbIDIgXSA9PT0gbmFtZXNwYWNlXFxyXFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiAoICEgY2FsbGJhY2sgfHwgbGlzdGVuZXJbIDMgXSA9PT0gY2FsbGJhY2sgKScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgICkge1xcclxcbiAgICAgICAgICBsaXN0ZW5lclsgNCBdKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XFxyXFxuICAgICAgICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICAgICAgcmV0dXJuIHRydWU7XFxyXFxuICAgICAgfSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEaXNwYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBhIGN1c3RvbSBldmVudCBvZiB0aGUgdGFyZ2V0LlxcclxcbiAgICpcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gdGFyZ2V0IC0gQW4gZXZlbnQgdGFyZ2V0LlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlICAgLSBBbiBldmVudCB0eXBlLlxcclxcbiAgICogQHBhcmFtIGRldGFpbCAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBPcHRpb25hbC4gVGhlIGBkZXRhaWxgIG9iamVjdCBvZiB0aGUgZXZlbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gZXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZnVuY3Rpb24gZGlzcGF0Y2g8VD4oIHRhcmdldDogRXZlbnRUYXJnZXQsIHR5cGU6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmcsIGRldGFpbD86IFQgKTogQ3VzdG9tRXZlbnQge1xcclxcbiAgICBsZXQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IEN1c3RvbUV2ZW50O1xcclxcbiAgICBjb25zdCBidWJibGVzID0gdHJ1ZTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICAgIGlmICggdHlwZW9mIEN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nICkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBlID0gbmV3IEN1c3RvbUV2ZW50KCB0eXBlLCB7IGJ1YmJsZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBkZXRhaWwgfSApO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIGUgPSBkb2N1bScKICAgICAgICAgICAgICAgICAgICAgICAgYiJlbnQuY3JlYXRlRXZlbnQoICdDdXN0b21FdmVudCcgKTtcXHJcXG4gICAgICBlLmluaSIKICAgICAgICAgICAgICAgICAgICAgICAgYid0Q3VzdG9tRXZlbnQoIHR5cGUsIGJ1YmJsZXMsIGZhbHNlLCBkZXRhaWwgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIH1cXHJcXG5cXHJcXG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoIGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHJldHVybiBlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogSXRlcmF0ZXMgb3ZlciBlYWNoIHRhcmdldCBhbmQgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgd2luZG93IG9iamVjdCBvciB0aGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGl0ZXJhdGVlIC0gQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBmb3JFYWNoRXZlbnQoXFxyXFxuICAgIHRhcmdldHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudFRhcmdldHMsXFxyXFxuICAgIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBpdGVyYXRlZTogKCB0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudDogc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZywgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQgKSA9PiB2b2lkXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIHRhcmdldHMsIHRhcmdldCA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIHRhcmdldCAmJiBmb3JFYWNoKCBldmVudHMsIGV2ZW50cyA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcbiAgICAgICAgZXZlbnRzLnNwbGl0KCAnICcgKS5mb3JFYWNoKCBldmVudE5TID0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiB7XFxyXFxuICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZXZlbnROUy5zcGxpdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuJyApO1xcclxcbiAgICAgICAgICBpdGVyYXRlZSggdGFyZ2V0LCBmcmFnbWVudFsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAgXSwgZnJhZ21lbnRbIDEgXSApO1xcclxcbiAgICAgICAgfSApO1xcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIFJlbW92ZXMgYWxsIGxpc3RlbmVycy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgIGxpc3RlbmVycy5mb3JFYWNoKCBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0YSA9PiB7IGRhdGFbIDQgXSgpIH0gKTtcXHJcXG4gICAgZW1wdHkoIGxpc3RlbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIGJpbmQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICB1bmJpbmQsXFxyXFxuICAgIGRpc3BhdGNoLFxcclxcbiAgICBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImV4cG9ydCBjb25zdCBFVkVOVF9NT1UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTlRFRCAgICAgICAgICAgID0gJ21vdW50ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTlRfUkVBRFkgICAgICAgICAgICAgID0gJ3JlYWR5JztcXHJcXG5leHBvcnQgY29uc3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEVWRU5UX01PVkUgICAgICAgICAgICAgICA9ICdtb3ZlJztcXHJcXG5leHBvcnQgY28iCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnN0IEVWRU5UX01PVkVEICAgICAgICAgICAgICA9ICdtb3ZlZCc7XFxyXFxuZXhwb3IiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidCBjb25zdCBFVkVOVF9DTElDSyAgICAgICAgICAgICAgPSAnY2xpY2snO1xcclxcbmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIieHBvcnQgY29uc3QgRVZFTlRfQUNUSVZFICAgICAgICAgICAgID0gJ2FjdGl2ZSc7IgogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9JTkFDVElWRSAgICAgICAgICAgPSAnaW5hIgogICAgICAgICAgICAgICAgICAgICAgICBiImN0aXZlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfVklTSUJMRSAgICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiA9ICd2aXNpYmxlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfSElEREVOICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICA9ICdoaWRkZW4nO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9SRUZSRVNIIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICAgICAgID0gJ3JlZnJlc2gnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9VIgogICAgICAgICAgICAgICAgICAgICAgICBiIlBEQVRFRCAgICAgICAgICAgID0gJ3VwZGF0ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFIgogICAgICAgICAgICAgICAgICAgICAgICBiIlZFTlRfUkVTSVpFICAgICAgICAgICAgID0gJ3Jlc2l6ZSc7XFxyXFxuZXhwb3J0IGNvIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5zdCBFVkVOVF9SRVNJWkVEICAgICAgICAgICAgPSAncmVzaXplZCc7XFxyXFxuZXhwIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCBjb25zdCBFVkVOVF9EUkFHICAgICAgICAgICAgICAgPSAnZHJhZyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiImV4cG9ydCBjb25zdCBFVkVOVF9EUkFHR0lORyAgICAgICAgICAgPSAnZHJhZ2dpbmcnO1xcIgogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBR0dFRCAgICAgICAgICAgID0gJ2RyYWdnZWQnIgogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfU0NST0xMICAgICAgICAgICAgID0gJ3NjIgogICAgICAgICAgICAgICAgICAgICAgICBiInJvbGwnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9TQ1JPTExFRCAgICAgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIj0gJ3Njcm9sbGVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfT1ZFUkZMT1cgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICA9ICdvdmVyZmxvdyc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0RFU1RSIgogICAgICAgICAgICAgICAgICAgICAgICBiIk9ZICAgICAgICAgICAgPSAnZGVzdHJveSc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UIgogICAgICAgICAgICAgICAgICAgICAgICBiIl9BUlJPV1NfTU9VTlRFRCAgICAgPSAnYXJyb3dzOm1vdW50ZWQnO1xcclxcbmV4cG9yIgogICAgICAgICAgICAgICAgICAgICAgICBiInQgY29uc3QgRVZFTlRfQVJST1dTX1VQREFURUQgICAgID0gJ2Fycm93czp1cGRhdGVkJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCA9ICdwYWciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5hdGlvbjptb3VudGVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfUEFHSU5BVEkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiT05fVVBEQVRFRCA9ICdwYWdpbmF0aW9uOnVwZGF0ZWQnO1xcclxcbmV4cG9ydCBjb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gJ25hdmlnYXRpb246bW91bnRlZCc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVRPUExBWV9QTEFZICAgICAgPSAnYXV0b3BsYXkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiOnBsYXknO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVRPUExBWV9QTEFZSU5HICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiID0gJ2F1dG9wbGF5OnBsYXlpbmcnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9BVVQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiT1BMQVlfUEFVU0UgICAgID0gJ2F1dG9wbGF5OnBhdXNlJztcXHJcXG5leHBvcnQgY28iCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnN0IEVWRU5UX0xBWllMT0FEX0xPQURFRCAgICA9ICdsYXp5bG9hZDpsb2FkZWQnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4vKiogQGludGVybmFsICovXFxyXFxuZXhwb3J0IGNvbnN0IEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiIkVOVF9TTElERV9LRVlET1dOICAgICA9ICdzayc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWIgogICAgICAgICAgICAgICAgICAgICAgICBiIkVOVF9TSElGVEVEICAgICAgICAgICA9ICdzaCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9FTkRfSU5ERVhfQ0hBTkdFRCA9IFwnZWlcJztcXHJcXG4iLCJpbXBvcnQgeyBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTlRfREVTVFJPWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnIgogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5pbXBvcnQgeyBBbnlGdW5jdGlvbiwgRXZlbnRNYXAgfSBmcm9tICcuLi8uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFwcGx5LCBhc3NpZ24sIGlzQXJyYXksIHNsIgogICAgICAgICAgICAgICAgICAgICAgICBiImljZSwgdG9BcnJheSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBFIgogICAgICAgICAgICAgICAgICAgICAgICBiInZlbnRCaW5kZXIsIEV2ZW50QmluZGVyT2JqZWN0IH0gZnJvbSAnLi4vRXZlbnRCaW5kZXIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiL0V2ZW50QmluZGVyJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZSBmb3IgdGhlIEV2ZW50SW50ZXJmYWNlIG9iamVjdC5cXHJcXG4gKlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZU9iamVjdCBleHRlbmRzIEV2ZW50QmluZGVyT2JqZWN0IHtcXHJcXG4gIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudDogSywgY2FsbGJhY2s6IEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudE1hcFsgSyBdICk6IHZvaWQ7XFxyXFxuICBvbiggZXZlbnRzOiBzdHJpbmcgfCBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiB2b2lkO1xcclxcbiAgb2ZmPCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudHM6IEsgfCBLW10gfCBzdHJpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgc3RyaW5nW10gKTogdm9pZDtcXHJcXG4gIGVtaXQ8SyBleHRlbmRzIGtleW9mIEV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudE1hcD4oIGV2ZW50OiBLLCAuLi5hcmdzOiBQYXJhbWV0ZXJzPEV2ZW50TWFwWyBLIF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPiApOiB2b2lkXFxyXFxuICBlbWl0KCBldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnknCiAgICAgICAgICAgICAgICAgICAgICAgIGInW10gKTogdm9pZDtcXHJcXG5cXHJcXG4gIC8qKiBAaW50ZXJuYWwgKi9cXHJcXG4gIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXM6IERvY3VtZW50RnJhZ21lbnQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBpbnRlcmZhY2UgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbnRlcm5hbCBhbmQgbmF0aXZlIGV2ZW50cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMy4wLjBcXHJcXG4gKiBAY29uc3RydWN0b3JcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBIGNvbGxlY3Rpb24gb2YgaW50ZXJmYWNlIGZ1bmN0aW9ucy5cXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGZ1bmN0aW9uIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGU/OiBTcGxpZGUgKTogRXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50SW50ZXJmYWNlT2JqZWN0IHtcXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGRvY3VtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCBmcmFnbWVudCBmb3IgaW50ZXJuYWwgZXZlbnRzLlxcclxcbiAgICogUHJvdmlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIFNwbGlkZSBpbnN0YW5jZSB0byBzaGFyZSB0aGUgYnVzLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgY29uc3QgYnVzID0gU3BsaWRlID8gU3BsaWRlLmV2ZW50LmJ1cyA6IGRvY3VtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBBbiBldmVudCBiaW5kZXIgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYmluZGVyID0gRXZlbnRCaW5kZXIoKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIExpc3RlbnMgdG8gYW4gaW50ZXJuYWwgZXZlbnQgb3IgZXZlbnRzLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgLSBBbiBldmVudCBuYW1lIG9yIG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBVc2UgYSBkb3QoLikgdG8gYWRkIGEgbmFtZXNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZS5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEgY2FsbGJhY2sgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHRvIHJlZ2lzdGVyLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbiggZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInczogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiB2b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIGJpbmRlci5iaW5kKCBidXMsIHRvQXJyYXkoIGV2ZW50cyApLmpvaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJuKCAnICcgKSwgZSA9PiB7XFxyXFxuICAgICAgY2FsbGJhY2suYXBwbHkoIGNhbGxiYSIKICAgICAgICAgICAgICAgICAgICAgICAgYidjaywgaXNBcnJheSggZS5kZXRhaWwgKSA/IGUuZGV0YWlsIDogW10gKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHJpZ2dlcnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbGxiYWNrIGZ1bmN0aW9ucy5cXHJcXG4gICAqIFRoaXMgYWNjZXB0cyBhZGRpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hbCBhcmd1bWVudHMgYW5kIHBhc3NlcyB0aGVtIHRvIGNhbGxiYWNrcy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHBhcmFtIGV2ZW50IC0gQW4gZXZlbnQgbmFtZS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIGVtaXQoIGV2ZW50OiBzdHJpbmcgKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgcHJlZmVyLXNwcmVhZFxcclxcbiAgICBiaW5kZXIuZGlzcGF0Y2goIGJ1cywgZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBzbGljZSggYXJndW1lbnRzLCAxICkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIFNwbGlkZSApIHtcXHJcXG4gICAgU3BsaWRlLmV2ZW50Lm9uKCBFVkVOVF9EJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VTVFJPWSwgYmluZGVyLmRlc3Ryb3kgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gYXNzaWduKCBiaW5kZXIsIHtcXHJcXG4gICAgYnVzLFxcclxcbiAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIG9mZjogYXBwbHkoIGJpbmRlci51bmJpbmQsIGJ1cyApLFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1pdCxcXHJcXG4gIH0gKTtcXHJcXG59IiwiaW1wb3J0IHsgbWluLCByYWYgfSBmcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIibSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbiIKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJmYWNlIGZvciB0aGUgcmV0dXJuaW5nIHZhbHVlIG9mIHRoZSBSZXF1ZXN0SW50ZXJ2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpbnRlcmZhY2UgUmVxdWVzdEludGVydmFsSW50ZXJmYWNlIHtcXHJcXG4gIHN0YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCggcmVzdW1lPzogYm9vbGVhbiApOiB2b2lkO1xcclxcbiAgcGF1c2UoKTogdm9pZDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZXdpbmQoKTogdm9pZDtcXHJcXG4gIGNhbmNlbCgpOiB2b2lkO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHNldCggaW50ZXJ2YWw6IG51bWJlciApOiB2b2lkO1xcclxcbiAgaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk6IGJvb2xlYW47XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFJlcXVlc3RzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnZhbCBsaWtlIHRoZSBuYXRpdmUgYHNldEludGVydmFsKClgIHdpdGggdXNpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIGludGVydmFsICAgLSBUaGUgaW50ZXJ2YWwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cXHJcXG4gKiBAcGFyYW0gb25JbnRlcnZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBUaGUgY2FsbGJhY2sgZmlyZWQgb24gZXZlcnkgaW50ZXJ2YWwuXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBvblVwZGF0ZSAgIC0gT3B0aW9uYWwuIENhbGxlZCBvbiBldmVyeSBhbmltYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGZyYW1lLCB0YWtpbmcgdGhlIHByb2dyZXNzIHJhdGUuXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBsaW1pdCAgICAgIC0gT3B0aW9uYWwuIExpbWl0cyB0aGUgbnVtYmVyIG9mIGludGVydmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gUmVxdWVzdEludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhcXHJcXG4gIGludGVydmFsOiBudW1iZXIsXFxyXFxuICBvbkludGVydmFsOiAoKSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndm9pZCxcXHJcXG4gIG9uVXBkYXRlPzogKCByYXRlOiBudW1iZXIgKSA9PiB2b2lkLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGxpbWl0PzogbnVtYmVyXFxyXFxuKTogUmVxdWVzdEludGVydmFsSW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSB7XFxyXFxuICBjb25zdCB7IG5vdyB9ID0gRGF0ZTtcXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIFRoZSB0aW1lIHdoZW4gdGhlIGludGVydmFsIHN0YXJ0cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIGxldCBzdGFydFRpbWU6IG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFRoZSBjdXJyZW50IHByb2dyZXNzIHJhdGUuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBsZXQgcmF0ZSA9IDA7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYW5pbWF0aW9uIGZyYW1lIElELlxcclxcbiAgICovXFxyXFxuICBsZXQgaWQ6IG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXI7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgaW50ZXJ2YWwgaXMgY3VycmVudGx5IHBhdXNlZCBvciBub3QuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBsZXQgcGF1c2VkID0gdHJ1ZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIFRoZSBsb29wIGNvdW50LiBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgYGxpbWl0YCBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JndW1lbnQgaXMgcHJvdmlkZWQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjb3VudCA9IDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgdXBkYXRlIGZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsZWQgb24gZXZlcnkgYW5pbWF0aW9uIGZyYW1lLlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgcGF1c2VkICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICByYXRlID0gaW50ZXJ2YWwgPyBtaW4oICggbm93KCkgLSBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUaW1lICkgLyBpbnRlcnZhbCwgMSApIDogMTtcXHJcXG4gICAgICBvblVwZGF0ZSAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgb25VcGRhdGUoIHJhdGUgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIHJhdGUgPj0gMSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgICBvbkludGVydmFsKCk7XFxyXFxuICAgICAgICBzdGFydFRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbm93KCk7XFxyXFxuXFxyXFxuICAgICAgICBpZiAoIGxpbWl0ICYmICsrY291bnQgPicKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGxpbWl0ICkge1xcclxcbiAgICAgICAgICByZXR1cm4gcGF1c2UoKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIGlkID0gcmFmKCB1cGRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFN0YXJ0cyB0aGUgaW50ZXJ2YWwuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXN1bWUgLSBPcHRpb25hbC4gV2hldGhlciB0byByZXN1bWUgdGhlIHBhdXNlZCBwcm9ncicKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Mgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzdGFydCggcmVzdW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJz86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIHJlc3VtZSB8fCBjYW5jZWwoKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIHN0YXJ0VGltZSA9IG5vdygpIC0gKCByZXN1bWUgPyByYXRlICogaW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidsIDogMCApO1xcclxcbiAgICBwYXVzZWQgICAgPSBmYWxzZTtcXHJcXG4gICAgaWQgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA9IHJhZiggdXBkYXRlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBQYXVzZXMgdGhlIGludGVydmFsLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGF1c2UoKTogdm9pZCB7XFxyXFxuICAgIHBhdXNlZCA9IHRydWU7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXdpbmRzIHRoZSBjdXJyZW50IHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9ncmVzcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmV3aW5kKCk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgc3RhcnRUaW1lID0gbm93KCk7XFxyXFxuICAgIHJhdGUgICAgICA9IDA7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoIG9uVXBkYXRlICkge1xcclxcbiAgICAgIG9uVXBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSggcmF0ZSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBDYW5jZWxzIHRoZSBpbnRlcnZhbC5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIGNhbmNlbCgpIHtcXHJcXG4gICAgaWQgJiYgY2FuY2VsQW5pbWF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbkZyYW1lKCBpZCApO1xcclxcbiAgICByYXRlICAgPSAwO1xcclxcbiAgICBpZCAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gMDtcXHJcXG4gICAgcGF1c2VkID0gdHJ1ZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIFNldHMgbmV3IGludGVydmFsIGR1cmF0aW9uLlxcclxcbiAgICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcGFyYW0gdGltZSAtIFRoZSBpbnRlcnZhbCBkdXJhdGlvbiBpbiBtaWxsaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWNvbmRzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzZXQoIHRpbWU6IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTogdm9pZCB7XFxyXFxuICAgIGludGVydmFsID0gdGltZTtcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgaW50ZXJ2YWwgaXMgcGF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlZCBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbnRlcnZhbCBpcyBwYXVzZWQsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gaXNQYXVzZWQoKTogYm9vbGVhbiB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gcGF1c2VkO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0YXJ0LFxcclxcbiAgICByZXdpbmQsXFxyXFxuICAgIHBhdXNlLFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY2FuY2VsLFxcclxcbiAgICBzZXQsXFxyXFxuICAgIGlzUGF1c2VkLFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ307XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGluY2x1ZGVzLCB0b0FycmF5IH0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZSBmb3IgdGhlIFN0YXRlIG9iamVjdC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRlT2JqZWN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICBzZXQoIHN0YXRlOiBudW1iZXIgKTogdm9pZDtcXHJcXG4gIGlzKCBzdGF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzOiBudW1iZXIgfCBudW1iZXJbXSApOiBib29sZWFuO1xcclxcbn1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVGhlIGZ1bmN0aW9uIHByb3ZpZGluZyBhIHN1cGVyIHNpbXBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugc3RhdGUgc3lzdGVtLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGluaXRpYWxTdGF0ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSBTcGVjaWZpZXMgdGhlIGluaXRpYWwgc3RhdGUuXFxyXFxuICovXFxyXFxuZXhwb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBTdGF0ZSggaW5pdGlhbFN0YXRlOiBudW1iZXIgKTogU3RhdGVPYmplY3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGN1cnJlbnQgc3RhdGUuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBsZXQgc3RhdGUgPSBpbml0aWFsU3RhdGU7XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBTZXRzIGEgbmV3IHN0YXRlLlxcclxcbiAgICpcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gdmFsdWUgLSBBIG5ldyBzdGF0ZSB2YWx1ZS5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIHNldCggdmFsdWU6IG51bWJlciApOiB2b2lkIHtcXHJcXG4gICAgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlID0gdmFsdWU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidja3MgaWYgdGhlIGN1cnJlbnQgc3RhdGUgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgb25lLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc3RhdGVzIC0gQSBzdGF0ZSB0byBjaGVjay4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGN1cnJlbnQgcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlIGlzIHRoZSBwcm92aWRlZCBvbmUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyggc3RhdGVzOiBudW1iZXIgfCBudW1iZXJbXSApOiBib29sZWFuIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiBpbmNsdWRlcyggdG9BcnJheSggc3RhdGVzICksIHN0YXRlICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHsgc2V0LCBpcyB9O1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiY29uc3QgQVJST1cgPSBcJ0Fycm93XCc7XFxyXFxuZXhwb3J0IGNvbnN0IEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgYidMRUZUICA9IGAkeyBBUlJPVyB9TGVmdGA7XFxyXFxuZXhwb3J0IGNvbnN0IEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgYidSSUdIVCA9IGAkeyBBUlJPVyB9UmlnaHRgO1xcclxcbmV4cG9ydCBjb25zdCBBUlJPVycKICAgICAgICAgICAgICAgICAgICAgICAgYidfVVAgICAgPSBgJHsgQVJST1cgfVVwYDtcXHJcXG5leHBvcnQgY29uc3QgQVJST1dfRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidPV04gID0gYCR7IEFSUk9XIH1Eb3duYDsiLCIvKipcXHJcXG4gKiBFbnVtZXJhdGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXMgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiInQgTFRSID0gJ2x0cic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRW51bWVyYXRlcyBzIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzIGZyb20gcmlnaHQgdG8gbGVmdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIFJUTCA9ICdydGwnO1xcclxcblxcclxcbi8qKlxcclxcbiAqIEVudW1lcmF0ZXMgc2wiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlcyBpbiBhIGNvbC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgVFRCID0gJ3R0YiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcJztcXHJcXG4iLCJpbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV18nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiUklHSFQsIEFSUk9XX1VQIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fycm93cyc7IgogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbmltcG9ydCB7IFJUTCwgVFRCIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpIgogICAgICAgICAgICAgICAgICAgICAgICBiInJlY3Rpb25zJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9uZW50cywgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIERpcmVjdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQge1xcclxcbiAgcmVzb2x2ZSggcHJvcDogc3RyaW5nLCBheGlzT25seT86ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJib29sZWFuLCBkaXJlY3Rpb24/OiBPcHRpb25zWydkaXJlY3Rpb24nXSApOiBzdHJpbmc7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgb3JpZW50KCB2YWx1ZTogbnVtYmVyICk6IG51bWJlcjtcXHJcXG59XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSB0cmFuc2xhdGlvbiBtYXAgZm9yIGRpcmVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBjb25zdCBPUklFTlRBVElPTl9NQVAgPSB7XFxyXFxuICB3aWR0aCAgICAgOiBbICcKICAgICAgICAgICAgICAgICAgICAgICAgYiInaGVpZ2h0JyBdLFxcclxcbiAgbGVmdCAgICAgIDogWyAndG9wJywgJ3JpZ2h0JyBdLCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gIHJpZ2h0ICAgICA6IFsgJ2JvdHRvbScsICdsZWZ0JyBdLFxcclxcbiAgeCAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICA6IFsgJ3knIF0sXFxyXFxuICBYICAgICAgICAgOiBbICdZJyBdLFxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIFkgICAgICAgICA6IFsgJ1gnIF0sXFxyXFxuICBBcnJvd0xlZnQgOiBbIEFSUk9XX1UiCiAgICAgICAgICAgICAgICAgICAgICAgIGInUCwgQVJST1dfUklHSFQgXSxcXHJcXG4gIEFycm93UmlnaHQ6IFsgQVJST1dfRE9XTiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEFSUk9XX0xFRlQgXSxcXHJcXG59O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50IHRoYXQgYWJzb3JicyB0aGUgZGlmZmVyZW5jZSBhbW9uZyBkaXJlY3Rpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQScKICAgICAgICAgICAgICAgICAgICAgICAgYicgRGlyZWN0aW9uIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBEaXJlY3Rpb24oIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBEaXJlY3Rpb25Db21wb25lbnQge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogUmVzb2x2ZXMgdGhlIHByb3ZpZGVkIHByb3BlcnR5IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW1lLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwcm9wICAgICAgLSBBIHByb3BlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0eSBuYW1lIHRvIHRyYW5zbGF0ZS5cXHJcXG4gICAqIEBwYXJhbSBheGlzT25seSAgLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9uYWwuIElmIGB0dXJlYCwgcmV0dXJucyB0aGUgc2FtZSBwcm9wZXJ0eSBmb3IgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xUUiBhbmQgUlRMLlxcclxcbiAgICogQHBhcmFtIGRpcmVjdGlvbiAtIE9wdGlvbmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJy4gU3BlY2lmeSB0aGUgZGlyZWN0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgYGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXJlY3Rpb25gIG9wdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHByb3A6IHN0cmluZywgYXhpc09ubHk/OiBib29sZWFuLCBkaXJlY3Rpb24/OiBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9uc1snZGlyZWN0aW9uJ10gKTogc3RyaW5nIHtcXHJcXG4gICAgZGlyZWN0aW9uID0gIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2RpcmVjdGlvbiB8fCBvcHRpb25zLmRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gZGlyZWN0aW9uID09PSBSVEwgJiYgISBheGlzT25seSA/IDEgOiBkaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBUVEIgPyAwIDogLTE7XFxyXFxuXFxyXFxuICAgIHJldHVybiBPUklFTlRBVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYidfTUFQWyBwcm9wIF0gJiYgT1JJRU5UQVRJT05fTUFQWyBwcm9wIF1bIGluZGV4IF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgfHwgcHJvcC5yZXBsYWNlKCAvd2lkdGh8bGVmdHxyaWdodC9pLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBtYXRjaCwgb2Zmc2V0ICkgPT4ge1xcclxcbiAgICAgICAgY29uc3QgcmVwbGFjZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gT1JJRU5UQVRJT05fTUFQWyBtYXRjaC50b0xvd2VyQ2FzZSgpIF1bIGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiddIHx8IG1hdGNoO1xcclxcbiAgICAgICAgcmV0dXJuIG9mZnNldCA+IDAgPyByZXBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZW1lbnQuY2hhckF0KCAwICkudG9VcHBlckNhc2UoKSArIHJlcGxhY2VtZW50LnNsaWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyggMSApIDogcmVwbGFjZW1lbnQ7XFxyXFxuICAgICAgfSApO1xcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogT3JpZW50cyB0aGUgdmFsdWUgdG93YXJkcyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnJlbnQgZGlyZWN0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHZhbHVlIHRvIG9yaWVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugb3JpZW50ZWQgdmFsdWUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG9yaWVudCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhbHVlOiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIHZhbHVlIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInICggb3B0aW9ucy5kaXJlY3Rpb24gPT09IFJUTCA/IDEgOiAtMSApO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIHJlc29sdmUsXFxyXFxuICAgIG9yaScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJleHBvcnQgY29uc3QgUk9MRSAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICA9ICdyb2xlJztcXHJcXG5leHBvcnQgY29uc3QgVEFCX0lOREVYID0gJ3RhYmluZCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJleCc7XFxyXFxuZXhwb3J0IGNvbnN0IERJU0FCTEVEICA9ICdkaXNhYmxlZCc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbmV4cG9ydCBjb25zdCBBUklBX1BSRUZJWCAgICAgICAgICA9ICdhcmlhLSc7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBjb25zdCBBUklBX0NPTlRST0xTICAgICAgICA9IGAkeyBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19QUkVGSVggfWNvbnRyb2xzYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9DVVJSRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1jdXJyZW50YDtcXHJcXG5leHBvcnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IEFSSUFfU0VMRUNURUQgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1zZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWRgO1xcclxcbmV4cG9ydCBjb25zdCBBUklBX0xBQkVMICAgICAgICAgICA9IGAkeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9QUkVGSVggfWxhYmVsYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9MQUJFTEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRURCWSAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1sYWJlbGxlZGJ5YDtcXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGNvbnN0IEFSSUFfSElEREVOICAgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1oaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZGVuYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9PUklFTlRBVElPTiAgICAgPSBgJCcKICAgICAgICAgICAgICAgICAgICAgICAgYid7IEFSSUFfUFJFRklYIH1vcmllbnRhdGlvbmA7XFxyXFxuZXhwb3J0IGNvbnN0IEFSSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBX1JPTEVERVNDUklQVElPTiA9IGAkeyBBUklBX1BSRUZJWCB9cm9sZWRlc2NyaXB0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2A7XFxyXFxuZXhwb3J0IGNvbnN0IEFSSUFfTElWRSAgICAgICAgICAgID0gYCR7IEFSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX1BSRUZJWCB9bGl2ZWA7XFxyXFxuZXhwb3J0IGNvbnN0IEFSSUFfQlVTWSAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICA9IGAkeyBBUklBX1BSRUZJWCB9YnVzeWA7XFxyXFxuZXhwb3J0IGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBUklBX0FUT01JQyAgICAgICAgICA9IGAkeyBBUklBX1BSRUZJWCB9YXRvbWljYCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGFycmF5IHdpdGggYWxsIGF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGVzIHRvIHJlbW92ZSBsYXRlci5cXHJcXG4gKiBOZWVkIHRvIG1hbnVhbGx5IHJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUgYXR0cmlidXRlcyB0aGF0IGFyZSBub3QgaW4gdGhpcy5cXHJcXG4gKiBOb3RlICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGF0IHJlbW92aW5nIGBhcmlhLWxpdmVgIGRpc2FibGVzIHRoZSBsaXZlIHJlZ2lvbiB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250aWwgdGhlIHBhZ2UgcmVsb2FkLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBBTExfQVRUUklCVVRFUyA9IFtcXHJcXG4gIFJPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xFLFxcclxcbiAgVEFCX0lOREVYLFxcclxcbiAgRElTQUJMRUQsXFxyXFxuICBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19DT05UUk9MUyxcXHJcXG4gIEFSSUFfQ1VSUkVOVCxcXHJcXG4gIEFSSUFfTEFCRUwsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgQVJJQV9MQUJFTExFREJZLFxcclxcbiAgQVJJQV9ISURERU4sXFxyXFxuICBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19PUklFTlRBVElPTixcXHJcXG4gIEFSSUFfUk9MRURFU0NSSVBUSU9OLFxcclxcbl07XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiIsImltcG9ydCB7IFBST0pFQ1RfQ09ERSB9IGZyb20gXCcuL3Byb2plY3RcJztcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHByZWZpeCBmb3IgY2xhc3Nlcy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAc2luY2UgNC4xLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBDTEFTU19QJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRklYID0gYCR7IFBST0pFQ1RfQ09ERSB9X19gO1xcclxcblxcclxcbi8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBUaGUgcHJlZml4IGZvciBzdGF0dXMgY2xhc3Nlcy5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2luY2UgNC4xLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBTVEFUVVNfQ0xBU1NfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgYiI9ICdpcy0nO1xcclxcblxcclxcbi8qKlxcclxcbiAqIEFsbCBjbGFzc2VzIGFzIGNvbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidzdGFudHMuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1JPT1QgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgPSBQUk9KRUNUX0NPREU7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1RSQUNLJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH10cmFja2A7XFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBDTEFTU19MSVNUICAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1saXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1NMSURFICAgICAgICAgICA9IGAkeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfUFJFRklYIH1zbGlkZWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0NMT04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSAgICAgICAgICAgPSBgJHsgQ0xBU1NfU0xJREUgfS0tY2xvbmVgO1xcclxcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnQgY29uc3QgQ0xBU1NfQ09OVEFJTkVSICAgICAgID0gYCR7IENMQVNTX1NMSURFIH1fXycKICAgICAgICAgICAgICAgICAgICAgICAgYidjb250YWluZXJgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BUlJPV1MgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgID0gYCR7IENMQVNTX1BSRUZJWCB9YXJyb3dzYDtcXHJcXG5leHBvcnQgY29uc3QgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX0FSUk9XICAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfWFycm93YDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0FSUk9XX1BSRVYgICAgICA9IGAkeyBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQVJST1cgfS0tcHJldmA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0FSUk9XX04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVhUICAgICAgPSBgJHsgQ0xBU1NfQVJST1cgfS0tbmV4dGA7XFxyXFxuZXhwb3J0IGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBDTEFTU19QQUdJTkFUSU9OICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH1wYWdpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbmA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1BBR0lOQVRJT05fUEFHRSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgJHsgQ0xBU1NfUEFHSU5BVElPTiB9X19wYWdlYDtcXHJcXG5leHBvcnQgY29uc3QgQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1BST0dSRVNTICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXByb2dyZXNzYDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1BST0dSRVNTX0JBUiAgICA9IGAkeyBDTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgYidPR1JFU1MgfV9fYmFyYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVE9HR0xFICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXRvZ2dsZWA7XFxyXFxuZXhwb3J0IGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBDTEFTU19UT0dHTEVfUExBWSAgICAgPSBgJHsgQ0xBU1NfVE9HR0xFIH1fX3BsYXlgJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVE9HR0xFX1BBVVNFICAgID0gYCR7IENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19UT0dHTEUgfV9fcGF1c2VgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19TUElOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05FUiAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9c3Bpbm5lcmA7XFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCBjb25zdCBDTEFTU19TUiAgICAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3JgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19JTklUSUFMSVpFRCAgICAgPSBgJHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNUQVRVU19DTEFTU19QUkVGSVggfWluaXRpYWxpemVkYDtcXHJcXG5leHBvcnQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IENMQVNTX0FDVElWRSAgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9YWN0aXZlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfUFJFViAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1wcmV2YDtcXHJcXG5leHBvcnQgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IENMQVNTX05FWFQgICAgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dGA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTX1ZJU0lCTEUgICAgICAgICA9IGAkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3sgU1RBVFVTX0NMQVNTX1BSRUZJWCB9dmlzaWJsZWA7XFxyXFxuZXhwb3J0IGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19MT0FESU5HICAgICAgICAgPSBgJHsgU1RBVFVTX0NMQVNTX1BSRUZJWCB9bG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWRpbmdgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19GT0NVU19JTiAgICAgICAgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfWZvY3VzLWluYDtcXHJcXG5leHBvcnQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IENMQVNTX09WRVJGTE9XICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9b3ZlcmZsb3dgO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBhcnJheSB3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbGwgc3RhdHVzIGNsYXNzZXMgZXhjZXB0IGZvciBgaXMtaW5pdGlhbGl6ZWRgLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgU1RBVFVTX0NMQVNTRVMgPSBbXFxyXFxuICBDTEFTU19BQ1RJVkUsXFxyXFxuICBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfVklTSUJMRSxcXHJcXG4gIENMQVNTX1BSRVYsXFxyXFxuICBDTEFTU19ORVhULFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIENMQVNTX0xPQURJTkcsXFxyXFxuICBDTEFTU19GT0NVU19JTixcXHJcXG4gIENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19PVkVSRkxPVyxcXHJcXG5dO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVjdGlvbiBvZiBjbGFzc2VzIGZvciBlbGVtZW50cyB0aGF0IFNwbGlkZSBkeW5hbWljYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbHkgY3JlYXRlcy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NFUyA9IHtcXHJcXG4gIHNsaWRlICAgICA6IENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19TTElERSxcXHJcXG4gIGNsb25lICAgICA6IENMQVNTX0NMT05FLFxcclxcbiAgYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm93cyAgICA6IENMQVNTX0FSUk9XUyxcXHJcXG4gIGFycm93ICAgICA6IENMQVNTX0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPVyxcXHJcXG4gIHByZXYgICAgICA6IENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuICBuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dCAgICAgIDogQ0xBU1NfQVJST1dfTkVYVCxcXHJcXG4gIHBhZ2luYXRpb246IENMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QQUdJTkFUSU9OLFxcclxcbiAgcGFnZSAgICAgIDogQ0xBU1NfUEFHSU5BVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYidfUEFHRSxcXHJcXG4gIHNwaW5uZXIgICA6IENMQVNTX1NQSU5ORVIsXFxyXFxufTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuIiwiLyoqXFxyXFxuICogVGhlIHBvd2VyIG9mIHRoZSBmcmljdGlvbi5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IEZSSUNUSU9OID0gNTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJZiB0aGUgdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgc3RvcHMgZHJhZ2dpbmcgZm9yIHRoaXMgZHVyYXRpb24gd2l0aCBrZWVwaW5nIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgcG9pbnRlciBkb3duLCB1cGRhdGVzIHRoZSBiYXNlIGNvb3JkIGFuZCB0aW1lLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgTE9HX0lOVEVSVkFMID0gMjAwO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFN0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBldmVudHMgZm9yIGRyYWdnaW5nLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX0RPV05fRVZFTlRTID0gJ3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3VjaHN0YXJ0IG1vdXNlZG93bic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVXBkYXQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBldmVudHMgZm9yIGRyYWdnaW5nLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX01PVkVfRVZFTlRTID0gJ3RvIgogICAgICAgICAgICAgICAgICAgICAgICBiInVjaG1vdmUgbW91c2Vtb3ZlJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBFbmQgZXZlIgogICAgICAgICAgICAgICAgICAgICAgICBiJ250cyBmb3IgZHJhZ2dpbmcuXFxyXFxuICogVGhlIGBjbGlja2AgZXZlbnQgaXMgcmVxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VpcmVkIGJlY2F1c2UgdGhlIGJyb3dzZXIgc29tZXRpbWVzIGRpc3BhdGNoZXMgYGRyYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCBldmVudHMgaW5zdGVhZCBvZiBgbW91c2VgLlxcclxcbiAqXFxyXFxuICogQHNpbmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYiczLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX1VQX0VWRU5UUyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBcJ3RvdWNoZW5kIHRvdWNoY2FuY2VsIG1vdXNldXAgY2xpY2tcJztcXHJcXG4iLCIvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogVGhlIHR5cGUgZm9yIHRoZSByZWd1bGFyIHNsaWRlci5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiIlNMSURFID0gJ3NsaWRlJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgdHlwZSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiJ29yIHRoZSBjYXJvdXNlbCBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IExPT1AgPSAnbG9vcCc7XFxyXFxuXFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbi8qKlxcclxcbiAqIFRoZSB0eXBlIGZvciB0aGUgZmFkZSBzbGlkZXIgdGhhdCBjYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIG5vdCBoYXZlIG11bHRpcGxlIHNsaWRlcyBpbiBhIHBhZ2UuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiIiogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IEZBREUgPSAnZmEiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVcJztcXHJcXG4iLCJpbXBvcnQge1xcclxcbiAgQUxMX0FUVFJJQlVURVMsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgQVJJQV9DT05UUk9MUyxcXHJcXG4gIEFSSUFfQ1VSUkVOVCxcXHJcXG4gIEFSSUFfSEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRERFTixcXHJcXG4gIEFSSUFfTEFCRUwsXFxyXFxuICBBUklBX1JPTEVERVNDUklQVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgYiIsXFxyXFxuICBST0xFLFxcclxcbiAgVEFCX0lOREVYLFxcclxcbn0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvbnN0YW50cy9hdHRyaWJ1dGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgQ0xBU1NfIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVElWRSxcXHJcXG4gIENMQVNTX0NPTlRBSU5FUixcXHJcXG4gIENMQVNTX05FWFQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgQ0xBU1NfUFJFVixcXHJcXG4gIENMQVNTX1ZJU0lCTEUsXFxyXFxuICBTVEFUVVNfJwogICAgICAgICAgICAgICAgICAgICAgICBiIkNMQVNTRVMsXFxyXFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmltcG9ydCB7XFxyXFxuICBFVkVOVF9BQ1RJVkUsXFxyXFxuICBFVkVOVF9DTElDSyxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBFVkVOVF9ISURERU4sXFxyXFxuICBFVkVOVF9JTkFDVElWRSxcXHJcXG4gIEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9NT1ZFLFxcclxcbiAgRVZFTlRfTU9WRUQsXFxyXFxuICBFVkVOVF9OQVZJR0FUSU9OXycKICAgICAgICAgICAgICAgICAgICAgICAgYidNT1VOVEVELFxcclxcbiAgRVZFTlRfU0NST0xMRUQsXFxyXFxuICBFVkVOVF9TSElGVEVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIEVWRU5UX1NMSURFX0tFWURPV04sXFxyXFxuICBFVkVOVF9WSVNJQkxFLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJNT1ZJTkcsIFNDUk9MTElORyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9zdGF0ZXMnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5pbXBvcnQgeyBGQURFLCBMT09QIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3R5cGVzJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJTcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgYWJzLFxcclxcbiAgYSIKICAgICAgICAgICAgICAgICAgICAgICAgYidwcGx5LFxcclxcbiAgY2VpbCxcXHJcXG4gIGNoaWxkLFxcclxcbiAgZmxvb3IsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZm9jdXMsXFxyXFxuICBmb3JtYXQsXFxyXFxuICBnZXRBdHRyaWJ1dGUsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaGFzQ2xhc3MsXFxyXFxuICBtaW4sXFxyXFxuICBwYWQsXFxyXFxuICBxdWVyeUFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wsXFxyXFxuICByZWN0LFxcclxcbiAgcmVtb3ZlQXR0cmlidXRlLFxcclxcbiAgcmVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZUNsYXNzLFxcclxcbiAgc2V0QXR0cmlidXRlLFxcclxcbiAgc3R5bGUgYXMgX3N0eWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSxcXHJcXG4gIHRvZ2dsZUNsYXNzLFxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlIHN1YiBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSAgU2xpZGVDb21wb25lbnQgZXh0ZW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgQmFzZUNvbXBvbmVudCB7XFxyXFxuICBpbmRleDogbnVtYmVyO1xcclxcbiAgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXg6IG51bWJlcjtcXHJcXG4gIHNsaWRlOiBIVE1MRWxlbWVudDtcXHJcXG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0YWluZXI6IEhUTUxFbGVtZW50O1xcclxcbiAgaXNDbG9uZTogYm9vbGVhbjtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB1cGRhdGUoKTogdm9pZDtcXHJcXG4gIHN0eWxlKCBwcm9wOiBzdHJpbmcsIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogc3RyaW5nIHwgbnVtYmVyLCB1c2VDb250YWluZXI/OiBib29sZWFuICk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkXFxyXFxuICBpc1dpdGhpbiggZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiBib29sZWFuO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgc3ViY29tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudCBmb3IgbWFuYWdpbmcgZWFjaCBzbGlkZS5cXHJcXG4gKlxcclxcbiAqIEBzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBpbmRleCAgICAgIC0gQSBzbGlkZSBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXguXFxyXFxuICogQHBhcmFtIHNsaWRlSW5kZXggLSBBIHNsaWRlIGluZGV4IGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xvbmVzLiBUaGlzIG11c3QgYmUgYC0xYCBpZiB0aGUgc2xpZGUgaXMgbm90IGEgY2xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lLlxcclxcbiAqIEBwYXJhbSBzbGlkZSAgICAgIC0gQSBzbGlkZSBlbGVtZW50LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBTbGlkZSBzdWJjb21wb25lbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBTbGlkZSggU3BsaWRlOiBTcGxpZGUsIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDogbnVtYmVyLCBzbGlkZUluZGV4OiBudW1iZXIsIHNsaWRlOiBIVE1MRWxlbWVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogU2xpZGVDb21wb25lbnQge1xcclxcbiAgY29uc3QgZXZlbnQgPSBFdmVudEludGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBvbiwgZW1pdCwgYmluZCB9ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV2ZW50O1xcclxcbiAgY29uc3QgeyBDb21wb25lbnRzLCByb290LCBvcHRpb25zIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyBpc05hdmlnYXRpb24sIHVwZGF0ZU9uTW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUsIGkxOG4sIHBhZ2luYXRpb24sIHNsaWRlRm9jdXMgfSA9IG9wdGlvbnM7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgY29uc3QgeyByZXNvbHZlIH0gPSBDb21wb25lbnRzLkRpcmVjdGlvbjtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICBjb25zdCBzdHlsZXMgICAgPSBnZXRBdHRyaWJ1dGUoIHNsaWRlLCAnc3R5bGUnICk7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgY29uc3QgbGFiZWwgICAgID0gZ2V0QXR0cmlidXRlKCBzbGlkZSwgQVJJQV9MQUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUwgKTtcXHJcXG4gIGNvbnN0IGlzQ2xvbmUgICA9IHNsaWRlSW5kZXggPiAtMTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBjb25zdCBjb250YWluZXIgPSBjaGlsZCggc2xpZGUsIGAuJHsgQ0xBU1NfQ09OVEFJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05FUiB9YCApO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUdXJucyBpbnRvIGB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZWAgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGxldCBkZXN0cm95ZWQ6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCggdGhpczogU2xpZGVDb21wb25lbnQgKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQge1xcclxcbiAgICBpZiAoICEgaXNDbG9uZSApIHtcXHJcXG4gICAgICBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaWQgPSBgJHsgcm9vdC5pZCB9LXNsaWRlJHsgcGFkKCBpbmRleCArIDEgKSB9YDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgUk9MRSwgcGFnaW5hdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiPyAndGFicGFuZWwnIDogJ2dyb3VwJyApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlLCBBUklBX1JPTEVERVNDUklQVElPTiwgaTE4bi5zbGlkZSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzZXRBdHRyaWJ1dGUoIHNsaWRlLCBBUklBX0xBQkVMLCBsYWJlbCB8fCBmb3JtYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBpMThuLnNsaWRlTGFiZWwsIFsgaW5kZXggKyAxLCBTcGxpZGUubGVuZ3RoIF0gKSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBsaXN0ZW4oKTtcXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gc29tZSBldmVudHMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsaXN0ZW4oKTogdm9pZCB7XFxyXFxuICAgIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5kKCBzbGlkZSwgJ2NsaWNrJywgYXBwbHkoIGVtaXQsIEVWRU5UX0NMSUNLLCBzZWxmICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIpICk7XFxyXFxuICAgIGJpbmQoIHNsaWRlLCAna2V5ZG93bicsIGFwcGx5KCBlbWl0LCIKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfU0xJREVfS0VZRE9XTiwgc2VsZiApICk7XFxyXFxuICAgIG9uKCBbIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1ZFRCwgRVZFTlRfU0hJRlRFRCwgRVZFTlRfU0NST0xMRUQgXSwgdXBkYXRlICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBvbiggRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVELCBpbml0TmF2aWdhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gKTtcXHJcXG5cXHJcXG4gICAgaWYgKCB1cGRhdGVPbk1vdmUgKSB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG9uKCBFVkVOVF9NT1ZFLCBvbk1vdmUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xcclxcbiAgICBldmVudC5kZXN0cm95KCk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICByZW1vdmVDbGFzcyggc2xpZGUsIFNUQVRVU19DTEFTU0VTICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZW1vdmVBdHRyaWJ1dGUoIHNsaWRlLCBBTExfQVRUUklCVVRFUyApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgJ3N0eWxlJywgc3R5bGVzICk7XFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICBzZXRBdHRyaWJ1dGUoIHNsaWRlLCBBUklBX0xBQkVMLCBsYWJlbCB8fCAnJyApO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5pdGlhbGl6ZXMgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBhcyBuYXZpZ2F0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0TmF2aScKICAgICAgICAgICAgICAgICAgICAgICAgYidnYXRpb24oKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IGNvbnRyb2xzID0gU3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxpZGVzLm1hcCggdGFyZ2V0ID0+IHtcXHJcXG4gICAgICBjb25zdCBTbGlkZSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQuc3BsaWRlLkNvbXBvbmVudHMuU2xpZGVzLmdldEF0KCBpbmRleCApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgICByZXR1cm4gU2xpZGUgPyBTbGlkZS5zbGlkZS5pZCA6ICcnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgfSApLmpvaW4oICcgJyApO1xcclxcblxcclxcbiAgICBzZXRBdHRyaWJ1dGUoIHNsIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgQVJJQV9MQUJFTCwgZm9ybWF0KCBpMThuLnNsaWRlWCwgKCBpc0Nsb25lID8gc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlSW5kZXggOiBpbmRleCApICsgMSApICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlLCBBUklBX0NPTlRST0xTLCBjb250cm9scyApO1xcclxcbiAgICBzZXRBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIicmlidXRlKCBzbGlkZSwgUk9MRSwgc2xpZGVGb2N1cyA/ICdidXR0b24nIDogJycgKTtcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIHNsaWRlRm9jdXMgJiYgcmVtb3ZlQXR0cmlidXRlKCBzbGlkZSwgQVJJQV9ST0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRURFU0NSSVBUSU9OICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidJZiB0aGUgYHVwZGF0ZU9uTW92ZWAgb3B0aW9uIGlzIGB0cnVlYCwgY2FsbGVkIHdoZW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzbGlkZXIgc3RhcnRzIG1vdmluZy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uTW92ZSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAhIGRlc3Ryb3llZCApIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgdXBkYXRlKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFVwZGF0ZXMgYXR0cmlidXRlIGFuZCBjbGFzc2VzIG9mIHRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIGlmICggISBkZXN0cm95ZWQgKSB7XFxyXFxuICAgICAgY29uc3QgeyBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg6IGN1cnIgfSA9IFNwbGlkZTtcXHJcXG5cXHJcXG4gICAgICB1cGRhdGVBY3RpdmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHkoKTtcXHJcXG4gICAgICB1cGRhdGVWaXNpYmlsaXR5KCk7XFxyXFxuICAgICAgdG9nZycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfUFJFViwgaW5kZXggPT09IGN1cnIgLSAxICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfTkVYVCwgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID09PSBjdXJyICsgMSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBVcGRhdGVzIHRoZSBzdGF0dXMgcmVsYXRlZCB3aXRoIGFjdGl2aScKICAgICAgICAgICAgICAgICAgICAgICAgYid0eS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdHkoKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Qge1xcclxcbiAgICBjb25zdCBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgaWYgKCBhY3RpdmUgIT09IGhhc0NsYXNzKCBzbGlkZSwgQ0xBU1NfQUNUSVZFICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInICkge1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfQUNUSVZFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWN0aXZlICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgQVJJQV9DVVInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZSB8fCAnJyApO1xcclxcbiAgICAgIGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBhY3RpdmUgPyBFVkVOVF9BQ1RJVkUgOiBFVkVOVF9JTkFDVElWRSwgc2VsZiApOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBVcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkYXRlcyBjbGFzc2VzIGFuZCBhdHRyaWJ1dGVzIHJlbGF0ZWQgd2l0aCB2aXNpYmlsaXR5JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqIC0gRG8gbm90IHVwZGF0ZSBhcmlhLWhpZGRlbiBvbiBzaGlmdGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cgdG8gYXZvaWQgV2luZG93IE5hcnJhdG9yIGZyb20gc3RhcnQgcmVhZGluZyBjb250ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMuXFxyXFxuICAgKiAtIElmIHRoZSBzbGlkZSBoYXMgZm9jdXMgYW5kIGdldHMgaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGRlbiwgbW92ZXMgZm9jdXMgdG8gdGhlIGFjdGl2ZSBzbGlkZS5cXHJcXG4gICAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdHkoKTogdm9pZCB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCB2aXNpYmxlID0gaXNWaXNpYmxlKCk7XFxyXFxuICAgIGNvbnN0IGhpZGRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSAhIHZpc2libGUgJiYgKCAhIGlzQWN0aXZlKCkgfHwgaXNDbG9uZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgaWYgKCAhIFNwbGlkZS5zdGF0ZS5pcyggWyBNT1ZJTkcsIFNDUk9MTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJTkcgXSApICkge1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggc2xpZGUsIEFSSUFfSCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJJRERFTiwgaGlkZGVuIHx8ICcnICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcyIKICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZSggcXVlcnlBbGwoIHNsaWRlLCBvcHRpb25zLmZvY3VzYWJsZU5vZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiIiB8fCAnJyApLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogJycgKTtcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmICggc2xpZGVGb2N1cyApIHtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSwgVEFCX0lOREVYLCBoaWRkZW4gPyAtMSA6IDAgKTtcXHJcXG4gICAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgaWYgKCB2aXNpYmxlICE9PSBoYXNDbGFzcyggc2xpZGUsIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgYidWSVNJQkxFICkgKSB7XFxyXFxuICAgICAgdG9nZ2xlQ2xhc3MoIHNsaWRlLCBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgYidfVklTSUJMRSwgdmlzaWJsZSApO1xcclxcbiAgICAgIGVtaXQoIHZpc2libGUgPyBFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfVklTSUJMRSA6IEVWRU5UX0hJRERFTiwgc2VsZiApO1xcclxcbiAgICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBpZiAoICEgdmlzaWJsZSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gc2xpZGUgKSB7XFxyXFxuICAgICAgY29uc3QgU2xpZGUgPSBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5TbGlkZXMuZ2V0QXQoIFNwbGlkZS5pbmRleCApO1xcclxcbiAgICAgIFNsaWRlICYmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb2N1cyggU2xpZGUuc2xpZGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogQWRkcyBhIENTUyBydWxlIHRvIHRoZSBzbGlkZXIgb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBjb250YWluZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHByb3AgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgLSBBIHByb3BlcnR5IG5hbWUuXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIEEgQ1NTIHZhbHVlIHRvIGFkZC5cXHJcXG4gICAqIEBwYXJhbSB1c2VDb250YScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVyIC0gT3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBhcHBseSB0aGUgcnVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgdG8gdGhlIGNvbnRhaW5lciBvciBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBzdHlsZSggcHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1c2VDbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudGFpbmVyPzogYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgX3N0eWxlKCAoIHVzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidDb250YWluZXIgJiYgY29udGFpbmVyICkgfHwgc2xpZGUsIHByb3AsIHZhbHVlICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZSBpcyBhY3RpdmUgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2B0cnVlYCBpZiB0aGUgc2xpZGUgaXMgYWN0aXZlLlxcclxcbiAgICovXFxyXFxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gaXNBY3RpdmUoKTogYm9vbGVhbiB7XFxyXFxuICAgIGNvbnN0IHsgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBjdXJyIH0gPSBTcGxpZGU7XFxyXFxuICAgIHJldHVybiBjdXJyID09PSBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfHwgKCBvcHRpb25zLmNsb25lU3RhdHVzICYmIGN1cnIgPT09IHNsaWRlSW5kZXggKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIGlzIHZpc2libGUgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNpYmxlKCk6IGJvb2xlYW4ge1xcclxcbiAgICBpZiAoIFNwbGlkZS5pcyggRkFERSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSApIHtcXHJcXG4gICAgICByZXR1cm4gaXNBY3RpdmUoKTtcXHJcXG4gICAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gICAgY29uc3QgdHJhY2tSZWN0ID0gcmVjdCggQ29tcG9uZW50cy5FbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudHMudHJhY2sgKTtcXHJcXG4gICAgY29uc3Qgc2xpZGVSZWN0ID0gcmVjdCggc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlICk7XFxyXFxuICAgIGNvbnN0IGxlZnQgICAgICA9IHJlc29sdmUoICdsZWZ0JywiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRydWUgKTtcXHJcXG4gICAgY29uc3QgcmlnaHQgICAgID0gcmVzb2x2ZSggJ3JpZ2giCiAgICAgICAgICAgICAgICAgICAgICAgIGIidCcsIHRydWUgKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIGZsb29yKCB0cmFja1JlY3RbICIKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWZ0IF0gKSA8PSBjZWlsKCBzbGlkZVJlY3RbIGxlZnQgXSApXFxyXFxuICAgICAgJicKICAgICAgICAgICAgICAgICAgICAgICAgYicmIGZsb29yKCBzbGlkZVJlY3RbIHJpZ2h0IF0gKSA8PSBjZWlsKCB0cmFja1JlY3RbIHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCBdICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGN1bGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVzIGhvdyBmYXIgdGhpcyBzbGlkZSBpcyBmcm9tIGFub3RoZXIgc2xpZGUgYW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRpc3RhbmNlIGlzIHdpdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gdGhlIGdpdmVuIG51bWJlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC0gQW4gaW5kZXggb2YgYSBiYXNlIHNsaWRlLlxcclxcbiAgICogQHBhcmFtIGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0YW5jZSAtIGB0cnVlYCBpZiB0aGUgc2xpZGUgaXMgd2l0aGluIHRoaXMgbnVtYmVyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpZGUgaXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dpdGhpbiB0aGUgYGRpc3RhbmNlYCBmcm9tIHRoZSBiYXNlIHNsaWRlLCBvciBvdGhlcncnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzV2l0aGluKCBmcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyICk6IGJvb2xlYW4ge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbGV0IGRpZmYgPSBhYnMoIGZyb20gLSBpbmRleCApO1xcclxcblxcclxcbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAhIGlzQ2xvbmUgJiYgKCBvcHRpb25zLnJld2luZCB8fCBTcGxpZGUuaXMoIExPT1AgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSApIHtcXHJcXG4gICAgICBkaWZmID0gbWluKCBkaWZmLCBTcGxpZGUubGVuZ3RoIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGRpZmYgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGlmZiA8PSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzdGFuY2U7XFxyXFxuICB9XFxyXFxuXFxyXFxuICBjb25zdCBzZWxmID0ge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaW5kZXgsXFxyXFxuICAgIHNsaWRlSW5kZXgsXFxyXFxuICAgIHNsaWRlLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgY29udGFpbmVyLFxcclxcbiAgICBpc0Nsb25lLFxcclxcbiAgICBtb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICAgIHVwZGF0ZSxcXHJcXG4gICAgc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlLFxcclxcbiAgICBpc1dpdGhpbixcXHJcXG4gIH07XFxyXFxuXFxyXFxuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNlbGY7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IERBVEFfQVRUUklCVVRFIH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2NvbnN0YW50cy9wcm9qZWN0JztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogVGhlIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgYXV0b3BsYXkgaW50ZXJ2YWwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cmF0aW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuNS4wXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCBjb25zdCBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSA9IGAkeyBEQVRBX0FUVFInCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUJVVEUgfS1pbnRlcnZhbGA7XFxyXFxuIiwiLyoqXFxyXFxuICogQWRkRXZlbnRMaXN0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXJPcHRpb25zIGZvciBsaXN0ZW5lcnMgdGhhdCBtYXkgcHJldmVudCB0aGUgYnJvd3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igc2Nyb2xsLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuNC4xXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyA9IHsgcGFzc2l2ZTogZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHNlLCBjYXB0dXJlOiB0cnVlIH07XFxyXFxuIiwiaW1wb3J0IHsgQVJST1dfRE9XTicKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIEFSUk9XX0xFRlQsIEFSUk9XX1JJR0hULCBBUlJPV19VUCB9IGZyb20gJy4uLy4uLy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9jb25zdGFudHMvYXJyb3dzJztcXHJcXG5pbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi90eXBlL3R5cGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWFwIHRvIGFzc29jaWF0ZSBhIG5vbi1zdGFuZGFyZCBuYW1lIHRvIHRoZSBzdGFuZGFyZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb25lLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCBjb25zdCBOT1JNQUxJWkFUSU9OX01BUCA9IHtcXHJcXG4gIFNwYWNlYmFyOiAnIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAnLFxcclxcbiAgUmlnaHQgICA6IEFSUk9XX1JJR0hULFxcclxcbiAgTGVmdCAgICA6IEEiCiAgICAgICAgICAgICAgICAgICAgICAgIGInUlJPV19MRUZULFxcclxcbiAgVXAgICAgICA6IEFSUk9XX1VQLFxcclxcbiAgRG93biAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBBUlJPV19ET1dOLFxcclxcbn07XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogTm9ybWFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZXMgdGhlIGtleS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBrZXkgLSBBIHN0cmluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgYSBLZXlib2FyZEV2ZW50IG9iamVjdC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQScKICAgICAgICAgICAgICAgICAgICAgICAgYicgbm9ybWFsaXplZCBrZXkuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpemVLZXkoIGtleTogc3RyaW5nIHwgS2V5Ym9hcmRFdmVudCApOiBzdHJpbmcgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGtleSA9IGlzU3RyaW5nKCBrZXkgKSA/IGtleSA6IGtleS5rZXk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIE5PUk1BTElaQVRJT05fTUFQWyBrZXkgXSB8fCBrZXk7XFxyXFxufSIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJpbXBvcnQgeyBBUlJPV19MRUZULCBBUlJPV19SSUdIVCB9IGZyb20gXCcuLi8uLi9jb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiInRhbnRzL2Fycm93cyc7XFxyXFxuaW1wb3J0IHsgRVZFTlRfTU9WRSwgRVZFTlRfVVBEIgogICAgICAgICAgICAgICAgICAgICAgICBiIkFURUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgIgogICAgICAgICAgICAgICAgICAgICAgICBiInsgRXZlbnRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBuZXh0VGljayB9IGZyb20gJy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgbm9ybWFsaXplS2V5IH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL3V0aWxzL2RvbS9ub3JtYWxpemVLZXkvbm9ybWFsaXplS2V5JztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIEtleWJvYXJkIGNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGludGVyZmFjZSBLZXlib2FyZENvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IHtcXHJcXG4gIGRpc2FibGUoIGRpc2FibGVkOiBib29sZWFuICk6IHZvaWQ7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUga2V5Ym9hcmQgZXZlbnQgbmFtZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy42LjBcXHJcXG4gKi9cXHJcXG5jb25zdCBLJwogICAgICAgICAgICAgICAgICAgICAgICBiIkVZQk9BUkRfRVZFTlQgPSAna2V5ZG93bic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSBjb21wb25lbnQgZm9yIGNvbnRyb2xsaW5nIHRoZSBzbGlkZXIgYnkga2V5Ym9hcmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EgS2V5Ym9hcmQgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIEtleWJvYXJkKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogS2V5Ym9hcmRDb21wb25lbnQge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNvbnN0IHsgb24sIGJpbmQsIHVuYmluZCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKTtcXHJcXG4gIGNvbnN0IHsgcm9vdCB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVzb2x2ZSB9ID0gQ29tcG9uZW50cy5EaXJlY3Rpb247XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBUaGUgdGFyZ2V0IGVsZW1lbnQgb2YgdGhlIGtleWJvYXJkIGV2ZW50LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgbGV0IHRhcmdldDogV2luZG93IHwgSFRNTEVsZW1lbnQ7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudCBpcyBjdXJyZW50bHkgZGlzYWJsZWQgb3Igbm90LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgbGV0IGRpc2FibGVkOiBib29sZWFuO1xcclxcblxcclxcbiAgLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGluaXQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIG9uKCBFVkVOVF9VUERBVEVELCBkZXN0cm95ICk7XFxyXFxuICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyggRVZFTlRfVVBEQVRFRCwgaW5pdCApO1xcclxcbiAgICBvbiggRVZFTlRfTU9WRSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uTW92ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGl6ZXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHsga2V5Ym9hcmQgfSA9IG9wdGlvbnM7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBpZiAoIGtleWJvYXJkICkge1xcclxcbiAgICAgIHRhcmdldCA9IGsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXlib2FyZCA9PT0gJ2dsb2JhbCcgPyB3aW5kb3cgOiByb290O1xcclxcbiAgICAgIGIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kKCB0YXJnZXQsIEtFWUJPQVJEX0VWRU5ULCBvbktleWRvd24gKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb21wb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Qge1xcclxcbiAgICB1bmJpbmQoIHRhcmdldCwgS0VZQk9BUkRfRVZFTlQgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERpc2FibGVzIHRoZSBrZXlib2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmQgaW5wdXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gVG9nZ2xlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlzYWJsaW5nL2VuYWJsaW5nIHRoZSBrZXlib2FyZCBpbnB1dC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGRpc2FibGUoIHZhbHVlOiBib29sZWFuICk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgZGlzYWJsZWQgPSB2YWx1ZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBzbGlkZXIgbW92ZXMuXFxyXFxuICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVG8gYXZvaWQgdGhlIHNsaWRlciBmcm9tIG1vdmluZyB0d2ljZSwgd2FpdCBmb3IgYSB0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidjay5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25Nb3ZlKCk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgY29uc3QgX2Rpc2FibGVkID0gZGlzYWJsZWQ7XFxyXFxuICAgIGRpc2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCA9IHRydWU7XFxyXFxuICAgIG5leHRUaWNrKCAoKSA9PiB7IGRpc2FibGVkID0gXycKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNhYmxlZCB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsZWQgd2hlbiBhbnkga2V5IGlzIHByZXNzZWQgb24gdGhlIHRhcmdldC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIEtleWJvYXJkRXZlbnQgb2JqZWN0LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25LZXlkb3duKCBlOiBLZXlib2FyZEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAhIGRpc2FibGVkICkge1xcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBrZXkgPSBub3JtYWxpemVLZXkoIGUgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBrZXkgPT09IHJlc29sdmUoIEFSUk9XX0xFRlQgKSApIHtcXHJcXG4gICAgICAgIFNwJwogICAgICAgICAgICAgICAgICAgICAgICBiImxpZGUuZ28oICc8JyApO1xcclxcbiAgICAgIH0gZWxzZSBpZiAoIGtleSA9PT0gcmVzIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9sdmUoIEFSUk9XX1JJR0hUICkgKSB7XFxyXFxuICAgICAgICBTcGxpZGUuZ28oICc+IgogICAgICAgICAgICAgICAgICAgICAgICBiIicgKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4gICAgZGVzdHJveSxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRpc2FibGUsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBEQVRBJwogICAgICAgICAgICAgICAgICAgICAgICBiIl9BVFRSSUJVVEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcHJvamVjdCc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzcmMgdmFsdWUuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IFNSQ19EQVRBX0FUVFJJQlVURSA9IGAkeyBEQVRBX0FUVFJJQicKICAgICAgICAgICAgICAgICAgICAgICAgYidVVEUgfS1sYXp5YDtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgZGF0YSBhdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYididXRlIGZvciB0aGUgc3Jjc2V0IHZhbHVlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTUkNTRVRfREFUQV9BVFRSSUJVVEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gYCR7IFNSQ19EQVRBX0FUVFJJQlVURSB9LXNyY3NldGA7XFxyXFxuXFxyXFxuLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIFRoZSBzZWxlY3RvciBzdHJpbmcgZm9yIGltYWdlcyB0byBsb2FkLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgSU1BR0VfU0VMRUNUT1IgPSBgWyR7IFNSQ19EQVRBX0FUVFJJQlVURSB9XSwgWyR7IFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkNTRVRfREFUQV9BVFRSSUJVVEUgfV1gO1xcclxcbiIsImltcG9ydCB7IEFSSUFfT1InCiAgICAgICAgICAgICAgICAgICAgICAgIGIiSUVOVEFUSU9OIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2F0dHJpYnV0ZXMnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5pbXBvcnQgeyBUVEIgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGlyZWN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBFVkVOVF9DTElDSyxcXHJcXG4gIEVWRU5UIgogICAgICAgICAgICAgICAgICAgICAgICBiJ19NT1VOVEVELFxcclxcbiAgRVZFTlRfTU9WRSxcXHJcXG4gIEVWRU5UX05BVklHQVRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX01PVU5URUQsXFxyXFxuICBFVkVOVF9TTElERV9LRVlET1dOLFxcclxcbiAgRVZFTlRfVScKICAgICAgICAgICAgICAgICAgICAgICAgYiJQREFURUQsXFxyXFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgTE9PUCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltcG9ydCB7IEV2ZW50SW50ZXJmYWNlLCBFdmVudEludGVyZmFjZU9iamVjdCB9IGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIicG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5pbXBvcnQgeyBhcHBseSwgZW1wdHksIGluY2x1ZGVzLCBpc1VuZGVmaW5lJwogICAgICAgICAgICAgICAgICAgICAgICBiImQsIHByZXZlbnQsIHNldEF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuaW1wb3J0IHsgbm9ybWFsaXplS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL25vcm0iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYWxpemVLZXkvbm9ybWFsaXplS2V5JztcXHJcXG5pbXBvcnQgeyBTbGlkZUNvbXBvbmUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibnQgfSBmcm9tICcuLi9TbGlkZXMvU2xpZGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU3luYyBjb21wb25lbnQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UgU3luY0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbW91bnQoKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGtlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lzIGZvciB0cmlnZ2VyaW5nIHRoZSBuYXZpZ2F0aW9uIHNsaWRlLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmNvbnN0IFRSSUdHRVJfS0VZUyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJbICcgJywgJ0VudGVyJyBdO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wbyIKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50IGZvciBzeW5jaW5nIG11bHRpcGxlIHNsaWRlcnMuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIFN5bmMgY29tcG9uZW50IG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIFN5bmMoIFNwbGlkZTogU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBTeW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IGlzTmF2aWdhdGlvbiwgc2xpZGVGb2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXMgfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0b3JlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQgb2JqZWN0cy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgZXZlbnRzOiBFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJbnRlcmZhY2VPYmplY3RbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIFNwbGlkZS5zcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlcy5mb3JFYWNoKCB0YXJnZXQgPT4ge1xcclxcbiAgICAgIGlmICggISB0YXJnZXQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzUGFyZW50ICkge1xcclxcbiAgICAgICAgc3luYyggU3BsaWRlLCB0YXJnZXQuc3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSApO1xcclxcbiAgICAgICAgc3luYyggdGFyZ2V0LnNwbGlkZSwgU3BsaWRlICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcblxcclxcbiAgICBpZiAoIGlzTmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmlnYXRpb24gKSB7XFxyXFxuICAgICAgbmF2aWdhdGUoKTtcXHJcXG4gICAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBldmVudHMuZm9yRWFjaCggZXZlbnQgPT4geyBldmVudC5kZXN0cm95KCkgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgZW1wdHkoIGV2ZW50cyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogUmVtb3VudHMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQGludGVybmFsXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHJlbW91bnQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBkZXN0cm95KCk7XFxyXFxuICAgIG1vdW50KCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTeW5jcyB0aGUgY3VycmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaW5kZXggd2l0aCBhIHByb3ZpZGVkIGNoaWxkIHNwbGlkZSBpbnN0YW5jZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHNwbGlkZSAtIEEgc3BsaWRlIGluc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0byBzeW5jIHdpdGguXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gQSB0YXJnZXQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZSBpbnN0YW5jZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gc3luYyggc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTogU3BsaWRlLCB0YXJnZXQ6IFNwbGlkZSApOiB2b2lkIHtcXHJcXG4gICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIHNwbGlkZSApO1xcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXZlbnQub24oIEVWRU5UX01PVkUsICggaW5kZXgsIHByZXYsIGRlc3QgKSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICAgIHRhcmdldC5nbyggdGFyZ2V0LmlzKCBMT09QICkgPyBkZXN0IDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4ICk7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgZXZlbnRzLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBldmVudCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBNYWtlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVzIGNsaWNrYWJsZSBhbmQgbW92ZXMgdGhlIHNsaWRlciB0byB0aGUgaW5kZXggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29mIGNsaWNrZWQgc2xpZGUuXFxyXFxuICAgKiBOb3RlIHRoYXQgdGhlIGRpcmVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gb2YgYG1lbnVgIGlzIGltcGxpY2l0bHkgYHZlcnRpY2FsYCBhcyBkZWZhdWx0LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbmF2aWdhdGUoKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBjb25zdCBldmVudCA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGNvbnN0IHsgb24gfSA9IGV2ZW50O1xcclxcblxcclxcbiAgICBvbiggRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMSUNLLCBvbkNsaWNrICk7XFxyXFxuICAgIG9uKCBFVkVOVF9TTElERV9LRVlET1dOJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgb25LZXlkb3duICk7XFxyXFxuICAgIG9uKCBbIEVWRU5UX01PVU5URUQsIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19VUERBVEVEIF0sIHVwZGF0ZSApO1xcclxcblxcclxcbiAgICBldmVudHMucHVzaCggZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ICk7XFxyXFxuICAgIGV2ZW50LmVtaXQoIEVWRU5UX05BVklHQVRJT05fTU9VTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIFNwbGlkZS5zcGxpZGVzICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBVcGRhdGUgYXR0cmlidXRlcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5FbGVtZW50cy5saXN0LCBBUklBX09SSUVOVEFUSU9OLCBvcHRpb25zLmRpcmVjdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiPT09IFRUQiA/ICd2ZXJ0aWNhbCcgOiAnJyApO1xcclxcbiAgfVxcclxcblxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIG5hdmlnYXRpb24gc2xpZGUgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsaWNrZWQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIFNsaWRlIC0gQSBjbGljaycKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCBTbGlkZSBjb21wb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG9uQ2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NrKCBTbGlkZTogU2xpZGVDb21wb25lbnQgKTogdm9pZCB7XFxyXFxuICAgIFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UuZ28oIFNsaWRlLmluZGV4ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBDYWxsZWQgd2hlbiBhbnkga2V5IGlzIHByZXNzZWQgb24gdGhlIG5hdmlnYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNsaWRlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBTbGlkZSAtIEEgU2xpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudC5cXHJcXG4gICAqIEBwYXJhbSBlICAgICAtIEEgS2V5Ym9hcmRFdmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbktleWRvd24oIFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogU2xpZGVDb21wb25lbnQsIGU6IEtleWJvYXJkRXZlbnQgKTogdm9pZCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBpZiAoIGluY2x1ZGVzKCBUUklHR0VSX0tFWVMsIG5vcm1hbGl6ZUtleSggZSApICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpICkge1xcclxcbiAgICAgIG9uQ2xpY2soIFNsaWRlICk7XFxyXFxuICAgICAgcHJldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHNldHVwOiBhcHBseShcXHJcXG4gICAgICBDb21wb25lbnRzLk1lZGlhJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zZXQsXFxyXFxuICAgICAgeyBzbGlkZUZvY3VzOiBpc1VuZGVmaW5lZCggc2xpZGVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMgKSA/IGlzTmF2aWdhdGlvbiA6IHNsaWRlRm9jdXMgfSxcXHJcXG4gICAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZVxcclxcbiAgICApLFxcclxcbiAgICBtb3VudCxcXHJcXG4gICAgZGVzdHJveSxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIHJlbW91bnQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvbWVkaWEnO1xcclxcbmltcG9ydCB7IENSRUFURUQsIERFU1RST1lFRCB9IGZyb20gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEJpbmRlciIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwIgogICAgICAgICAgICAgICAgICAgICAgICBiImVzJztcXHJcXG5pbXBvcnQgeyBtZXJnZSwgb21pdCwgb3duS2V5cyB9IGZyb20gJy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGludGVyZmFjZSBmb3IgdGhlIE1lZGlhIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAc2luY2UgNC4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIE1lZGlhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgLyoqIEBpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuYWwgKi9cXHJcXG4gIHJlZHVjZSggcmVkdWNlZDogYm9vbGVhbiApOiB2b2lkO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHNldCggb3B0aW9uczogT3B0aW9ucywgYmFzZT86IGJvb2xlYW4sIG5vdGlmeT86ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidib29sZWFuICk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50IGZvciBvYnNlcnZpbmcgbWVkaWEgcXVlcmllcyBhbmQgdXBkYXRpbmcgb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgaWYgbmVjZXNzYXJ5LlxcclxcbiAqIFRoaXMgdXNlZCB0byBiZSB0aGUgT3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEByZXR1cm4gQSBNZWRpYSBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgZnVuY3Rpb24gTWVkaWEoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBNZWRpYUNvbXBvbmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgY29uc3QgeyBzdGF0ZSB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgYnJlYScKICAgICAgICAgICAgICAgICAgICAgICAgYidrcG9pbnRzICAgPSBvcHRpb25zLmJyZWFrcG9pbnRzIHx8IHt9O1xcclxcbiAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHJlZHVjZWRNb3Rpb24gPSBvcHRpb25zLnJlZHVjZWRNb3Rpb24gfHwge307XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgY29uc3QgYmluZGVyICAgICAgICA9IEV2ZW50QmluZGVyKCk7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXFxyXFxuICAgKiBTdG9yZXMgb3B0aW9ucyBhbmQgTWVkaWFRdWVyeUxpc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgcXVlcmllczogQXJyYXk8WyBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucywgTWVkaWFRdWVyeUxpc3QgXT4gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgY29uc3RydWN0ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzZXR1cCgpOiB2b2lkIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgIGNvbnN0IGlzTWluID0gb3B0aW9ucy5tZWRpYVF1ZXJ5ID09PSAnbWluJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIG93bktleXMoIGJyZWFrcG9pbnRzIClcXHJcXG4gICAgICAuc29ydCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICggbiwgbSApID0+IGlzTWluID8gK24gLSArbSA6ICttIC0gK24gKVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAuZm9yRWFjaCgga2V5ID0+IHtcXHJcXG4gICAgICAgIHJlZ2lzdGVyKCBicmVha3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIib2ludHNbIGtleSBdLCBgKCR7IGlzTWluID8gJ21pbicgOiAnbWF4JyB9LXdpZHRoOiR7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYidrZXkgfXB4KWAgKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuXFxyXFxuICAgIHJlZ2lzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciggcmVkdWNlZE1vdGlvbiwgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTiApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgdXBkYXRlKCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidEZXN0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcGxldGVseSAtIFdpbGwgYmUgYHRydWVgIGZvciBjb21wbGV0ZSBkZXN0cnVjdGlvbi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koIGNvbXBsZXRlbHk6IGJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWFuICk6IHZvaWQge1xcclxcbiAgICBpZiAoIGNvbXBsZXRlbHkgKSB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGJpbmRlci5kZXN0cm95KCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAvKipcXHJcXG4gICAqIFJlZ2lzdGVycyBlbnRyaWVzIGFzIFsgT3B0aW9ucywgbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlhIHF1ZXJ5IHN0cmluZyBdLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducyAtIE9wdGlvbnMgbWVyZ2VkIHRvIGN1cnJlbnQgb3B0aW9ucyB3aGVuIHRoZSBkb2N1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnQgbWF0Y2hlcyB0aGUgcXVlcnkuXFxyXFxuICAgKiBAcGFyYW0gcXVlcnkgICAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBIHF1ZXJ5IHN0cmluZy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVnaXN0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBvcHRpb25zOiBPcHRpb25zLCBxdWVyeTogc3RyaW5nICk6IHZvaWQge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgY29uc3QgcXVlcnlMaXN0ID0gbWF0Y2hNZWRpYSggcXVlcnkgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGJpbmRlci5iaW5kKCBxdWVyeUxpc3QsICdjaGFuZ2UnLCB1cGRhdGUgKTtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHF1ZXJpZXMucHVzaCggWyBvcHRpb25zLCBxdWVyeUxpc3QgXSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGFsbCBtZWRpYSBxdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmllcyBpbiBlbnRyaWVzIGFuZCB1cGRhdGVzIG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBmdW5jdGlvbiB1cGRhdGUoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgYid5ZWQgPSBzdGF0ZS5pcyggREVTVFJPWUVEICk7XFxyXFxuICAgIGNvbnN0IGRpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gPSBvcHRpb25zLmRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgbWVyZ2VkID0gcScKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZXJpZXMucmVkdWNlPE9wdGlvbnM+KCAoIG1lcmdlZCwgZW50cnkgKSA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIHJldHVybiBtZXJnZSggbWVyZ2VkLCBlbnRyeVsgMSBdLm1hdGNoZXMgPyBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cnlbIDAgXSA6IHt9ICk7XFxyXFxuICAgIH0sIHt9ICk7XFxyXFxuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbWl0KCBvcHRpb25zICk7XFxyXFxuICAgIHNldCggbWVyZ2VkICk7XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBpZiAoIG9wdGlvbnMuZGVzdHJveSApIHtcXHJcXG4gICAgICBTcGxpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICBiImRlc3Ryb3koIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2NvbXBsZXRlbHknICk7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGVsc2UgaWYgKCBkZXN0cm95ZWQgKSB7XFxyXFxuICAgICAgZGVzdHJveSggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUgKTtcXHJcXG4gICAgICBTcGxpZGUubW91bnQoKTtcXHJcXG4gICAgfSBlbHNlIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgZGlyZWN0aW9uICE9PSBvcHRpb25zLmRpcmVjdGlvbiAmJiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnJlZnJlc2goKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogRGlzYWJsZXMgb3IgZW5hYmxlcyBgcmVkdWNlZE1vdGlvbmAgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgZG9jdW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IGRvZXMgbm90IG1hdGNoIHRoZSBxdWVyeS5cXHJcXG4gICAqXFxyXFxuICAgKiBAaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVybmFsXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGVuYWJsZSAtIERldGVybWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHdoZXRoZXIgdG8gYXBwbHkgYHJlZHVjZWRNb3Rpb25gIG9wdGlvbnMgb3Igbm90LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVkdWNlKCBlbmFibGU6IGJvb2xlYW4gKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICBpZiAoIG1hdGNoTWVkaWEoIE1FRElBX1BSRUZFUlNfUicKICAgICAgICAgICAgICAgICAgICAgICAgYidFRFVDRURfTU9USU9OICkubWF0Y2hlcyApIHtcXHJcXG4gICAgICBlbmFibGUgPyBtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2UoIG9wdGlvbnMsIHJlZHVjZWRNb3Rpb24gKSA6IG9taXQoIG9wdGlvbnMsIG93bktlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lzKCByZWR1Y2VkTW90aW9uICkgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogU2V0cyBjdXJyZW50IG9wdGlvbnMgb3IgYmFzZSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucyAocHJvdG90eXBlKS5cXHJcXG4gICAqIElmIGNoYW5naW5nIGJhc2Ugb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMsIGFsd2F5cyBlbWl0cyB0aGUgYHVwZGF0ZWRgIGV2ZW50LlxcclxcbiAgICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAaW50ZXJuYWxcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gb3B0cyAgIC0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05ldyBvcHRpb25zLlxcclxcbiAgICogQHBhcmFtIGJhc2UgICAtIE9wdGlvbmFsLiBEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0ZXJtaW5lcyB3aGV0aGVyIHRvIGFsc28gdXBkYXRlIGJhc2Ugb3B0aW9ucyBvciBub3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICogQHBhcmFtIG5vdGlmeSAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHdheXMgZW1pdHMgdGhlIGB1cGRhdGVgIGV2ZW50LlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gc2V0KCBvcHRzOiBPcHRpb25zLCBiYXNlPzogYm9vbGVhbiwgbm90aWZ5PzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Jvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIG1lcmdlKCBvcHRpb25zLCBvcHRzICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBiYXNlICYmIG1lcmdlKCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zICksIG9wdHMgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBub3RpZnkgfHwgISBzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUuaXMoIENSRUFURUQgKSApIHtcXHJcXG4gICAgICBTcGxpZGUuZW1pdCggRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1VQREFURUQsIG9wdGlvbnMgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiB7XFxyXFxuICAgIHNldHVwLFxcclxcbiAgICBkZXN0cm95LFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmVkdWNlLFxcclxcbiAgICBzZXQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb3J0IHsgQUxMX0FUVFJJQlVURVMsIEFSSUFfTEFCRUwsIEFSSUFfTEFCRUxMRURCWSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEFSSUFfUk9MRURFU0NSSVBUSU9OLCBST0xFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhdHRyaWJ1dGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgQ0xBU1NfQUNUSVZFLFxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIENMQVNTX0FSUk9XX05FWFQsXFxyXFxuICBDTEFTU19BUlJPV19QUkVWLFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIENMQVNTX0FSUk9XUyxcXHJcXG4gIENMQVNTX0NMT05FLFxcclxcbiAgQ0xBU1NfRk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1VTX0lOLFxcclxcbiAgQ0xBU1NfTElTVCxcXHJcXG4gIENMQVNTX1BBR0lOQVRJT04sXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgQ0xBU1NfUFJPR1JFU1NfQkFSLFxcclxcbiAgQ0xBU1NfUk9PVCxcXHJcXG4gIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19TTElERSxcXHJcXG4gIENMQVNTX1RPR0dMRSxcXHJcXG4gIENMQVNTX1RSQUNLLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jbGFzc2VzJztcXHJcXG5pbXBvcnQgIgogICAgICAgICAgICAgICAgICAgICAgICBiInsgRVZFTlRfUkVGUkVTSCwgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBQUk9KRUNUX0NPREUgfSBmcm9tICcuLi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBhZGRDbGFzcyxcXHJcXG4gIGFzc2VydCIKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBhc3NpZ24sXFxyXFxuICBjaGlsZCxcXHJcXG4gIGNoaWxkcmVuLFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGVtcHR5LFxcclxcbiAgZm9yT3duLFxcclxcbiAgZ2V0QXR0cmlidXRlLFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIHB1c2gsXFxyXFxuICBxdWVyeSxcXHJcXG4gIHJlbW92ZUF0dHJpYnV0ZSxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICByZW1vdmVDbGFzcyxcXHJcXG4gIHNldEF0dHJpYnV0ZSxcXHJcXG4gIHRvZ2dsZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGFzcyxcXHJcXG4gIHVuaXF1ZUlkLFxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnIgogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5pbXBvcnQgeyBjbG9zZXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL2NsIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9zZXN0L2Nsb3Nlc3QnO1xcclxcbmltcG9ydCB7IFBPSU5URVJfRE9XTl9FVkVOVFMgIgogICAgICAgICAgICAgICAgICAgICAgICBiIn0gZnJvbSAnLi4vRHJhZy9jb25zdGFudHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBlbGVtZW50cyB3aGljaCB0aGUgc2xpZGVyIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzaXN0cyBvZi5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRDb2xsZWN0aW9uIHtcXHJcXG4gIHJvb3Q6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBIVE1MRWxlbWVudDtcXHJcXG4gIHRyYWNrOiBIVE1MRWxlbWVudDtcXHJcXG4gIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBIVE1MRWxlbWVudDtcXHJcXG4gIHNsaWRlczogSFRNTEVsZW1lbnRbXTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcnJvd3M/OiBIVE1MRWxlbWVudDtcXHJcXG4gIHBhZ2luYXRpb24/OiBIVE1MVUxpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0RWxlbWVudDtcXHJcXG4gIHByZXY/OiBIVE1MQnV0dG9uRWxlbWVudDtcXHJcXG4gIG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3h0PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XFxyXFxuICBiYXI/OiBIVE1MRWxlbWVudDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICB0b2dnbGU/OiBIVE1MRWxlbWVudDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBFbGVtZW50cyBjb21wb25lbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2UgRWxlbWVudHNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50LCBFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudENvbGxlY3Rpb24ge1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCB0aGF0IGNvbGxlY3RzIGFuZCBoYW5kbGVzIGVsZW1lbnRzIHdoaWNoIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVyIGNvbnNpc3RzIG9mLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEByZXR1cm4gQW4gRWxlbWVudHMgY29tcG9uZW50IG9iamVjdC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIEVsZW1lbnRzKCBTcGxpZGU6IFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgb24sIGJpbmQgfSA9IEV2ZW50SScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCB7IHJvb3QgfSA9IFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBjb25zdCB7IGkxOG4gfSA9IG9wdGlvbnM7XFxyXFxuICBjb25zdCBlbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHM6IEVsZW1lbnRDb2xsZWN0aW9uID0ge30gYXMgRWxlbWVudENvbGxlY3Rpb247XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIHNsaWRlIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3Qgc2xpZGVzOiBIVE1MRWxlbWVudFtdID0gWycKICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIHJvb3QgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCByb290Q2xhc3Nlczogc3RyaW5nW10gPSBbJwogICAgICAgICAgICAgICAgICAgICAgICBiJ107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0b3JlcyBhbGwgbGlzdCBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Nlcy5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHRyYWNrQ2xhc3Nlczogc3RyaW5nW10gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSB0cmFjayBlbGVtZW50LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgbGV0IHRyYWNrOiBIVE1MRWxlbWVudDtcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIFRoZSBsaXN0IGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBsZXQgbGlzdDogSFRNTEVsZW1lbnQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBUdXJucyBpbnRvIGB0cnVlYCB3aGVuIGRldGVjdGluZyBrZXlkb3duLCBhbmQgYGZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xzZWAgd2hlbiBkZXRlY3RpbmcgcG9pbnRlcmRvd24uXFxyXFxuICAgKi9cXHJcXG4gIGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQgaXNVc2luZ0tleTogYm9vbGVhbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgY29uc3RydWN0ZWQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBzZXR1cCgpOiB2b2lkIHtcXHJcXG4gICAgY29sbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcXHJcXG4gICAgaW5pdCgpO1xcclxcbiAgICB1cGRhdGUoKTtcXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgb24oIEVWRU5UX1JFRlJFU0gsIGRlc3Ryb3kgKTtcXHJcXG4gICAgb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRUZSRVNILCBzZXR1cCApO1xcclxcbiAgICBvbiggRVZFTlRfVVBEQVRFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QsIHVwZGF0ZSApO1xcclxcblxcclxcbiAgICBiaW5kKCBkb2N1bWVudCwgYCR7IFBPSU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVEVSX0RPV05fRVZFTlRTIH0ga2V5ZG93bmAsIGUgPT4ge1xcclxcbiAgICAgIGlzVXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5nS2V5ID0gZS50eXBlID09PSAna2V5ZG93bic7XFxyXFxuICAgIH0sIHsgY2FwdHUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIicmU6IHRydWUgfSApO1xcclxcblxcclxcbiAgICBiaW5kKCByb290LCAnZm9jdXNpbicsICIKICAgICAgICAgICAgICAgICAgICAgICAgYicoKSA9PiB7XFxyXFxuICAgICAgdG9nZ2xlQ2xhc3MoIHJvb3QsIENMQVNTX0ZPQ1VTXycKICAgICAgICAgICAgICAgICAgICAgICAgYidJTiwgISEgaXNVc2luZ0tleSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBEZXN0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcGFyYW0gY29tcGxldGVseSAtIFdoZXRoZXIgdG8gZGVzdHJveSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIGNvbXBvbmVudCBjb21wbGV0ZWx5IG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGRlc3Ryb3koIGNvbXBsZXRlbHk/OiBib29sZWFuICk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgY29uc3QgYXR0cnMgPSBBTExfQVRUUklCVVRFUy5jb25jYXQoICdzdHlsZScgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuXFxyXFxuICAgIGVtcHR5KCBzbGlkZXMgKTtcXHJcXG4gICAgcmVtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NsYXNzKCByb290LCByb290Q2xhc3NlcyApO1xcclxcbiAgICByZW1vdmVDbGFzcyggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrLCB0cmFja0NsYXNzZXMgKTtcXHJcXG4gICAgcmVtb3ZlQXR0cmlidXRlKCBbJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmFjaywgbGlzdCBdLCBhdHRycyApO1xcclxcbiAgICByZW1vdmVBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiIiByb290LCBjb21wbGV0ZWx5ID8gYXR0cnMgOiBbICdzdHlsZScsIEFSSUFfUk9MRURFU0MiCiAgICAgICAgICAgICAgICAgICAgICAgIGInUklQVElPTiBdICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVzIHRoZSBzdGF0dXMgb2YgZWxlbWVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiB1cGRhdGUoKTogdm9pZCB7XFxyXFxuICAgIHJlbW92ZUNsYXNzKCByb290LCByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29vdENsYXNzZXMgKTtcXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIHRyYWNrLCB0cmFja0NsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzICk7XFxyXFxuXFxyXFxuICAgIHJvb3RDbGFzc2VzICA9IGdldENsYXNzZXMoIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19ST09UICk7XFxyXFxuICAgIHRyYWNrQ2xhc3NlcyA9IGdldENsYXNzZXMoIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19UUkFDSyApO1xcclxcblxcclxcbiAgICBhZGRDbGFzcyggcm9vdCwgcm9vdENsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzICk7XFxyXFxuICAgIGFkZENsYXNzKCB0cmFjaywgdHJhY2tDbGFzc2VzICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBzZXRBdHRyaWJ1dGUoIHJvb3QsIEFSSUFfTEFCRUwsIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zLmxhYmVsICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZSggcm9vdCwgQVJJQV9MQUJFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xMRURCWSwgb3B0aW9ucy5sYWJlbGxlZGJ5ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXFxyXFxuICAgKiBDb2xsZWN0cyBlbGVtZW50cyB3aGljaCB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zaXN0cyBvZi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY29sbGVjdCgpOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndm9pZCB7XFxyXFxuICAgIHRyYWNrID0gZmluZCggYC4keyBDTEFTU19UUkFDSyB9YCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgbGlzdCAgPSBjaGlsZCggdHJhY2ssIGAuJHsgQ0xBU1NfTElTVCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIifWAgKTtcXHJcXG5cXHJcXG4gICAgYXNzZXJ0KCB0cmFjayAmJiBsaXN0LCAnQSB0cmFjayIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvbGlzdCBlbGVtZW50IGlzIG1pc3NpbmcuJyApO1xcclxcbiAgICBwdXNoKCBzbGlkZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBjaGlsZHJlbiggbGlzdCwgYC4keyBDTEFTU19TTElERSB9Om5vdCguJHsgQ0xBU1NfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMT05FIH0pYCApICk7XFxyXFxuXFxyXFxuICAgIGZvck93bigge1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhcnJvd3MgICAgOiBDTEFTU19BUlJPV1MsXFxyXFxuICAgICAgcGFnaW5hdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NMQVNTX1BBR0lOQVRJT04sXFxyXFxuICAgICAgcHJldiAgICAgIDogQ0xBU1NfQVJSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09XX1BSRVYsXFxyXFxuICAgICAgbmV4dCAgICAgIDogQ0xBU1NfQVJST1dfTkVYVCxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgYmFyICAgICAgIDogQ0xBU1NfUFJPR1JFU1NfQkFSLFxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB0b2dnbGUgICAgOiBDTEFTU19UT0dHTEUsXFxyXFxuICAgIH0sICggY2xhc3NOYW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSwga2V5ICkgPT4ge1xcclxcbiAgICAgIGVsZW1lbnRzWyBrZXkgXSA9IGZpbmQoIGAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLiR7IGNsYXNzTmFtZSB9YCApO1xcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NpZ24oIGVsZW1lbnRzLCB7IHJvb3QsIHRyYWNrLCBsaXN0LCBzbGlkZXMgfSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5pdGlhbGl6ZXMgZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VudGlhbCBlbGVtZW50cy5cXHJcXG4gICAqIE5vdGUgdGhhdCBkbyBub3QgY2hhbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0aGUgcm9sZSBvZiB0aGUgcm9vdCBlbGVtZW50LFxcclxcbiAgICogd2hpY2ggcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZXMgdGhlIHJlZ2lvbiBmcm9tIHRoZSBhY2Nlc3NpYmlsaXR5IHRyZWUuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcclxcbiAgICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWQgICA9IHJvb3QuaWQgfHwgdW5pcXVlSWQoIFBST0pFQ1RfQ09ERSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY29uc3Qgcm9sZSA9IG9wdGlvbnMucm9sZTtcXHJcXG5cXHJcXG4gICAgcm9vdC5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgID0gaWQ7XFxyXFxuICAgIHRyYWNrLmlkID0gdHJhY2suaWQgfHwgYCR7IGlkIH0tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrYDtcXHJcXG4gICAgbGlzdC5pZCAgPSBsaXN0LmlkIHx8IGAkeyBpZCB9LWxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YDtcXHJcXG5cXHJcXG4gICAgaWYgKCAhIGdldEF0dHJpYnV0ZSggcm9vdCwgUk9MRSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKSAmJiByb290LnRhZ05hbWUgIT09ICdTRUNUSU9OJyAmJiByb2xlICkge1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBzZXRBdHRyaWJ1dGUoIHJvb3QsIFJPTEUsIHJvbGUgKTtcXHJcXG4gICAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gICAgc2V0QXR0cmlidXRlKCByb290LCBBUklBX1JPTEVERVNDUklQVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJT04sIGkxOG4uY2Fyb3VzZWwgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBsaXN0LCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgUk9MRSwgJ3ByZXNlbnRhdGlvbicgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEZpbmRzIGFuIGVsZW1lbnQgb25seSBpbiB0aGlzIHNsaWRlciwgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnbm9yaW5nIGVsZW1lbnRzIGluIGEgbmVzdGVkIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHJldHVybiBBIGZvdW5kIGVsZW1lbnQgb3IgbnVsbC5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIGZpbmQoIHNlbGVjdG9yOiBzdHJpbmcgKTogSFRNTEVsZW1lbnQgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdW5kZWZpbmVkIHtcXHJcXG4gICAgY29uc3QgZWxtID0gcXVlcnk8SFRNTEVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0Piggcm9vdCwgc2VsZWN0b3IgKTtcXHJcXG4gICAgcmV0dXJuIGVsbSAmJiBjbG9zZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCggZWxtLCBgLiR7IENMQVNTX1JPT1QgfWAgKSA9PT0gcm9vdCA/IGVsbSA6IHVuZGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZWQ7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybiBhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXkgd2l0aCBtb2RpZmllciBjbGFzc2VzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gYmFzZSAtIEEgYmFzZSBjbGFzcyBuYW1lLlxcclxcbiAgICpcXHJcXG4gICAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIEFuIGFycmF5IHdpdGggY2xhc3Nlcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGdldENsYXNzZXMoIGJhc2U6IHN0cmluZyApOiBzdHJpbmdbXSB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gW1xcclxcbiAgICAgIGAkeyBiYXNlIH0tLSR7IG9wdGlvbnMudHlwZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfWAsXFxyXFxuICAgICAgYCR7IGJhc2UgfS0tJHsgb3B0aW9ucy5kaXJlY3Rpb24gfWAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICAgIG9wdGlvbnMuZHJhZyAmJiBgJHsgYmFzZSB9LS1kcmFnZ2FibGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCxcXHJcXG4gICAgICBvcHRpb25zLmlzTmF2aWdhdGlvbiAmJiBgJHsgYmFzZSB9LS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmF2YCxcXHJcXG4gICAgICBiYXNlID09PSBDTEFTU19ST09UICYmIENMQVNTX0FDVEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkUsXFxyXFxuICAgIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4gYXNzaWduKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxlbWVudHMsIHtcXHJcXG4gICAgc2V0dXAsXFxyXFxuICAgIG1vdW50LFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVzdHJveSxcXHJcXG4gIH0gKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJzRnVuY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJtYXRjaGVzIH0gZnJvbSAnLi4vbWF0Y2hlcy9tYXRjaGVzJztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogU3RhcnRzIGZyb20gdGhlIHByb3ZpZGVkIGVsZW1lbnQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWFyY2hlcyBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgaW4gYXNjZW5kYW50cy5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBmcm9tICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBbiBlbGVtZW50IHRvIHNlYXJjaCBmcm9tLlxcclxcbiAqIEBwYXJhbSBzZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgLSBBIHNlbGVjdG9yLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBUaGUgZm91bmQgZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQgaWYgYXZhaWxhYmxlLCBvciBgbnVsbGAuXFxyXFxuICovXFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBjbG9zZXN0KCBmcm9tOiBIVE1MRWxlbWVudCwgc2VsZWN0b3I6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcXHJcXG4gIGlmICggaXNGdW5jdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZyb20uY2xvc2VzdCApICkge1xcclxcbiAgICByZXR1cm4gZnJvbS5jbG9zZXN0KCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIGxldCBlbG06IEhUTUxFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudCB8IG51bGwgPSBmcm9tO1xcclxcblxcclxcbiAgd2hpbGUgKCBlbG0gJiYgZWxtLicKICAgICAgICAgICAgICAgICAgICAgICAgYidub2RlVHlwZSA9PT0gMSApIHtcXHJcXG4gICAgaWYgKCBtYXRjaGVzKCBlbG0sIHNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciApICkge1xcclxcbiAgICAgIGJyZWFrO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlbG0gPSBlbG0ucGFyZW50RWxlbWVudDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gZWxtO1xcclxcbn0iLCJpbXBvcnQgeyBFVkVOVF9SRUZSRVNILCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiIlRfUkVTSVpFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvUyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQW55RnVuY3Rpb24sIEJhc2VDb21wb25lbnQsICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQge1xcclxcbiAgYWRkQ2xhc3MsXFxyXFxuICBhcHBlbmQsXFxyXFxuICBhcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBiZWZvcmUsXFxyXFxuICBiZXR3ZWVuLFxcclxcbiAgZW1wdHksXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZm9yRWFjaCBhcyBmb3JFYWNoSXRlbSxcXHJcXG4gIGluY2x1ZGVzLFxcclxcbiAgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRnVuY3Rpb24sXFxyXFxuICBpc0hUTUxFbGVtZW50LFxcclxcbiAgaXNTdHJpbmcsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgbWF0Y2hlcyxcXHJcXG4gIHBhcnNlSHRtbCxcXHJcXG4gIHF1ZXJ5QWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIHJlbW92ZSBhcyByZW1vdmVOb2RlLFxcclxcbiAgdG9BcnJheSxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxufSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgU2xpZGUsIFNsaWRlIgogICAgICAgICAgICAgICAgICAgICAgICBiIkNvbXBvbmVudCB9IGZyb20gJy4vU2xpZGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU2xpZGVzIGNvbXBvbmVudC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZmFjZSBTbGlkZXNDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB1cGRhdGUoKTogdm9pZDtcXHJcXG4gIHJlZ2lzdGVyKCBzbGlkZTogSFRNTEVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBpbmRleDogbnVtYmVyLCBzbGlkZUluZGV4OiBudW1iZXIgKTogdm9pZDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBnZXQoIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuICk6IFNsaWRlQ29tcG9uZW50WycKICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xcclxcbiAgZ2V0SW4oIHBhZ2U6IG51bWJlciApOiBTbGlkZUNvbXBvbmVudFtdOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGdldEF0KCBpbmRleDogbnVtYmVyICk6IFNsaWRlQ29tcG9uZW50IHwgdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVmaW5lZDtcXHJcXG4gIGFkZCggc2xpZGU6IHN0cmluZyB8IEVsZW1lbnQgfCBBcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXk8c3RyaW5nIHwgRWxlbWVudD4sIGluZGV4PzogbnVtYmVyICk6IHZvaWQ7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgcmVtb3ZlKCBzZWxlY3RvcjogU2xpZGVNYXRjaGVyICk6IHZvaWQ7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yRWFjaCggaXRlcmF0ZWU6IFNsaWRlc0l0ZXJhdGVlLCBleGNsdWRlQ2xvbmVzPzogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Jvb2xlYW4gKTogdm9pZDtcXHJcXG4gIGZpbHRlciggbWF0Y2hlcjogU2xpZGVNYXRjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlciApOiBTbGlkZUNvbXBvbmVudFtdO1xcclxcbiAgc3R5bGUoIHByb3A6IHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2csIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIHVzZUNvbnRhaW5lcj86IGJvb2xlYW4gKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWRcXHJcXG4gIGdldExlbmd0aCggZXhjbHVkZUNsb25lcz86IGJvb2xlYW4gKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlcjtcXHJcXG4gIGlzRW5vdWdoKCk6IGJvb2xlYW47XFxyXFxufVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBUaGUgaXRlcmF0ZWUgZnVuY3Rpb24gZm9yIFNsaWRlcy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgU2xpZGVzSXRlcmF0ZWUgPSAoIFNsaWRlOiBTbGlkZUNvbXBvbmVudCwgaW5kZXg6IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIFNsaWRlczogU2xpZGVDb21wb25lbnRbXSApID0+IHZvaWRcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLyoqXFxyXFxuICogVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiBmb3IgU2xpZGVzLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCB0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZXNQcmVkaWNhdGUgPSAoIFNsaWRlOiBTbGlkZUNvbXBvbmVudCwgaW5kZXg6IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIFNsaWRlczogU2xpZGVDb21wb25lbnRbXSApID0+IGFueVxcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gKiBUaGUgdHlwZSBmb3IgZmlsdGVyaW5nIFNsaWRlQ29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3RzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCB0eXBlIFNsaWRlTWF0Y2hlciA9IG51bWJlciB8IG51bWJlcltdIHwgc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZyB8IFNsaWRlc1ByZWRpY2F0ZTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCBmb3IgbWFuYWdpbmcgYWxsIHNsaWRlcyBpbmNsdWRlIGNsb25lcy5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZXMgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIFNsaWRlcyggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zOiBPcHRpb25zICk6IFNsaWRlc0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneyBvbiwgZW1pdCwgYmluZCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGNvbnN0IHsgc2xpZGVzLCBsaXN0IH0gPSBDb21wb25lbnRzLkVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzIGFsbCBTbGlkZUNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnQgb2JqZWN0cy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgU2xpZGVzOiBTbGlkZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGluaXQoKTtcXHJcXG4gICAgb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRUZSRVNILCBkZXN0cm95ICk7XFxyXFxuICAgIG9uKCBFVkVOVF9SRUZSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VTSCwgaW5pdCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbmknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlhbGl6ZXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduaXQoKTogdm9pZCB7XFxyXFxuICAgIHNsaWRlcy5mb3JFYWNoKCAoIHNsaWRlLCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggKSA9PiB7IHJlZ2lzdGVyKCBzbGlkZSwgaW5kZXgsIC0xICkgfSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBmb3JFYWNoKCBTbGlkZSA9PiB7IFNsaWRlLmRlc3Ryb3koKSB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICBlbXB0eSggU2xpZGVzICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBNYW51YWxseSB1cGRhdGVzIHRoZSBzdGF0dXMgb2YgYWxsIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGZvckVhY2goIFNsaWRlID0+IHsgU2xpZGUudXBkYXRlKCkgfSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVnaXN0ZXJzIGEgc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGVsZW1lbnQgYW5kIGNyZWF0ZXMgYSBTbGlkZSBvYmplY3QuXFxyXFxuICAgKiBOZScKICAgICAgICAgICAgICAgICAgICAgICAgYidlZHMgdG8gc29ydCBldmVyeSB0aW1lIHdoZW4gYSBuZXcgc2xpZGUgaXMgcmVnaXN0ZXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgZXNwZWNpYWxseSBmb3IgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUgICAgICAtIEEgc2xpZGUgZWxlbWVudCB0byByZWdpc3Rlci5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gaW5kZXggICAgICAtIEEgc2xpZGUgaW5kZXguXFxyXFxuICAgKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIHNsaWRlSW5kZXggLSBBIHNsaWRlIGluZGV4IGZvciBjbG9uZXMuIFRoaXMgbXVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYmUgYC0xYCBmb3IgcmVndWxhciBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiByZWdpc3Rlciggc2xpZGU6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyLCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVJbmRleDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBvYmplY3QgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGUoIFNwbGlkZSwgaW5kZXgsIHNsaWRlSW5kZXgsIHNsaWRlICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBvYmplY3QubW91bnQoKTtcXHJcXG4gICAgU2xpZGVzLnB1c2goIG9iamVjdCApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgU2xpZGVzLnNvcnQoICggU2xpZGUxLCBTbGlkZTIgKSA9PiBTbGlkZTEuaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4IC0gU2xpZGUyLmluZGV4ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBSZXR1cm5zIGFsbCBTbGlkZSBvYmplY3RzLlxcclxcbiAgICpcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZXhjbHVkZUNsb25lcyAtIE9wdGlvbmFsLiBEZXRlcm1pbmVzIHdoZXRoZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGV4Y2x1ZGUgY2xvbmVzIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBBbiBhcnJheSB3aXRoIFNsaWRlIG9iamVjdHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBnZXQoIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuICk6IFNsaWRlQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1tdIHtcXHJcXG4gICAgcmV0dXJuIGV4Y2x1ZGVDbG9uZXMgPyBmaWx0ZXIoIFNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9PiAhIFNsaWRlLmlzQ2xvbmUgKSA6IFNsaWRlcztcXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgc2xpZGVzIGluIHRoZSBzcGVjaWZpZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2UuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHBhZ2UgLSBBIHBhZ2UgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBzbGlkZXMgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoYXQgYmVsb25nIHRvIHRoZSBwYWdlLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0SW4oIHBhZ2U6IG51bWJlciApOiBTbGlkZUNvbXBvbmVudFtdIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHsgQ29udHJvbGxlciB9ID0gQ29tcG9uZW50cztcXHJcXG4gICAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4ID0gQ29udHJvbGxlci50b0luZGV4KCBwYWdlICk7XFxyXFxuICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtYXggICA9IENvbnRyb2xsZXIuaGFzRm9jdXMoKSA/IDEgOiBvcHRpb25zLnBlclBhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICByZXR1cm4gZmlsdGVyKCBTbGlkZSA9PiBiZXR3ZWVuKCBTbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXgsIGluZGV4LCBpbmRleCArIG1heCAtIDEgKSApO1xcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBhIFNsaWRlIG9iamVjdCBhdCB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNwZWNpZmllZCBpbmRleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBzbGlkZSBpbmRleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgU2xpZGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdCBpZiBhdmFpbGFibGUsIG9yIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldEF0KCBpbmRleDogbnVtYmVyICk6IFNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUNvbXBvbmVudCB8IHVuZGVmaW5lZCB7XFxyXFxuICAgIHJldHVybiBmaWx0ZXIoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCApWyAwIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNlcnRzIGEgc2xpZGUgb3Igc2xpZGVzIGF0IGEgc3BlY2lmaWVkIGluZGV4LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaXRlbXMgLSBBIHNsaWRlIGVsZW1lbnQsIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBIVE1MIHN0cmluZyBvciBhbiBhcnJheSB3aXRoIHRoZW0uXFxyXFxuICAgKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIGluZGV4IC0gT3B0aW9uYWwuIEFuIGluZGV4IHRvIGluc2VydCB0aGUgc2xpZGUgYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0LiBJZiBvbWl0dGVkLCBhcHBlbmRzIGl0IHRvIHRoZSBsaXN0LlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gYWRkKCBpdGVtczogc3RyaW5nIHwgRWxlbWVudCB8IEFycmF5PHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpbmcgfCBFbGVtZW50PiwgaW5kZXg/OiBudW1iZXIgKTogdm9pZCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmb3JFYWNoSXRlbSggaXRlbXMsIHNsaWRlID0+IHtcXHJcXG4gICAgICBpZiAoIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1N0cmluZyggc2xpZGUgKSApIHtcXHJcXG4gICAgICAgIHNsaWRlID0gcGFyc2VIdG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCggc2xpZGUgKTtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgaWYgKCBpc0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVE1MRWxlbWVudCggc2xpZGUgKSApIHtcXHJcXG4gICAgICAgIGNvbnN0IHJlZiA9IHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXNbIGluZGV4IF07XFxyXFxuICAgICAgICByZWYgPyBiZWZvcmUoIHNsaWRlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVmICkgOiBhcHBlbmQoIGxpc3QsIHNsaWRlICk7XFxyXFxuICAgICAgICBhZGRDbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3MoIHNsaWRlLCBvcHRpb25zLmNsYXNzZXMuc2xpZGUgKTtcXHJcXG4gICAgICAgIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnNlcnZlSW1hZ2VzKCBzbGlkZSwgYXBwbHkoIGVtaXQsIEVWRU5UX1JFU0laRSApICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcblxcclxcbiAgICBlbWl0KCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUkVGUkVTSCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlcyBzbGlkZXMgdGhhdCBtYXRjaCB0aGUgbWF0Y2hlclxcclxcbiAgICogdGhhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FuIGJlIGFuIGluZGV4LCBhbiBhcnJheSB3aXRoIGluZGljZXMsIGEgc2VsZWN0b3IsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvciBhbiBpdGVyYXRlZSBmdW5jdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21hdGNoZXIgLSBBbiBpbmRleCwgYW4gYXJyYXkgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBzdHJpbmcsIG9yIGFuIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gcmVtb3ZlKCBtYXRjaGVyOiBTbGlkZU1hdGNoZXIgKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICByZW1vdmVOb2RlKCBmaWx0ZXIoIG1hdGNoZXIgKS5tYXAoIFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9PiBTbGlkZS5zbGlkZSApICk7XFxyXFxuICAgIGVtaXQoIEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEl0ZXJhdGVzIG92ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIFNsaWRlIG9iamVjdHMgYnkgdGhlIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gaXRlcmF0ZWUgICAgICAtIEFuIGl0ZXJhdGVlIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiB0aGF0IHRha2VzIGEgU2xpZGUgb2JqZWN0LCBhbiBpbmRleCBhbmQgYW4gYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5IHdpdGggU2xpZGVzLlxcclxcbiAgICogQHBhcmFtIGV4Y2x1ZGVDbG9uZXMgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBleGNsdWRlIGNsb25lcyBvciBub3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBmb3JFYWNoKCBpdGVyYXRlZTogU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlc0l0ZXJhdGVlLCBleGNsdWRlQ2xvbmVzPzogYm9vbGVhbiApOiB2b2lkIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGdldCggZXhjbHVkZUNsb25lcyApLmZvckVhY2goIGl0ZXJhdGVlICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBGaWx0ZXJzIFNsaWRlcyBieScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIG1hdGNoZXJcXHJcXG4gICAqIHRoYXQgY2FuIGJlIGFuIGluZGV4LCBhbiBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG9yLCBvciBhIHByZWRpY2F0ZSBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG1hdGNoZXIgLSBBbiBpbmRleCwgYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFycmF5IHdpdGggaW5kaWNlcywgYSBzZWxlY3RvciBzdHJpbmcsIG9yIGEgcHJlZGljYScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSBmdW5jdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEFuIGFycmF5IHdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoIFNsaWRlQ29tcG9uZW50IG9iamVjdHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiBmaWx0ZXIoIG1hdGNoZXI6IFNsaWRlTWF0Y2hlciApOiBTbGlkZUNvbXBvbmVudFtdICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHJldHVybiBTbGlkZXMuZmlsdGVyKCBpc0Z1bmN0aW9uKCBtYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciApXFxyXFxuICAgICAgPyBtYXRjaGVyXFxyXFxuICAgICAgOiBTbGlkZSA9PiBpc1N0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbmcoIG1hdGNoZXIgKVxcclxcbiAgICAgICAgPyBtYXRjaGVzKCBTbGlkZS5zbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsIG1hdGNoZXIgKVxcclxcbiAgICAgICAgOiBpbmNsdWRlcyggdG9BcnJheSggbWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXIgKSwgU2xpZGUuaW5kZXggKVxcclxcbiAgICApO1xcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogQWRkcyBhIENTUyBydWxlIHRvIGFsbCBzbGlkZXMgb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnRhaW5lcnMuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHByb3AgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBBIHByb3BlcnR5IG5hbWUuXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYictIEEgQ1NTIHZhbHVlIHRvIGFkZC5cXHJcXG4gICAqIEBwYXJhbSB1c2VDb250YWluZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIC0gT3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBhcHBseSB0aGUgcnVsZSB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28gdGhlIGNvbnRhaW5lciBvciBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZSggcHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB1c2VDb250YScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVyPzogYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaCggU2xpZGUgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+IHsgU2xpZGUuc3R5bGUoIHByb3AsIHZhbHVlLCB1c2VDb250YWluZXIgKSB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbnZva2VzIHRoZSBjYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGJhY2sgYWZ0ZXIgYWxsIGltYWdlcyBpbiB0aGUgZWxlbWVudCBhcmUgbG9hZGVkLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZWxtICAgICAgLSBBbiBlbGVtZW50IHRoYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heSBjb250YWluIGltYWdlcy5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvYnNlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZUltYWdlcyggZWxtOiBFbGVtZW50LCBjYWxsYmFjazogQW55RnVuY3Rpb24gKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiImQge1xcclxcbiAgICBjb25zdCBpbWFnZXMgPSBxdWVyeUFsbCggZWxtLCAnaW1nJyApIgogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgbGV0IHsgbGVuZ3RoIH0gPSBpbWFnZXM7XFxyXFxuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIGxlbmd0aCApIHtcXHJcXG4gICAgICBpbWFnZXMuZm9yRWFjaCggaW1nID0+JwogICAgICAgICAgICAgICAgICAgICAgICBiIiB7XFxyXFxuICAgICAgICBiaW5kKCBpbWcsICdsb2FkIGVycm9yJywgKCkgPT4ge1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICAgICAgaWYgKCAhIC0tbGVuZ3RoICkge1xcclxcbiAgICAgICAgICAgIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjaygpO1xcclxcbiAgICAgICAgICB9XFxyXFxuICAgICAgICB9ICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIH0gKTtcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICBjYWxsYmFjaygpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJucyB0aGUgbGVuZ3RoIG9mIHNsaWRlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIGV4Y2x1ZGVDbG9uZXMgLSBPcHRpb25hbC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGNsdWRlIGNsb25lcyBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGxlbmd0aCBvZiBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldExlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgoIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gZXhjbHVkZUNsb25lcyA/IHNsaWRlcy5sZW5ndGggOiBTbGlkZXMubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyIG9mIHNsaWRlcyBpcyBvdmVyIHRoYW4gdGhlIGBwZXJQYWdlYCBvcHRpb24sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmNsdWRpbmcgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGVyZSBhcmUgZW5vdWdoIHNsaWRlcywgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc0Vub3VnaCgpOiBib29sZWFuIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBTbGlkZXMubGVuZ3RoID4gb3B0aW9ucy5wZXJQYWdlO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICBkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveSxcXHJcXG4gICAgdXBkYXRlLFxcclxcbiAgICByZWdpc3RlcixcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGdldCxcXHJcXG4gICAgZ2V0SW4sXFxyXFxuICAgIGdldEF0LFxcclxcbiAgICBhZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkLFxcclxcbiAgICByZW1vdmUsXFxyXFxuICAgIGZvckVhY2gsXFxyXFxuICAgIGZpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXIsXFxyXFxuICAgIHN0eWxlLFxcclxcbiAgICBnZXRMZW5ndGgsXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc0Vub3VnaCxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IFRUQiB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJmcm9tICcuLi8uLi9jb25zdGFudHMvZGlyZWN0aW9ucyc7XFxyXFxuaW1wb3J0IHsgRSIKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX09WRVJGTE9XLCBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICBiIlNJWkVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlLCBUaHJvdHRsZSB9IGZyb20gJy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5pbXBvcnQgeyBhYnMsIGFwcGx5LCBhc3NlcnQsIGlzT2JqZWN0LCByZWN0LCBzdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIHRvZ2dsZUNsYXNzLCB1bml0IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBGQURFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3R5cGVzJztcXHJcXG5pbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgQ0xBU1NfT1ZFUkZMT1cgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3NlIgogICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgTGF5b3V0IGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIExheW91dENvbXBvbmVudCBleHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIGxpc3RTaXplKCk6IG51bWJlcjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBzbGlkZVNpemUoIGluZGV4OiBudW1iZXIsIHdpdGhvdXRHYXA/OiBib29sZWFuICk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXI7XFxyXFxuICBzbGlkZXJTaXplKCB3aXRob3V0R2FwPzogYm9vbGVhbiApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyO1xcclxcbiAgdG90YWxTaXplKCBpbmRleD86IG51bWJlciwgd2l0aG91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RHYXA/OiBib29sZWFuICk6IG51bWJlcjtcXHJcXG4gIGdldFBhZGRpbmcoIHJpZ2h0JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogYm9vbGVhbiApOiBudW1iZXI7XFxyXFxuICBpc092ZXJmbG93KCk6IGJvb2xlYW47JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqIEBpbnRlcm5hbCAqL1xcclxcbiAgcmVzaXplKCBmb3JjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U/OiBib29sZWFuICk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgY29tcG9uZW50IHRoYXQgYWRqdXN0cyBzbGlkZXIgc3R5bGVzIGFuZCBwcm92aWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicgbWV0aG9kcyBmb3IgZGltZW5zaW9ucy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuJwogICAgICAgICAgICAgICAgICAgICAgICBiJzBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICpcXHJcXG4gKiBAcmV0dXJuIEFuIExheW91dCBjb21wb25lbnQgb2JqZWN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gTGF5b3V0KCBTcGxpZGU6IFNwbGlkZSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogTGF5b3V0Q28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uLCBiaW5kLCBlbWl0IH0gPSBFdmVudEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBTbGlkZXMgfSA9IENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzO1xcclxcbiAgY29uc3QgeyByZXNvbHZlIH0gPSBDb21wb25lbnRzLkRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb247XFxyXFxuICBjb25zdCB7IHJvb3QsIHRyYWNrLCBsaXN0IH0gPSBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy5FbGVtZW50cztcXHJcXG4gIGNvbnN0IHsgZ2V0QXQsIHN0eWxlOiBzdHlsZVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMgfSA9IFNsaWRlcztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlcyB3aGV0aGVyIHRoZSBzbGlkZXIgZGlyZWN0aW9uIGlzIHZlcnRpY2FsIG9yIG5vdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIGxldCB2ZXJ0aWNhbDogYm9vbGVhbjtcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIEtlZXBzIHRoZSBET01SZWN0IG9iamVjdCBvZiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvb3QgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHJvb3RSZWN0OiBET01SZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHVybnMgaW50byBgdHJ1ZWAgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4gdGhlIGNhcm91c2VsIGlzIHdpZGVyIHRoYW4gdGhlIGxpc3QuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBsZXQgb3ZlcmZsb3c6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgaW5pdCgpJwogICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG4gICAgYmluZCggd2luZG93LCAncmVzaXplIGxvYWQnLCBUaHJvdHRsZSggIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGx5KCBlbWl0LCBFVkVOVF9SRVNJWkUgKSApICk7XFxyXFxuICAgIG9uKCBbIEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIIF0sIGluaXQgKTtcXHJcXG4gICAgb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9SRVNJWkUsIHJlc2l6ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudCBvbiBgbW91bnRgIG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBgdXBkYXRlZGAuXFxyXFxuICAgKiBVc2VzIGBtYXgtd2lkdGhgIGZvciB0aGUgcm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgdG8gcHJldmVudCB0aGUgc2xpZGVyIGZyb20gZXhjZWVkaW5nIHRoZSBwYXJlbnQgZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGluaXQoKTogdm9pZCB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB2ZXJ0aWNhbCA9IG9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiblxcclxcbiAgICBzdHlsZSggcm9vdCwgJ21heFdpZHRoJywgdW5pdCggb3B0aW9ucy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIid2lkdGggKSApO1xcclxcbiAgICBzdHlsZSggdHJhY2ssIHJlc29sdmUoICdwYWRkaW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZ0xlZnQnICksIGNzc1BhZGRpbmcoIGZhbHNlICkgKTtcXHJcXG4gICAgc3R5bGUoIHQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIicmFjaywgcmVzb2x2ZSggJ3BhZGRpbmdSaWdodCcgKSwgY3NzUGFkZGluZyggdHJ1ZSApICIKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcblxcclxcbiAgICByZXNpemUoIHRydWUgKTtcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIFVwZGF0ZXMgZGltZW5zaW9ucyBvZiBzb21lIGVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50cyB3aGVuIHRoZSBjYXJvdXNlbCBpcyByZXNpemVkLlxcclxcbiAgICogQWxzbycKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2hlY2tzIHRoZSBjYXJvdXNlbCBzaXplIGFuZCBlbWl0cyBgb3ZlcmZsb3dgIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Mgd2hlbiBpdCBleGNlZWRzIHRoZSBsaXN0IHdpZHRoLlxcclxcbiAgICpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gZm9yY2UgLSBTa2lwcyBjaGVja2luZyB0aGUgcm9vdCBkaW1lbnNpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidoYW5nZSBhbmQgYWx3YXlzIHBlcmZvcm1zIHRoZSByZXNpemluZyBwcm9jZXNzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVzaXplKCBmb3JjZT86IGJvb2xlYW4gKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICBjb25zdCBuZXdSZWN0ID0gcmVjdCggcm9vdCApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgaWYgKCBmb3JjZSB8fCByb290UmVjdC53aWR0aCAhPT0gbmV3UmVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qud2lkdGggfHwgcm9vdFJlY3QuaGVpZ2h0ICE9PSBuZXdSZWN0LmhlaWdodCApICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7XFxyXFxuICAgICAgc3R5bGUoIHRyYWNrLCAnaGVpZ2h0JywgY3NzVHJhY2tIZWlnaCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0KCkgKTtcXHJcXG5cXHJcXG4gICAgICBzdHlsZVNsaWRlcyggcmVzb2x2ZSggJ21hcmdpIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5SaWdodCcgKSwgdW5pdCggb3B0aW9ucy5nYXAgKSApO1xcclxcbiAgICAgIHN0eWxlIgogICAgICAgICAgICAgICAgICAgICAgICBiIlNsaWRlcyggJ3dpZHRoJywgY3NzU2xpZGVXaWR0aCgpICk7XFxyXFxuICAgICAgc3R5IgogICAgICAgICAgICAgICAgICAgICAgICBiImxlU2xpZGVzKCAnaGVpZ2h0JywgY3NzU2xpZGVIZWlnaHQoKSwgdHJ1ZSApO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgICByb290UmVjdCA9IG5ld1JlY3Q7XFxyXFxuICAgICAgZW1pdCggRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFU0laRUQgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIG92ZXJmbG93ICE9PSAoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVyZmxvdyA9IGlzT3ZlcmZsb3coKSApICkge1xcclxcbiAgICAgICAgdG9nZ2xlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzKCByb290LCBDTEFTU19PVkVSRkxPVywgb3ZlcmZsb3cgKTtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbWl0KCBFVkVOVF9PVkVSRkxPVywgb3ZlcmZsb3cgKTtcXHJcXG4gICAgICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFBhcnNlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHBhZGRpbmcgb3B0aW9uIGFuZCByZXR1cm5zIHRoZSB2YWx1ZSBmb3IgZWFjaCBzaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5cXHJcXG4gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYHBhZGRpbmdUb3BgIG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYidgcGFkZGluZ0JvdHRvbWAgZm9yIHRoZSB2ZXJ0aWNhbCBzbGlkZXIuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEBwYXJhbSByaWdodCAtIERldGVybWluZXMgd2hldGhlciB0byBnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGBwYWRkaW5nUmlnaHQvQm90dG9tYCBvciBgcGFkZGluZ0xlZnQvVG9wYC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgcGFkZGluZyB2YWx1ZSBhcyBhIENTUycKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjc3NQYWRkaW5nKCByaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IGJvb2xlYW4gKTogc3RyaW5nIHtcXHJcXG4gICAgY29uc3QgeyBwYWRkaW5nIH0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gb3B0aW9ucztcXHJcXG4gICAgY29uc3QgcHJvcCA9IHJlc29sdmUoIHJpZ2h0ID8gJwogICAgICAgICAgICAgICAgICAgICAgICBiIidyaWdodCcgOiAnbGVmdCcgKTtcXHJcXG4gICAgcmV0dXJuIHBhZGRpbmdcXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgJiYgdW5pdCggcGFkZGluZ1sgcHJvcCBdIHx8ICggaXNPYmplY3QoIHBhZGRpbmcgKScKICAgICAgICAgICAgICAgICAgICAgICAgYiIgPyAwIDogcGFkZGluZyApIClcXHJcXG4gICAgICB8fCAnMHB4JztcXHJcXG4gIH0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHRyYWNrIGVsZW1lbnQgYXMgYSBDU1Mgc3RyaW5nLlxcclxcbiAgICpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIFRoZSBoZWlnaHQgb2YgdGhlIHRyYWNrLlxcclxcbiAgICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gY3NzVHJhY2tIZWlnaHQoKTogc3RyaW5nIHtcXHJcXG4gICAgbGV0JwogICAgICAgICAgICAgICAgICAgICAgICBiIiBoZWlnaHQgPSAnJztcXHJcXG5cXHJcXG4gICAgaWYgKCB2ZXJ0aWNhbCApIHtcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgaGVpZ2h0ID0gY3NzSGVpZ2h0KCk7XFxyXFxuICAgICAgYXNzZXJ0KCBoJwogICAgICAgICAgICAgICAgICAgICAgICBiImVpZ2h0LCAnaGVpZ2h0IG9yIGhlaWdodFJhdGlvIGlzIG1pc3NpbmcuJyApO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgICBoZWlnaHQgPSBgY2FsYygkeyBoZWlnaHQgfSAtICR7IGNzc1BhZGRpbmcoIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxzZSApIH0gLSAkeyBjc3NQYWRkaW5nKCB0cnVlICkgfSlgO1xcclxcbiAgICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICByZXR1cm4gaGVpZ2h0O1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQ29udmVydHMgb3B0aW9ucyByZWxhdGVkIHdpdGggaGVpZ2h0IHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhIENTUyBzdHJpbmcuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBhcyBhIENTUyBzdHJpbmcgaWYgYXZhaWxhYmxlLCBvciBvdGhlcndpc2UgYW4gZW1wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5IHN0cmluZy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY3NzSGVpZ2h0KCk6IHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jpbmcge1xcclxcbiAgICByZXR1cm4gdW5pdCggb3B0aW9ucy5oZWlnaHQgfHwgcmVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIGxpc3QgKS53aWR0aCAqIG9wdGlvbnMuaGVpZ2h0UmF0aW8gKTtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIHdpZHRoIG9mIHRoZSBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUgYXMgYSBDU1Mgc3RyaW5nLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB3aWR0aCBvZiB0aGUgc2xpZGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNzc1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVdpZHRoKCk6IHN0cmluZyB8IG51bGwge1xcclxcbiAgICByZXR1cm4gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuYXV0b1dpZHRoXFxyXFxuICAgICAgPyBudWxsXFxyXFxuICAgICAgOiB1bml0KCBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aW9ucy5maXhlZFdpZHRoICkgfHwgKCB2ZXJ0aWNhbCA/ICcnIDogY3NzU2xpZGVTaXplIgogICAgICAgICAgICAgICAgICAgICAgICBiJygpICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBoZWlnaHQgb2YgdGhlIHNsaWRlIGFzIGEgQ1NTIHN0cmluZy5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHJldHVybiBUaGUgaGVpZ2h0IG9mIHRoZSBzbGlkZS5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGNzc1NsaWRlSGVpZ2h0KCk6IHN0cmluZyB8IG51bGwgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgcmV0dXJuIHVuaXQoIG9wdGlvbnMuZml4ZWRIZWlnaHQgKVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB8fCAoIHZlcnRpY2FsID8gKCBvcHRpb25zLmF1dG9IZWlnaHQgPyBudWxsIDogY3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1NsaWRlU2l6ZSgpICkgOiBjc3NIZWlnaHQoKSApO1xcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgQ1NTIHN0cmluZyBmb3Igc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHdpZHRoIG9yIGhlaWdodCB3aXRob3V0IGdhcC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBUaGUgQ1NTIHN0cmluZyBmb3Igc2xpZGUgd2lkdGggb3IgaGVpZ2h0LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY3NzU2xpZGVTaXplKCk6IHN0cmluZyB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBjb25zdCBnYXAgPSB1bml0KCBvcHRpb25zLmdhcCApO1xcclxcbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGBjYWxjKCgxMDAlJHsgZ2FwICYmIGAgKyAkeyBnYXAgfWAgfSkvJHsgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMucGVyUGFnZSB8fCAxIH0keyBnYXAgJiYgYCAtICR7IGdhcCB9YCB9KWA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWR0aCBmb3IgdGhlIGhvcml6b250YWwgc2xpZGVyLCBvciB0aGUgaGVpZ2h0IGZvciB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHZlcnRpY2FsIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l6ZSBvZiB0aGUgbGlzdCBlbGVtZW50IGluIHBpeGVsLlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gbGlzdFNpemUoKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIHJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCBsaXN0IClbIHJlc29sdmUoICd3aWR0aCcgKSBdO1xcclxcbiAgfVxcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgc2xpZGUgd2lkdGggZm9yIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaG9yaXpvbnRhbCBzbGlkZXIsIG9yIHRoZSBoZWlnaHQgZm9yIHRoZSB2ZXJ0aWNhbCBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAgICAgIC0gT3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLiBBIHNsaWRlIGluZGV4LlxcclxcbiAgICogQHBhcmFtIHdpdGhvdXRHYXAgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBleGNsdWRlIHRoZSBnYXAgYW1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgc2l6ZSBvZiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHNwZWNpZmllZCBzbGlkZSBlbGVtZW50IGluIHBpeGVsLlxcclxcbiAgICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gc2xpZGVTaXplKCBpbmRleD86IG51bWJlciwgd2l0aG91dEdhcD86IGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IFNsaWRlID0gZ2V0QXQoIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCB8fCAwICk7XFxyXFxuICAgIHJldHVybiBTbGlkZVxcclxcbiAgICAgID8gcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIoIFNsaWRlLnNsaWRlIClbIHJlc29sdmUoICd3aWR0aCcgKSBdICsgKCB3aXRob3V0R2FwIgogICAgICAgICAgICAgICAgICAgICAgICBiJyA/IDAgOiBnZXRHYXAoKSApXFxyXFxuICAgICAgOiAwO1xcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgdG90YWwgd2lkdGggb3IgaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvZiBzbGlkZXMgZnJvbSB0aGUgaGVhZCBvZiB0aGUgc2xpZGVyIHRvIHRoZSBzcGVjaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaWVkIGluZGV4LlxcclxcbiAgICogVGhpcyBpbmNsdWRlcyBzaXplcyBvZiBjbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGJlZm9yZSB0aGUgZmlyc3Qgc2xpZGUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCAgICAgIC0gQSBzbGlkZSBpbmRleC4gSWYgb21pdHRlZCwgdXNlcyB0aGUgbGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgaW5kZXguXFxyXFxuICAgKiBAcGFyYW0gd2l0aG91dEdhcCAtIE9wdGlvbmFsLiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGV4Y2x1ZGUgdGhlIGxhc3QgZ2FwIG9yIG5vdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgdG90YWwgd2lkdGggb2Ygc2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiB0aGUgaG9yaXpvbnRhbCBzbGlkZXIsIG9yIHRoZSBoZWlnaHQgaW4gdGhlIHZlcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWNhbCBvbmUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRvdGFsU2l6ZSggaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4OiBudW1iZXIsIHdpdGhvdXRHYXA/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjb25zdCBTbGlkZSA9IGdldEF0KCBpbmRleCApO1xcclxcblxcclxcbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZSApIHtcXHJcXG4gICAgICBjb25zdCByaWdodCA9IHJlY3QoIFNsaWRlLnNsJwogICAgICAgICAgICAgICAgICAgICAgICBiImlkZSApWyByZXNvbHZlKCAncmlnaHQnICkgXTtcXHJcXG4gICAgICBjb25zdCBsZWZ0IgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgPSByZWN0KCBsaXN0IClbIHJlc29sdmUoICdsZWZ0JyApIF07XFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBhYnMoIHJpZ2h0IC0gbGVmdCApICsgKCB3aXRob3V0R2FwID8gMCA6IGdldEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXAoKSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiAwO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgc2xpZGVyIHNpeicKICAgICAgICAgICAgICAgICAgICAgICAgYidlIHdpdGhvdXQgY2xvbmVzIGJlZm9yZSB0aGUgZmlyc3Qgc2xpZGUuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgRG8gbm90IHVzZSB0aGUgY2xvbmUncyBzaXplIGJlY2F1c2UgaXQncyB1bnN0YWJsZSB3IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGUgaW5pdGlhbGl6aW5nIGFuZCByZWZyZXNoaW5nIHByb2Nlc3MuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBwYXJhbSB3aXRob3V0R2FwIC0gT3B0aW9uYWwuIERldGVybWluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHdoZXRoZXIgdG8gZXhjbHVkZSB0aGUgbGFzdCBnYXAgb3Igbm90LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSB3aWR0aCBvciBoZWlnaHQgb2YgdGhlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIgd2l0aG91dCBjbG9uZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJTaXplKCB3aXRob3V0R2FwPzogYm9vbGVhbiApOiBudW1iZXIge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRvdGFsU2l6ZSggU3BsaWRlLmxlbmd0aCAtIDEgKSAtIHRvdGFsU2l6ZSggMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKSArIHNsaWRlU2l6ZSggMCwgd2l0aG91dEdhcCApO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgZ2FwIHZhbHVlIGluIHBpeGVsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidieSB1c2luZyB0aGUgY29tcHV0ZWQgc3R5bGUgb2YgdGhlIGZpcnN0IHNsaWRlLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBnYXAgdmFsdWUgaW4gcGl4ZWwuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRHYXAoKTogbnVtYmVyIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IFNsaWRlID0gZ2V0QXQoIDAgKTtcXHJcXG4gICAgcmV0dXJuIFNsaWRlICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJiBwYXJzZUZsb2F0KCBzdHlsZSggU2xpZGUuc2xpZGUsIHJlc29sdmUoICdtYXJnaW5SaSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJnaHQnICkgKSApIHx8IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBSZXR1cm5zIHRoZSBwYWRkaW5nIHZhbHVlLlxcclxcbiAgICogVGhpcyBtZXRob2QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc29sdmVzIHRoZSBkaWZmZXJlbmNlIG9mIHRoZSBkaXJlY3Rpb24uXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBwYXJhbSByaWdodCAtIERldGVybWluZXMgd2hldGhlciB0byBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0IGBwYWRkaW5nUmlnaHQvQm90dG9tYCBvciBgcGFkZGluZ0xlZnQvVG9wYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgcGFkZGluZyB2YWx1ZSBpbiBwaXhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldFBhZGRpbmcoIHJpZ2h0OiBib28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVhbiApOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gcGFyc2VGbG9hdCggc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCB0cmFjaywgcmVzb2x2ZSggYHBhZGRpbmckeyByaWdodCA/ICdSaWdodCcgOiAnTGVmdCIKICAgICAgICAgICAgICAgICAgICAgICAgYiInIH1gICkgKSApIHx8IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBDaGVja3MgaWYgdGhlIGNhcm91c2VsIGlzIHdpZGVyIHRoYW4gdGhlIGxpc3QuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYHRydWVgIGZvciBhIGZhZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhcm91c2VsLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2Fyb3VzZWwgaXMgd2lkZXIgdGhhbiB0aGUgbGlzdCwgb3Igb3RoZXJ3aXNlIGBmYWxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc092ZXJmbG93KCk6IGJvb2xlYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgcmV0dXJuIFNwbGlkZS5pcyggRkFERSApIHx8IHNsaWRlclNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCB0cnVlICkgPiBsaXN0U2l6ZSgpO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICByZXNpemUsXFxyXFxuICAgIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2l6ZSxcXHJcXG4gICAgc2xpZGVTaXplLFxcclxcbiAgICBzbGlkZXJTaXplLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgdG90YWxTaXplLFxcclxcbiAgICBnZXRQYWRkaW5nLFxcclxcbiAgICBpc092ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmxvdyxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFueUZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBSZXF1ZXN0SW50ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJydmFsIH0gZnJvbSAnLi4vUmVxdWVzdEludGVydmFsL1JlcXVlc3RJbnRlcnZhbCciCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuaW5nIHZhbHVlIG9mIHRoZSBSZXF1ZXN0SW50ZXJ2YWwuXFxyXFxuICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBUaHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3R0bGVJbnN0YW5jZTxGIGV4dGVuZHMgQW55RnVuY3Rpb24+IGV4dGVuZHMgRnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHtcXHJcXG4gICggLi4uYXJnczogUGFyYW1ldGVyczxGPiApOiB2b2lkO1xcclxcbn1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuLyoqXFxyXFxuICogUmV0dXJucyB0aGUgdGhyb3R0bGVkIGZ1bmN0aW9uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBmdW5jICAgICAtIEEgZnVuY3Rpb24gdG8gdGhyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290dGxlLlxcclxcbiAqIEBwYXJhbSBkdXJhdGlvbiAtIE9wdGlvbmFsLiBUaHJvdHRsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxcclxcbiAqXFxyXFxuICogQHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSB0aHJvdHRsZWQgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUaHJvdHRsZTxGIGV4dGVuZHMgQW55RnVuY3Rpb24+KFxcclxcbiAgZnVuYzogRixcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBkdXJhdGlvbj86IG51bWJlclxcclxcbik6IFRocm90dGxlSW5zdGFuY2U8Rj4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIGNvbnN0IGludGVydmFsID0gUmVxdWVzdEludGVydmFsKCBkdXJhdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gfHwgMCwgZnVuYywgbnVsbCwgMSApO1xcclxcblxcclxcbiAgcmV0dXJuICgpID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGludGVydmFsLmlzUGF1c2VkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBFVkVOVF9SRUZSRVNILCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiRVZFTlRfUkVTSVpFLCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJldmVudHMnO1xcclxcbmltcG9ydCB7IExPT1AgfSBmcm9tICcuLi8uLi9jb25zdGFudCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidpbXBvcnQgeyBhZGRDbGFzcywgYXBwZW5kLCBiZWZvcmUsIGNlaWwsIGVtcHR5LCBpc1VuJwogICAgICAgICAgICAgICAgICAgICAgICBiImRlZmluZWQsIHBhZCwgcHVzaCwgcmVjdCwgcmVtb3ZlIH0gZnJvbSAnLi4vLi4vdXRpbHMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aCIKICAgICAgICAgICAgICAgICAgICAgICAgYidlIENsb25lIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIENsb25lc0NvbXBvbmVudCBleHRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyBCYXNlQ29tcG9uZW50IHtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtdWx0aXBsaWVyIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNsb25lcy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IE1VTFRJUExJRVIgPSAyO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50IHRoYXQgZ2VuZXJhdGVzIGNsb25lcyBmb3IgdGhlIGxvb3Agc2xpZGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xvbmVzIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBDbG9uZXMoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uczogT3B0aW9ucyApOiBDbG9uZXNDb21wb25lbnQge1xcclxcbiAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgeyBFbGVtZW50cywgU2xpZGVzIH0gPSBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50cztcXHJcXG4gIGNvbnN0IHsgcmVzb2x2ZSB9ID0gQ29tcG9uZW50cy5EJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZWQgZWxlbWVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0IGNsb25lczogSFRNTEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50W10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogS2VlcHMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjdXJyZW50IG51bWJlciBvZiBjbG9uZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVDb3VudDogbnVtYmVyO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICogTmVlZHMgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvIHJlbW91bnQgdGhlIGNvbXBvbmVudCBvbiByZWZyZXNoLCBvdGhlcndpc2UgYHJlZnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NoYCBldmVudCB3aWxsIGJlIHRyaWdnZXJlZCBhZ2FpbiB3aGlsZSByZWZyZXNoaW5nLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyggRVZFTlRfUkVGUkVTSCwgcmVtb3VudCApO1xcclxcbiAgICBvbiggWyBFVkVOVF9VJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1BEQVRFRCwgRVZFTlRfUkVTSVpFIF0sIG9ic2VydmUgKTtcXHJcXG5cXHJcXG4gICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICggKCBjbG9uZUNvdW50ID0gY29tcHV0ZUNsb25lQ291bnQoKSApICkge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBnZW5lcmF0ZSggY2xvbmVDb3VudCApO1xcclxcbiAgICAgIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLkxheW91dC5yZXNpemUoIHRydWUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogUmVtb3VudHMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIGZ1bmN0aW9uIHJlbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGRlc3Ryb3knCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XFxyXFxuICAgIG1vdW50KCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBEZXN0cm95cyBjbG9uZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95KCk6IHZvaWQge1xcclxcbiAgICByZW1vdmUoIGNsb25lcyApO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZW1wdHkoIGNsb25lcyApO1xcclxcbiAgICBldmVudC5kZXN0cm95KCk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBPYnNlcnZlcyB0aGUgcmVxdWlyZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsb25lIGNvdW50IGFuZCByZWZyZXNoZXMgdGhlIHNsaWRlciBpZiBuZWNlc3NhcnkuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvYnNlcnZlKCk6IHZvaWQge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgY291bnQgPSBjb21wdXRlQ2xvbmVDb3VudCgpO1xcclxcblxcclxcbiAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKCBjbG9uZUNvdW50ICE9PSBjb3VudCApIHtcXHJcXG4gICAgICBpZiAoIGNsb25lQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50IDwgY291bnQgfHwgISBjb3VudCApIHtcXHJcXG4gICAgICAgIGV2ZW50LmVtaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBFVkVOVF9SRUZSRVNIICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBHZW5lcmF0ZXMgdGhlIHNwZWNpZicKICAgICAgICAgICAgICAgICAgICAgICAgYidpZWQgbnVtYmVyIG9mIGNsb25lcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY291JwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IC0gVGhlIG51bWJlciBvZiBjbG9uZXMgdG8gZ2VuZXJhdGUgZm9yIGVhY2ggc2lkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdlbmVyYXRlKCBjb3VudDogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiB2b2lkIHtcXHJcXG4gICAgY29uc3Qgc2xpZGVzID0gU2xpZGVzLmdldCgpLnNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSgpO1xcclxcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2xpZGVzO1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgaWYgKCBsZW5ndGggKSB7XFxyXFxuICAgICAgd2hpbGUgKCBzbGlkZXMubCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmd0aCA8IGNvdW50ICkge1xcclxcbiAgICAgICAgcHVzaCggc2xpZGVzLCBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzICk7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHB1c2goIHNsaWRlcy5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpY2UoIC1jb3VudCApLCBzbGlkZXMuc2xpY2UoIDAsIGNvdW50ICkgKS5mb3JFYWNoKCAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZSwgaW5kZXggKSA9PiB7XFxyXFxuICAgICAgICBjb25zdCBpc0hlYWQgPSBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggPCBjb3VudDtcXHJcXG4gICAgICAgIGNvbnN0IGNsb25lICA9IGNsb25lRGVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3AoIFNsaWRlLnNsaWRlLCBpbmRleCApO1xcclxcbiAgICAgICAgaXNIZWFkID8gYmVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yZSggY2xvbmUsIHNsaWRlc1sgMCBdLnNsaWRlICkgOiBhcHBlbmQoIEVsZW1lbnRzLmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0LCBjbG9uZSApO1xcclxcbiAgICAgICAgcHVzaCggY2xvbmVzLCBjbG9uZSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICAgIFNsaWRlcy5yZWdpc3RlciggY2xvbmUsIGluZGV4IC0gY291bnQgKyAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0hlYWQgPyAwIDogbGVuZ3RoICksIFNsaWRlLmluZGV4ICk7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30gKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogRGVlcGx5IGNsb25lcyB0aGUgcHJvdmlkZWQgZWxlbWVudCB3aXRoIHJlbW92aW5nIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgSUQgYXR0cmlidXRlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlbG0gICAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidBbiBlbGVtZW50IHRvIGNsb25lLlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4gaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4IG9mIHRoZSBjbG9uZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgY2xvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lZCBlbGVtZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjbG9uZURlZXAoIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG06IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyICk6IEhUTUxFbGVtZW50IHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGNvbnN0IGNsb25lID0gZWxtLmNsb25lTm9kZSggdHJ1ZSApIGFzIEhUTUxFbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudDtcXHJcXG4gICAgYWRkQ2xhc3MoIGNsb25lLCBvcHRpb25zLmNsYXNzZXMuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lICk7XFxyXFxuICAgIGNsb25lLmlkID0gYCR7IFNwbGlkZS5yb290LmlkIH0tYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lJHsgcGFkKCBpbmRleCArIDEgKSB9YDtcXHJcXG4gICAgcmV0dXJuIGNsb25lOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgbnVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciBvZiBlbGVtZW50cyB0byBnZW5lcmF0ZS5cXHJcXG4gICAqIFRoaXMgYWx3YXlzJwogICAgICAgICAgICAgICAgICAgICAgICBiIiByZXR1cm5zIDAgaWYgdGhlIHNsaWRlciB0eXBlIGlzIG5vdCBgJ2xvb3AnYC5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGNsb25lcy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW50KCk6IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBsZXQgeyBjbG9uZXMgfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoICEgU3BsaWRlLmlzKCBMT09QICkgKSB7XFxyXFxuICAgICAgY2xvbmVzID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDA7XFxyXFxuICAgIH0gZWxzZSBpZiAoIGlzVW5kZWZpbmVkKCBjbG9uZXMgKSApIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICAgICAgY29uc3QgZml4ZWRTaXplICA9IG9wdGlvbnNbIHJlc29sdmUoICciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZml4ZWRXaWR0aCcgKSBdICYmIENvbXBvbmVudHMuTGF5b3V0LnNsaWRlU2l6ZSggMCApOyIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBjb25zdCBmaXhlZENvdW50ID0gZml4ZWRTaXplICYmIGNlaWwoICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJyZWN0KCBFbGVtZW50cy50cmFjayApWyByZXNvbHZlKCAnd2lkdGgnICkgXSAvIGZpeGVkIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1NpemUgKTtcXHJcXG4gICAgICBjbG9uZXMgPSBmaXhlZENvdW50IHx8ICggb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiInNbIHJlc29sdmUoICdhdXRvV2lkdGgnICkgXSAmJiBTcGxpZGUubGVuZ3RoICkgfHwgb3AiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMucGVyUGFnZSAqIE1VTFRJUExJRVI7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBjbG9uZXM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICB9O1xcclxcbn1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuIiwiaW1wb3J0IHtcXHJcXG4gIEVWRU5UX01PVU5URUQsXFxyXFxuICBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxcXHJcXG4gIEVWRU5UX01PVkVELFxcclxcbiAgRVZFTlRfUkVGUkVTSCxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBFVkVOVF9SRVNJWkVELFxcclxcbiAgRVZFTlRfU0hJRlRFRCxcXHJcXG4gIEVWRU5UXycKICAgICAgICAgICAgICAgICAgICAgICAgYiJVUERBVEVELFxcclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IElETEUsIE1PVklORyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9zdGF0ZXMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5pbXBvcnQgeyBGQURFLCBMT09QLCBTTElERSB9IGZyb20gJy4uLy4uL2MiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQW55RnUiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uLCBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zLCBUcmFuc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhYiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzLCBjZWlsLCBjbGFtcCwgaXNVbmRlZmluZWQsIHJlY3QsIHN0eWxlIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL3V0aWxzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWMiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBmb3IgdGhlIE1vdmUgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgTW92ZUNvbXBvbmVudCBleHRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIG1vdmUoIGRlc3Q6IG51bWJlciwgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4OiBudW1iZXIsIHByZXY6IG51bWJlciwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbiApOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndm9pZDtcXHJcXG4gIGp1bXAoIGluZGV4OiBudW1iZXIgKTogdm9pZDtcXHJcXG4gIHRyYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduc2xhdGUoIHBvc2l0aW9uOiBudW1iZXIsIHByZXZlbnRMb29wPzogYm9vbGVhbiApOiB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pZDtcXHJcXG4gIHNoaWZ0KCBwb3NpdGlvbjogbnVtYmVyLCBiYWNrd2FyZHM6IGJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29sZWFuICk6IG51bWJlcjtcXHJcXG4gIGNhbmNlbCgpOiB2b2lkO1xcclxcbiAgdG9JbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXgoIHBvc2l0aW9uOiBudW1iZXIgKTogbnVtYmVyO1xcclxcbiAgdG9Qb3NpdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4OiBudW1iZXIsIHRyaW1taW5nPzogYm9vbGVhbiApOiBudW1iZXI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgZ2V0UG9zaXRpb24oKTogbnVtYmVyO1xcclxcbiAgZ2V0TGltaXQoIG1heDogYm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlYW4gKTogbnVtYmVyO1xcclxcbiAgZXhjZWVkZWRMaW1pdCggbWF4PzogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW4gfCB1bmRlZmluZWQsIHBvc2l0aW9uPzogbnVtYmVyICk6IGJvb2xlYW47XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqIEBpbnRlcm5hbCAqL1xcclxcbiAgcmVwb3NpdGlvbigpOiB2b2lkOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZyB0aGUgc2xpZGVyLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEByZXR1cm4gQSBNb3ZlIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCBmdW5jdGlvbiBNb3ZlKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogTW92ZUNvbXBvbmVudCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgY29uc3QgeyBvbiwgZW1pdCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIGNvbnN0IHsgc2V0IH0gPSBTcGxpZGUuc3RhdGU7XFxyXFxuICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneyBzbGlkZVNpemUsIGdldFBhZGRpbmcsIHRvdGFsU2l6ZSwgbGlzdFNpemUsIHNsaWRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidTaXplIH0gPSBDb21wb25lbnRzLkxheW91dDtcXHJcXG4gIGNvbnN0IHsgcmVzb2x2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIG9yaWVudCB9ID0gQ29tcG9uZW50cy5EaXJlY3Rpb247XFxyXFxuICBjb25zdCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0LCB0cmFjayB9ID0gQ29tcG9uZW50cy5FbGVtZW50cztcXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEhvbGRzIHRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGxldCBUcmFuc2l0aW9uOiBUcmFuc2l0aW9uQ29tcG9uZW50O1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBUcmFuc2l0aW9uID0gQ29tcG9uZW50cy5UcmFuc2l0aW9uO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb24oIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVTSVpFRCwgRVZFTlRfVVBEQVRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX1JFRlJFU0ggXSwgcmVwb3NpdGlvbiApO1xcclxcbiAgfVxcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogUmVwb3NpdGlvbnMgdGhlIHNsaWRlci5cXHJcXG4gICAqIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIERvIG5vdCBjYWxsIGBjYW5jZWwoKWAgaGVyZSBiZWNhdXNlIExhenlMb2FkIG1heSBlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdCByZXNpemUgd2hpbGUgdHJhbnNpdGlvbmluZy5cXHJcXG4gICAqIC0gaU9TIFNhZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmkgZW1pdHMgd2luZG93IHJlc2l6ZSBldmVudCB3aGlsZSB0aGUgdXNlciBzd2lwZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzbGlkZXIgYmVjYXVzZSBvZiB0aGUgYm90dG9tIGJhci5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIHJlcG9zaXRpb24oKTogdm9pZCB7XFxyXFxuICAgIGlmICggISAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50cy5Db250cm9sbGVyLmlzQnVzeSgpICkge1xcclxcbiAgICAgIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzLlNjcm9sbC5jYW5jZWwoKTtcXHJcXG4gICAgICBqdW1wKCBTcGxpZGUuaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4ICk7XFxyXFxuICAgICAgQ29tcG9uZW50cy5TbGlkZXMudXBkYXRlKCk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIE1vdmVzIHRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVyIHRvIHRoZSBkZXN0IGluZGV4IHdpdGggdGhlIFRyYW5zaXRpb24gY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGVzdCAgICAgLSBBIGRlc3RpbmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbiBpbmRleCB0byBnbyB0bywgaW5jbHVkaW5nIGNsb25lcycuXFxyXFxuICAgKiBAcCIKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIGluZGV4ICAgIC0gQSBzbGlkZSBpbmRleC5cXHJcXG4gICAqIEBwYXJhbSBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldiAgICAgLSBBIHByZXZpb3VzIGluZGV4LlxcclxcbiAgICogQHBhcmFtIGNhbGxiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjayAtIE9wdGlvbmFsLiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgdHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zaXRpb24gZW5kcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW92ZSggZGVzdDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciwgaW5kZXg6IG51bWJlciwgcHJldjogbnVtYmVyLCBjYWxsYmFjaz86IEFueScKICAgICAgICAgICAgICAgICAgICAgICAgYidGdW5jdGlvbiApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBkZXN0ICE9PSBpbmRleCAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FuU2hpZnQoIGRlc3QgPiBwcmV2ICkgKSB7XFxyXFxuICAgICAgY2FuY2VsKCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIHRyYW5zbGF0ZSggc2hpZnQoIGdldFBvc2l0aW9uKCksIGRlc3QgPiBwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndiApLCB0cnVlICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgc2V0KCBNT1ZJTkcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICAgIGVtaXQoIEVWRU5UX01PVkUsIGluZGV4LCBwcmV2LCBkZXN0ICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgICBUcmFuc2l0aW9uLnN0YXJ0KCBpbmRleCwgKCkgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBzZXQoIElETEUgKTtcXHJcXG4gICAgICBlbWl0KCBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUQsIGluZGV4LCBwcmV2LCBkZXN0ICk7XFxyXFxuICAgICAgY2FsbGJhY2sgJiYgY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGxiYWNrKCk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEp1bXBzIHRvIHRoZSBzbGlkZSBhdCB0aGUgc3BlY2lmaWVkIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBbiBpbmRleCB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInanVtcCB0by5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24ganVtcCggaW5kZXg6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgKTogdm9pZCB7XFxyXFxuICAgIHRyYW5zbGF0ZSggdG9Qb3NpdGlvbiggaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4LCB0cnVlICkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHRoZSBzbGlkZXIgdG8gdGhlIHByb3ZpZGVkIHBvc2l0aW9uLlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gcG9zaXRpb24gICAgLSBUaGUgcG9zaXRpb24gdG8gbW92ZSB0bycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKiBAcGFyYW0gcHJldmVudExvb3AgLSBPcHRpb25hbC4gSWYgYHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlYCwgc2V0cyB0aGUgcHJvdmlkZWQgcG9zaXRpb24gYXMgaXMuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiB0cmFuc2xhdGUoIHBvc2l0aW9uOiBudW1iZXIsIHByZXZlbnRMb28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncD86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIGlmICggISBTcGxpZGUuaXMoIEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQURFICkgKSB7XFxyXFxuICAgICAgY29uc3QgZGVzdGluYXRpb24gPSBwcmV2ZW50TG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3AgPyBwb3NpdGlvbiA6IGxvb3AoIHBvc2l0aW9uICk7XFxyXFxuICAgICAgc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKCBsaXN0LCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSR7IHJlc29sdmUoICdYJyApIH0oJCIKICAgICAgICAgICAgICAgICAgICAgICAgYid7IGRlc3RpbmF0aW9uIH1weClgICk7XFxyXFxuICAgICAgcG9zaXRpb24gIT09IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW5hdGlvbiAmJiBlbWl0KCBFVkVOVF9TSElGVEVEICk7XFxyXFxuICAgIH1cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExvb3BzIHRoZSBwcm92aWRlZCBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24gaWYgaXQgZXhjZWVkcyBib3VuZHMgKGxpbWl0IGluZGljZXMpLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqXFxyXFxuICAgKiBAcGFyYW0gcG9zaXRpb24gLSBBIHBvc2l0aW9uIHRvIGxvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsb29wKCBwb3NpdGlvbjogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciApOiBudW1iZXIge1xcclxcbiAgICBpZiAoIFNwbGlkZS5pcyggTE9PUCApICkge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICBjb25zdCBpbmRleCAgICAgICA9IHRvSW5kZXgoIHBvc2l0aW9uICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIGNvbnN0IGV4Y2VlZGVkTWF4ID0gaW5kZXggPiBDb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5Db250cm9sbGVyLmdldEVuZCgpO1xcclxcbiAgICAgIGNvbnN0IGV4Y2VlZGVkTWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IGluZGV4IDwgMDtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGV4Y2VlZGVkTWluIHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidleGNlZWRlZE1heCApIHtcXHJcXG4gICAgICAgIHBvc2l0aW9uID0gc2hpZnQoIHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiwgZXhjZWVkZWRNYXggKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIHJldHVybiBwb3NpdGlvbjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEFkZHMgb3Igc3VidHJhY3RzIHRoZSBzbGlkZXIgd2lkdGggdG8gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBwcm92aWRlZCBwb3NpdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uICAtIEEgcG9zaXRpb24gdG8gc2hpZnQuXFxyXFxuICAgKiBAcGFyYW0gYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2t3YXJkcyAtIERldGVybWluZXMgd2hldGhlciB0byBzaGlmdCB0aGUgc2xpZGVyIGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrd2FyZHMgb3IgZm9yd2FyZHMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NoaWZ0ZWQgcG9zaXRpb24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNoaWZ0KCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9zaXRpb246IG51bWJlciwgYmFja3dhcmRzOiBib29sZWFuICk6IG51bWJlciB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjb25zdCBleGNlc3MgPSBwb3NpdGlvbiAtIGdldExpbWl0KCBiYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dhcmRzICk7XFxyXFxuICAgIGNvbnN0IHNpemUgICA9IHNsaWRlclNpemUoKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHBvc2l0aW9uIC09IG9yaWVudCggc2l6ZSAqICggY2VpbCggYWJzKCBleGNlc3MgKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgLyBzaXplICkgfHwgMSApICkgKiAoIGJhY2t3YXJkcyA/IDEgOiAtMSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIHBvc2l0aW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQ2FuY2VscyB0cmFuc2l0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FuY2VsKCk6IHZvaWQge1xcclxcbiAgICB0cmFuc2xhdGUoIGdldFBvc2l0aW9uKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0cnVlICk7XFxyXFxuICAgIFRyYW5zaXRpb24uY2FuY2VsKCk7XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCB0byB0aGUgcG9zaXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAtIEEgcG9zaXRpb24gdG8gY29udmVydC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBUaGUgY2xvc2VzdCBpbmRleCB0byB0aGUgcG9zaXRpb24uXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBmdW5jdGlvbiB0b0luZGV4KCBwb3NpdGlvbjogbnVtYmVyICk6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIge1xcclxcbiAgICBjb25zdCBTbGlkZXMgPSBDb21wb25lbnRzLlNsaWRlcy5nZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCk7XFxyXFxuXFxyXFxuICAgIGxldCBpbmRleCAgICAgICA9IDA7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXQgbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcXHJcXG5cXHJcXG4gICAgZm9yICggbGV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpID0gMDsgaSA8IFNsaWRlcy5sZW5ndGg7IGkrKyApIHtcXHJcXG4gICAgICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgc2xpZGVJbmRleCA9IFNsaWRlc1sgaSBdLmluZGV4O1xcclxcbiAgICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkaXN0YW5jZSAgID0gYWJzKCB0b1Bvc2l0aW9uKCBzbGlkZUluZGV4LCB0cnVlICkgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9zaXRpb24gKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGRpc3RhbmNlIDw9IG1pbkRpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0YW5jZSApIHtcXHJcXG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgaW5kZXggICAgICAgPSBzbGlkZUluZGV4O1xcclxcbiAgICAgIH0gZWxzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Uge1xcclxcbiAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICByZXR1cm4gaW5kZXg7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBDb252ZXJ0cyB0aGUgc2xpZGUgaW5kZXggdG8gdGhlIHBvc2l0aW9uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggICAgLSBBbiBpbmRleCB0byBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udmVydC5cXHJcXG4gICAqIEBwYXJhbSB0cmltbWluZyAtIE9wdGlvbmFsLiBXaGV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlciB0byB0cmltIGVkZ2Ugc3BhY2VzIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQHJldHVybiBUaGUgcG9zaXRpb24gY29ycmVzcG9uZGluZyB3aXRoIHRoZSBpbmRleC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRvUG9zaXRpb24oIGluZGV4OiBudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmltbWluZz86IGJvb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4gICAgY29uc3QgcG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uID0gb3JpZW50KCB0b3RhbFNpemUoIGluZGV4IC0gMSApIC0gb2Zmc2V0KCBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXggKSApO1xcclxcbiAgICByZXR1cm4gdHJpbW1pbmcgPyB0cmltKCBwb3NpdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA6IHBvc2l0aW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJucyB0aGUgY3VycmVudCBwb3NpdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBUaGUgcG9zaXRpb24gb2YgdGhlIGxpc3QgZWxlbWVudC5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKCk6IG51bWJlciB7XFxyXFxuICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIidCBsZWZ0ID0gcmVzb2x2ZSggJ2xlZnQnICk7XFxyXFxuICAgIHJldHVybiByZWN0KCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdCApWyBsZWZ0IF0gLSByZWN0KCB0cmFjayApWyBsZWZ0IF0gKyBvcmllbnQoIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidQYWRkaW5nKCBmYWxzZSApICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBUcmltcyBzcGFjZXMgb24gdGhlIGVkZ2Ugb2YgdGhlIHNsaWRlci5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHBhcmFtIHBvc2l0aW9uIC0gQSBwb3NpdGlvbiB0byB0cmltJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgdHJpbW1lZCBwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRyaW0oIHBvc2l0aW9uOiBudW1iZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IG51bWJlciB7XFxyXFxuICAgIGlmICggb3B0aW9ucy50cmltU3BhY2UgJiYgU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5pcyggU0xJREUgKSApIHtcXHJcXG4gICAgICBwb3NpdGlvbiA9IGNsYW1wKCBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24sIDAsIG9yaWVudCggc2xpZGVyU2l6ZSggdHJ1ZSApIC0gbGlzdFNpemUoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiBwb3NpdGlvbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYW1vdW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEFuIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb2Zmc2V0KCBpbmRleDogbnVtYmVyICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBudW1iZXIge1xcclxcbiAgICBjb25zdCB7IGZvY3VzIH0gPSBvcHRpb25zO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgcmV0dXJuIGZvY3VzID09PSAnY2VudGVyJyA/ICggbGlzdFNpemUoKSAtIHNsaWRlIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1NpemUoIGluZGV4LCB0cnVlICkgKSAvIDIgOiArZm9jdXMgKiBzbGlkZVNpemUoIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCApIHx8IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRoZSBsaW1pdCBudW1iZXIgdGhhdCB0aGUgc2xpZGVyIGNhbiBtb3ZlIHRvLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gbWF4IC0gRGV0ZXJtaW5lcyB3aGV0aGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0byByZXR1cm4gdGhlIG1heGltdW0gb3IgbWluaW11bSBsaW1pdC5cXHJcXG4gICAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQHJldHVybiBUaGUgYm9yZGVyIG51bWJlci5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGdldExpbWl0KCBtYXg6IGJvb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB0b1Bvc2l0aW9uKCBtYXggPyBDb21wb25lbnRzLkNvbnRyb2xsZXIuZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldEVuZCgpIDogMCwgISEgb3B0aW9ucy50cmltU3BhY2UgKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGVyZSBpcyBlbm91Z2ggd2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvIHNoaWZ0IHRoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYidrd2FyZHMgLSBgdHJ1ZWAgZm9yIGNoZWNraW5nIGJhY2t3YXJkcywgb3IgYGZhbHNlYCBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yIGRvaW5nIGZvcndhcmRzLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGUgc2xpZGVyIGNhbiBiZSBzaGlmdGVkIGZvciB0aGUgc3BlY2lmaWVkIGRpcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gY2FuU2hpZnQoIGJhY2t3YXJkczogYm9vbGVhbiApOiBib29sZWFuIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGNvbnN0IHNoaWZ0ZWQgPSBvcmllbnQoIHNoaWZ0KCBnZXRQb3NpdGlvbigpLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmFja3dhcmRzICkgKTtcXHJcXG4gICAgcmV0dXJuIGJhY2t3YXJkc1xcclxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/IHNoaWZ0ZWQgPj0gMFxcclxcbiAgICAgIDogc2hpZnRlZCA8PSBsaXN0WyByZXNvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJ2ZSggJ3Njcm9sbFdpZHRoJyApIF0gLSByZWN0KCB0cmFjayApWyByZXNvbHZlKCAnd2lkIgogICAgICAgICAgICAgICAgICAgICAgICBiInRoJyApIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgdGhlIHByb3ZpZGVkIHBvc2l0aW9uIGV4Y2VlZHMgdGhlIG1pbmltdW0gb3IgbWF4aScKICAgICAgICAgICAgICAgICAgICAgICAgYidtdW0gbGltaXQgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBtYXggICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgLSBPcHRpb25hbC4gYHRydWVgIGZvciB0ZXN0aW5nIG1heCwgYGZhbHNlYCBmb3IgbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgYW5kIGB1bmRlZmluZWRgIGZvciBib3RoLlxcclxcbiAgICogQHBhcmFtIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAtIE9wdGlvbmFsLiBBIHBvc2l0aW9uIHRvIHRlc3QuIElmIG9taXR0ZWQsIHRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cyB0aGUgY3VycmVudCBwb3NpdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBgdHJ1ZWAgaWYgdGhlIHBvc2l0aW9uIGV4Y2VlZHMgdGhlIGxpbWl0LCBvciBvdGhlcncnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGV4Y2VlZGVkTGltaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBtYXg/OiBib29sZWFuIHwgdW5kZWZpbmVkLCBwb3NpdGlvbj86IG51bWJlciApOiBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29vbGVhbiB7XFxyXFxuICAgIHBvc2l0aW9uID0gaXNVbmRlZmluZWQoIHBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApID8gZ2V0UG9zaXRpb24oKSA6IHBvc2l0aW9uO1xcclxcbiAgICBjb25zdCBleGNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkZWRNaW4gPSBtYXggIT09IHRydWUgJiYgb3JpZW50KCBwb3NpdGlvbiApIDwgb3JpZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCggZ2V0TGltaXQoIGZhbHNlICkgKTtcXHJcXG4gICAgY29uc3QgZXhjZWVkZWRNYXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbWF4ICE9PSBmYWxzZSAmJiBvcmllbnQoIHBvc2l0aW9uICkgPiBvcmllbnQoIGdldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidMaW1pdCggdHJ1ZSApICk7XFxyXFxuICAgIHJldHVybiBleGNlZWRlZE1pbiB8fCBleCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWVkZWRNYXg7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQsXFxyXFxuICAgIG1vdmUsXFxyXFxuICAgIGp1bXAsXFxyXFxuICAgIHRyYW5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhdGUsXFxyXFxuICAgIHNoaWZ0LFxcclxcbiAgICBjYW5jZWwsXFxyXFxuICAgIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4LFxcclxcbiAgICB0b1Bvc2l0aW9uLFxcclxcbiAgICBnZXRQb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIGdldExpbWl0LFxcclxcbiAgICBleGNlZWRlZExpbWl0LFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmVwb3NpdGlvbixcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfUkVTSVpFJwogICAgICAgICAgICAgICAgICAgICAgICBiIkQsIEVWRU5UX1VQREFURUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgTU9WSU5HLCBTQ1JPTExJTkcgfSBmcm9tICcuLi8uLi9jbyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuc3RhbnRzL3N0YXRlcyc7XFxyXFxuaW1wb3J0IHsgTE9PUCwgU0xJREUgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29uc3RhbnRzL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCIKICAgICAgICAgICAgICAgICAgICAgICAgYicgeyBBbnlGdW5jdGlvbiwgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9JwogICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYXBwbHksIGFwcHJveGltIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZWx5RXF1YWwsIGJldHdlZW4sIGNsYW1wLCBmbG9vciwgaXNTdHJpbmcsIGlzVW5kZWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5lZCwgbWluIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgQ29udHJvbGxlciBjb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBpbnRlcmZhY2UgQ29udHJvbGxlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IHtcXHJcXG4gIGdvKCBjb250cm9sOiBudW1iZXIgfCBzdHJpbmcsIGFsbG93U2FtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VJbmRleD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQW55RnVuY3Rpb24gKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBzY3JvbGwoIGRlc3RpbmF0aW9uOiBudW1iZXIsIGR1cmF0aW9uPzogbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciwgc25hcD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQW55RnVuY3Rpb24gKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q7XFxyXFxuICBnZXROZXh0KCBkZXN0aW5hdGlvbj86IGJvb2xlYW4gKTogbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIGdldFByZXYoIGRlc3RpbmF0aW9uPzogYm9vbGVhbiApOiBudW1iZXI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZ2V0RW5kKCk6IG51bWJlcjtcXHJcXG4gIHNldEluZGV4KCBpbmRleDogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciApOiB2b2lkO1xcclxcbiAgZ2V0SW5kZXgoIHByZXY/OiBib29sZWFuICk6IG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXI7XFxyXFxuICB0b0luZGV4KCBwYWdlOiBudW1iZXIgKTogbnVtYmVyO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRvUGFnZSggaW5kZXg6IG51bWJlciApOiBudW1iZXI7XFxyXFxuICB0b0Rlc3QoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3NpdGlvbjogbnVtYmVyICk6IG51bWJlcjtcXHJcXG4gIGhhc0ZvY3VzKCk6IGJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWFuO1xcclxcbiAgaXNCdXN5KCk6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKiogQCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcm5hbCAqL1xcclxcbiAgZ2V0QWRqYWNlbnQoIHByZXY6IGJvb2xlYW4sIGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW5hdGlvbj86IGJvb2xlYW4gKTogbnVtYmVyO1xcclxcbn1cXHJcXG5cXHJcXG4vKicKICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgY29udHJvbGxpbmcgdGhlIHNsaWRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20gU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENvbnRyb2xsZXIgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIENvbnRyb2xsZXIoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBDb250cm9sbGVyQ29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICBjb25zdCB7IG9uLCBlbWl0IH0gPSBFdmVudEludGVyZmFjZSggU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSApO1xcclxcbiAgY29uc3QgeyBNb3ZlIH0gPSBDb21wb25lbnRzO1xcclxcbiAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHsgZ2V0UG9zaXRpb24sIGdldExpbWl0LCB0b1Bvc2l0aW9uIH0gPSBNb3ZlOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGNvbnN0IHsgaXNFbm91Z2gsIGdldExlbmd0aCB9ID0gQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicuU2xpZGVzO1xcclxcbiAgY29uc3QgeyBvbWl0RW5kIH0gPSBvcHRpb25zO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGlzTG9vcCAgPSBTcGxpZGUuaXMoIExPT1AgKTtcXHJcXG4gIGNvbnN0IGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlID0gU3BsaWRlLmlzKCBTTElERSApO1xcclxcbiAgY29uc3QgZ2V0TmV4dCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhcHBseSggZ2V0QWRqYWNlbnQsIGZhbHNlICk7XFxyXFxuICBjb25zdCBnZXRQcmV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGFwcGx5KCBnZXRBZGphY2VudCwgdHJ1ZSApO1xcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhlIGN1cnJlbnQgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjdXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInckluZGV4ID0gb3B0aW9ucy5zdGFydCB8fCAwO1xcclxcblxcclxcbiAgLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogVGhlIGxhdGVzdCBlbmQgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGxldCBlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkSW5kZXg6IG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid2aW91cyBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHByZXZJbmRleCA9IGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBsYXRlc3QgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvZiBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBzbGlkZUNvdW50OiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGF0ZXN0IGBwZXJNb3ZlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwZXJNb3ZlOiBudW1iZXI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGF0ZXN0IGBwZXJNb3ZlYCB2YWx1ZS5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGxldCBwZXJQYWdlOiBudW1iZXI7XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGluaXQoKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFU0gsIEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEIF0sIGluaXQgKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKCBFVkVOVF9SRVNJWkVELCBvblJlc2l6ZWQgKTtcXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIHNvbWUgcGFyYW1ldGVycy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBOZWVkcyB0byBjaGVjayB0aGUgbnVtYmVyIG9mIHNsaWRlcyBzaW5jZSB0aGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYid1cnJlbnQgaW5kZXggbWF5IGJlIG91dCBvZiB0aGUgcmFuZ2UgYWZ0ZXIgcmVmcmVzaC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBUaGUgcHJvY2VzcyBvcmRlciBtdXN0IGJlIEVsZW1lbnRzIC0+IENvbnRybycKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGVyIC0+IE1vdmUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGluaXQoKTogdm9pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Qge1xcclxcbiAgICBzbGlkZUNvdW50ID0gZ2V0TGVuZ3RoKCB0cnVlICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBwZXJNb3ZlICAgID0gb3B0aW9ucy5wZXJNb3ZlO1xcclxcbiAgICBwZXJQYWdlICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICA9IG9wdGlvbnMucGVyUGFnZTtcXHJcXG4gICAgZW5kSW5kZXggICA9IGdldEVuZCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG5cXHJcXG4gICAgY29uc3QgaW5kZXggPSBjbGFtcCggY3VyckluZGV4LCAwLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb21pdEVuZCA/IGVuZEluZGV4IDogc2xpZGVDb3VudCAtIDEgKTtcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmICggaW5kZXggIT09IGN1cnJJbmRleCApIHtcXHJcXG4gICAgICBjdXJySW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gaW5kZXg7XFxyXFxuICAgICAgTW92ZS5yZXBvc2l0aW9uKCk7XFxyXFxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmlld3BvcnQgd2lkdGggaXMgY2hhbmdlZC5cXHJcXG4gICAqIFRoZSBlbmQgaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4IGNhbiBjaGFuZ2UgaWYgYGF1dG9XaWR0aGAgb3IgYGZpeGVkV2lkdGhgIGlzIGVuYWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvblJlc2l6ZWQoKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBpZiAoIGVuZEluZGV4ICE9PSBnZXRFbmQoKSApIHtcXHJcXG4gICAgICBlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidpdCggRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTW92ZXMgdGhlIHNsaWRlciBieSB0aGUgY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb2wgcGF0dGVybi5cXHJcXG4gICAqXFxyXFxuICAgKiBAc2VlIGBTcGxpZGUjZ28oKWBcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRyb2wgICAgICAgIC0gQSBjb250cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCBwYXR0ZXJuLlxcclxcbiAgICogQHBhcmFtIGFsbG93U2FtZUluZGV4IC0gT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmFsLiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYWxsb3cgZ29pbmcgdG8gdGhlIGN1cnJlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IGluZGV4IG9yIG5vdC5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAgICAgICAtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidPcHRpb25hbC4gQSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGFmdGVyIHRyYW5zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGVuZHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdvKCBjb250cm9sOiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyIHwgc3RyaW5nLCBhbGxvd1NhbWVJbmRleD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQScKICAgICAgICAgICAgICAgICAgICAgICAgYidueUZ1bmN0aW9uICk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgaXNCdXN5KCkgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IGRlc3QgID0gcGFyc2UoIGNvbnRyb2wgKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29uc3QgaW5kZXggPSBsb29wKCBkZXN0ICk7XFxyXFxuXFxyXFxuICAgICAgaWYgKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXggPiAtMSAmJiAoIGFsbG93U2FtZUluZGV4IHx8IGluZGV4ICE9PSBjdXJySW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4ICkgKSB7XFxyXFxuICAgICAgICBzZXRJbmRleCggaW5kZXggKTtcXHJcXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBNb3ZlLm1vdmUoIGRlc3QsIGluZGV4LCBwcmV2SW5kZXgsIGNhbGxiYWNrICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogU2Nyb2xscyB0aGUgc2xpZGVyIHRvIHRoZSBzcGVjaWZpZWQgZGVzdGluYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHdpdGggdXBkYXRpbmcgaW5kaWNlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIGRlc3RpbmF0aW9uIC0gVGhlIHBvc2l0aW9uIHRvIHNjcm9sbCB0aGUgc2xpZGVyIHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqIEBwYXJhbSBkdXJhdGlvbiAgICAtIE9wdGlvbmFsLiBTcGVjaWZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIHRoZSBzY3JvbGwgZHVyYXRpb24uXFxyXFxuICAgKiBAcGFyYW0gc25hcCAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8gc25hcCB0aGUgc2xpZGVyIHRvIHRoZSBjbG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzdCBzbGlkZSBvciBub3QuXFxyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgICAgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT3B0aW9uYWwuIEEgY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBhZnRlciBzY3JvbGwgZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNjcm9sbCggZGVzdGluYXRpb246JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIsIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInPzogQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIENvbXBvbmVudHMuU2Nyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbC5zY3JvbGwoIGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgc25hcCwgKCkgPT4ge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICBjb25zdCBpbmRleCA9IGxvb3AoIE1vdmUudG9JbmRleCggZ2V0UG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduKCkgKSApO1xcclxcbiAgICAgIHNldEluZGV4KCBvbWl0RW5kID8gbWluKCBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGVuZEluZGV4ICkgOiBpbmRleCApO1xcclxcbiAgICAgIGNhbGxiYWNrICYmIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjaygpO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBQYXJzZXMgdGhlIGNvbnRyb2wgYW5kIHJldHVybnMgYSBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRyb2wgLSBBIGNvbnRybycKICAgICAgICAgICAgICAgICAgICAgICAgYidsIHBhdHRlcm4gdG8gcGFyc2UuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBIGBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdGAgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHBhcnNlKCBjb250cm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbDogbnVtYmVyIHwgc3RyaW5nICk6IG51bWJlciB7XFxyXFxuICAgIGxldCBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBjdXJySW5kZXg7XFxyXFxuXFxyXFxuICAgIGlmICggaXNTdHJpbmcoIGNvbnRyb2wgKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgKSB7XFxyXFxuICAgICAgY29uc3QgWyAsIGluZGljYXRvciwgbnVtYmVyIF0gPSBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudHJvbC5tYXRjaCggLyhbK1xcXFwtPD5dKShcXFxcZCspPy8gKSB8fCBbXTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJuXFxyXFxuICAgICAgaWYgKCBpbmRpY2F0b3IgPT09ICcrJyB8fCBpbmRpY2F0b3IgPSIKICAgICAgICAgICAgICAgICAgICAgICAgYiI9PSAnLScgKSB7XFxyXFxuICAgICAgICBpbmRleCA9IGNvbXB1dGVEZXN0SW5kZXgoICIKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXJySW5kZXggKyArYCR7IGluZGljYXRvciB9JHsgK251bWJlciB8fCAxIH1gLCBjdXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiIkluZGV4ICk7XFxyXFxuICAgICAgfSBlbHNlIGlmICggaW5kaWNhdG9yID09PSAnPicgIgogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgICAgaW5kZXggPSBudW1iZXIgPyB0b0luZGV4KCArbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApIDogZ2V0TmV4dCggdHJ1ZSApO1xcclxcbiAgICAgIH0gZWxzZSBpZiAoIGluZGljJwogICAgICAgICAgICAgICAgICAgICAgICBiImF0b3IgPT09ICc8JyApIHtcXHJcXG4gICAgICAgIGluZGV4ID0gZ2V0UHJldiggdHJ1IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gaXNMb29wID8gY29udHJvbCA6IGNsYW1wKCBjb250cm9sLCAwLCBlbmRJbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gaW5kZXg7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIGFuIGFkamFjZW50IGRlc3RpbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpbmRleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAaW50ZXJuYWxcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIHByZXYgICAgICAgIC0gRGV0ZXJtaW5lcyB3aGV0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciB0byByZXR1cm4gYSBwcmV2aW91cyBvciBuZXh0IGluZGV4LlxcclxcbiAgICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBkZXN0aW5hdGlvbiAtIE9wdGlvbmFsLiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZycKICAgICAgICAgICAgICAgICAgICAgICAgYidldCBhIGRlc3RpbmF0aW9uIGluZGV4IG9yIGEgc2xpZGUgb25lLlxcclxcbiAgICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcmV0dXJuIEFuIGFkamFjZW50IGluZGV4IGlmIGF2YWlsYWJsZSwgb3Igb3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGVyd2lzZSBgLTFgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRBZGphY2VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHByZXY6IGJvb2xlYW4sIGRlc3RpbmF0aW9uPzogYm9vbGVhbiApOiBudW1iZXIge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgY29uc3QgbnVtYmVyID0gcGVyTW92ZSB8fCAoIGhhc0ZvY3VzKCkgPyAxIDogcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlclBhZ2UgKTtcXHJcXG4gICAgY29uc3QgZGVzdCAgID0gY29tcHV0ZURlc3RJbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGN1cnJJbmRleCArIG51bWJlciAqICggcHJldiA/IC0xIDogMSApLCBjdXJySW5kZXgsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAhICggcGVyTW92ZSB8fCBoYXNGb2N1cygpICkgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA9PT0gLTEgJiYgaXNTbGlkZSApIHtcXHJcXG4gICAgICBpZiAoICEgYXBwcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGltYXRlbHlFcXVhbCggZ2V0UG9zaXRpb24oKSwgZ2V0TGltaXQoICEgcHJldiApLCAxICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpICkge1xcclxcbiAgICAgICAgcmV0dXJuIHByZXYgPyAwIDogZW5kSW5kZXg7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGVzdGluYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uID8gZGVzdCA6IGxvb3AoIGRlc3QgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIENvbnZlcnRzIHRoZSBkZXNpcmVkIGRlc3RpbmF0aW9uIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0byB0aGUgdmFsaWQgb25lLlxcclxcbiAgICogLSBJZiB0aGUgYG1vdmVgIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gaXMgYHRydWVgLCBmaW5kcyB0aGUgZGVzdCBpbmRleCB3aG9zZSBwb3NpdGlvbiBpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlmZmVyZW50IHdpdGggdGhlIGN1cnJlbnQgb25lLlxcclxcbiAgICogLSBUaGlzIG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXkgcmV0dXJuIGNsb25lIGluZGljZXMgaWYgdGhlIGVkaXRvciBpcyB0aGUgbG9vcCBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSxcXHJcXG4gICAqICAgb3IgYC0xYCBpZiB0aGVyZSBpcyBubyBzbGlkZSB0byBnbycKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKiAtIFRoZXJlIGFyZSBzdGlsbCBzbGlkZXMgd2hlcmUgdGhlIGNhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXNlbCBjYW4gZ28gaWYgYm9yZGVycyBhcmUgYmV0d2VlbiBgZnJvbWAgYW5kIGBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2AuXFxyXFxuICAgKiAtIElmIGBmb2N1c2AgaXMgYXZhaWxhYmxlLCBuZWVkcyB0byBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsY3VsYXRlIHRoZSBkZXN0IGluZGV4IGV2ZW4gaWYgdGhlcmUgYXJlIGVub3VnaCBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyIG9mIHNsaWRlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGVzdCAgICAgLScKICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW5kZXguXFxyXFxuICAgKiBAcGFyYW0gZicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb20gICAgIC0gQSBiYXNlIGluZGV4LlxcclxcbiAgICogQHBhcmFtIHNuYXBQYWdlICcKICAgICAgICAgICAgICAgICAgICAgICAgYictIE9wdGlvbmFsLiBXaGV0aGVyIHRvIHNuYXAgYSBwYWdlIG9yIG5vdC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHJldHVybiBBIGNvbnZlcnRlZCBkZXN0aW5hdGlvbiBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGluY2x1ZGluZyBjbG9uZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlRGVzdEluZGV4KCBkZXN0OiBudW1iZXIsIGZyb206IG51bWJlciwgc25hcFBhZ2U/OiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYm9vbGVhbiApOiBudW1iZXIge1xcclxcbiAgICBpZiAoIGlzRW5vdWdoKCkgfHwgaGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0ZvY3VzKCkgKSB7XFxyXFxuICAgICAgY29uc3QgaW5kZXggPSBjb21wdXRlTW92YWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVEZXN0SW5kZXgoIGRlc3QgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGluZGV4ICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdCApIHtcXHJcXG4gICAgICAgIGZyb20gICAgID0gZGVzdDtcXHJcXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0ICAgICA9IGluZGV4O1xcclxcbiAgICAgICAgc25hcFBhZ2UgPSBmYWxzZTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIGlmICggZGVzdCA8IDAgfHwgZGVzdCA+ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRJbmRleCApIHtcXHJcXG4gICAgICAgIGlmICggISBwZXJNb3ZlICYmICggYmV0dycKICAgICAgICAgICAgICAgICAgICAgICAgYidlZW4oIDAsIGRlc3QsIGZyb20sIHRydWUgKSB8fCBiZXR3ZWVuKCBlbmRJbmRleCwgZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ20sIGRlc3QsIHRydWUgKSApICkge1xcclxcbiAgICAgICAgICBkZXN0ID0gdG9JbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3goIHRvUGFnZSggZGVzdCApICk7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKCBpc0xvb3AgKSB7XFxyXFxuICAgICAgICAgICAgZGVzdCA9IHNuYXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUGFnZVxcclxcbiAgICAgICAgICAgICAgPyBkZXN0IDwgMCA/IC0gKCBzbGlkZUNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCAlIHBlclBhZ2UgfHwgcGVyUGFnZSApIDogc2xpZGVDb3VudFxcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIDogZGVzdDtcXHJcXG4gICAgICAgICAgfSBlbHNlIGlmICggb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV3aW5kICkge1xcclxcbiAgICAgICAgICAgIGRlc3QgPSBkZXN0IDwgMCA/IGVuZEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCA6IDA7XFxyXFxuICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3QgPSAtMTtcXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAgfVxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9IGVsc2Uge1xcclxcbiAgICAgICAgaWYgKCBzbmFwUGFnZSAmJiBkZXN0ICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnJvbSApIHtcXHJcXG4gICAgICAgICAgZGVzdCA9IHRvSW5kZXgoIHRvUGFnZSggZicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb20gKSArICggZGVzdCA8IGZyb20gPyAtMSA6IDEgKSApO1xcclxcbiAgICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgZGVzdCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYictMTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGVzdDtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEZpbmRzIHRoZSBkZXN0IGluZGV4IHdob3NlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3NpdGlvbiBpcyBkaWZmZXJlbnQgd2l0aCB0aGUgY3VycmVudCBvbmUgZm9yIGB0cmltJwogICAgICAgICAgICAgICAgICAgICAgICBiIlNwYWNlOiAnbW92ZSdgLlxcclxcbiAgICogVGhpcyBjYW4gYmUgbmVnYXRpdmUgb3IgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2dyZWF0ZXIgdGhhbiBgbGVuZ3RoIC0gMWAuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSBkZXN0IC0gQSBkZXN0IGluZGV4LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdCBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY29tcHV0ZU1vdmFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlRGVzdEluZGV4KCBkZXN0OiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiggaXNTbGlkZSAmJiBvcHRpb25zLnRyaW1TcGFjZSA9PT0gJ21vdmUnICYmIGRlc3QgIT0iCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBjdXJySW5kZXggKSB7XFxyXFxuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb24oKTtcXHJcXG5cXHJcXG4gICAgICB3aGlsZSAoIHBvc2l0aW9uID09PSB0b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiggZGVzdCwgdHJ1ZSApICYmIGJldHdlZW4oIGRlc3QsIDAsIFNwbGlkZS5sZW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoIC0gMSwgISBvcHRpb25zLnJld2luZCApICkge1xcclxcbiAgICAgICAgZGVzdCA8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjdXJySW5kZXggPyAtLWRlc3QgOiArK2Rlc3Q7XFxyXFxuICAgICAgfVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgICByZXR1cm4gZGVzdDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAvKipcXHJcXG4gICAqIExvb3BzIHRoZSBwcm92aWRlZCBpbmRleCBvbmx5IGluIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgbG9vcCBtb2RlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEFuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCB0byBsb29wLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBsb29wZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsb29wKCBpbmRleDogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciApOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gaXNMb29wID8gKCBpbmRleCArIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZUNvdW50ICkgJSBzbGlkZUNvdW50IHx8IDAgOiBpbmRleDtcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGVuZCBpbmRleCB3aGVyZSB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHNsaWRlciBjYW4gZ28uXFxyXFxuICAgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIgaGFzIDEwIHNsaWRlcyBhbmQgdGhlIGBwZXJQYWdlYCBvcHRpb24gaXMgMycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgKiB0aGUgc2xpZGVyIGNhbiBnbyB0byB0aGUgc2xpZGUgOCAodGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCBpcyA3KS5cXHJcXG4gICAqIElmIHRoZSBgb21pdEVuZGAgb3B0aW9uIGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdmFpbGFibGUsIGNvbXB1dGVzIHRoZSBpbmRleCBmcm9tIHRoZSBzbGlkZSBwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBbiBlbmQgaW5kZXguXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRFbmQoKTogbnVtYmVyIHtcXHJcXG4gICAgbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBlbmQgPSBzbGlkZUNvdW50IC0gKCBoYXNGb2N1cygpIHx8ICggaXNMb29wICYmIHBlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidNb3ZlICkgPyAxIDogcGVyUGFnZSApO1xcclxcblxcclxcbiAgICB3aGlsZSAoIG9taXRFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kICYmIGVuZC0tID4gMCApIHtcXHJcXG4gICAgICBpZiAoIHRvUG9zaXRpb24oIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUNvdW50IC0gMSwgdHJ1ZSApICE9PSB0b1Bvc2l0aW9uKCBlbmQsIHRydWUgKSApIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgICBlbmQrKztcXHJcXG4gICAgICAgIGJyZWFrO1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIGNsYW1wKCBlbmQsIDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBzbGlkZUNvdW50IC0gMSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQ29udmVydHMgdGhlIHBhZ2UgaW5kZXggdG8gdGhlIHNsaWRlIGluZGV4LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcGFnZSAtIEEgcGFnZSBpbmRleCB0byBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYidudmVydC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgc2xpZGUgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB0b0luZGV4KCBwYWdlOiBudW1iZXIgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiBjbGFtcCggaGFzRm9jdXMoKSA/IHBhZycKICAgICAgICAgICAgICAgICAgICAgICAgYidlIDogcGVyUGFnZSAqIHBhZ2UsIDAsIGVuZEluZGV4ICk7XFxyXFxuICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb252ZXJ0cyB0aGUgc2xpZGUgaW5kZXggdG8gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBwYWdlIGluZGV4LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCB0byBjb252ZXJ0LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdG9QYWdlKCBpbmRleDogbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciApOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gaGFzRm9jdXMoKVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA/IG1pbiggaW5kZXgsIGVuZEluZGV4IClcXHJcXG4gICAgICA6IGZsb29yKCAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCA+PSBlbmRJbmRleCA/IHNsaWRlQ291bnQgLSAxIDogaW5kZXggKSAvIHBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnZlcnRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgZGVzdGluYXRpb24gcG9zaXRpb24gdG8gdGhlIGRlc3QgaW5kZXguXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIEEgcG9zaXRpb24gdG8gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnZlcnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBIGRlc3QgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB0b0Rlc3QoIGRlc3RpbmF0aW9uOiBudScKICAgICAgICAgICAgICAgICAgICAgICAgYidtYmVyICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IGNsb3Nlc3QgPSBNb3ZlLnRvSScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KCBkZXN0aW5hdGlvbiApO1xcclxcbiAgICByZXR1cm4gaXNTbGlkZSA/IGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtcCggY2xvc2VzdCwgMCwgZW5kSW5kZXggKSA6IGNsb3Nlc3Q7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBTZXRzIGEgbmV3IGluZGV4IGFuZCByZXRhaW5zIG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGQgb25lLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEEgbmV3IGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleCB0byBzZXQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNldEluZGV4KCBpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3g6IG51bWJlciApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBpbmRleCAhPT0gY3VyckluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCApIHtcXHJcXG4gICAgICBwcmV2SW5kZXggPSBjdXJySW5kZXg7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnJJbmRleCA9IGluZGV4O1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50L3ByZXZpb3VzIGluZGV4LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJldiAtIE9wdGlvbmFsLiBXaGV0aGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0byByZXR1cm4gcHJldmlvdXMgaW5kZXggb3Igbm90LlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZ2V0SW5kZXgoIHByZXY/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICByZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJbmRleDtcXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBmb2N1cyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9uIGlzIGF2YWlsYWJsZSBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gYHRydWVgIGlmIHRoZSBzbGlkZXIgaGFzIHRoZSBmb2N1cyBvcHRpb24uXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBoYXNGb2N1cygpOiBib29sZWFuIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiAhIGlzVW5kZWZpbmVkKCBvcHRpb25zLmZvY3VzICkgfHwgb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNOYXZpZ2F0aW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY2tzIGlmIHRoZSBzbGlkZXIgaXMgbW92aW5nL3Njcm9sbGluZyBvciBub3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzbGlkZXIgY2FuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGlzQnVzeSgpOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIFNwbGlkZS5zdGF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UuaXMoIFsgTU9WSU5HLCBTQ1JPTExJTkcgXSApICYmICEhIG9wdGlvbnMud2FpdEZvclQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2l0aW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50LFxcclxcbiAgICBnbyxcXHJcXG4gICAgc2Nyb2xsLFxcclxcbiAgICBnZXROZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dCxcXHJcXG4gICAgZ2V0UHJldixcXHJcXG4gICAgZ2V0QWRqYWNlbnQsXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBnZXRFbmQsXFxyXFxuICAgIHNldEluZGV4LFxcclxcbiAgICBnZXRJbmRleCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHRvSW5kZXgsXFxyXFxuICAgIHRvUGFnZSxcXHJcXG4gICAgdG9EZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCxcXHJcXG4gICAgaGFzRm9jdXMsXFxyXFxuICAgIGlzQnVzeSxcXHJcXG4gIH07XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG4iLCJpbXBvcnQgeyBBTExfQVRUUklCVVRFUywgQVJJQV9DT05UUk9MUycKICAgICAgICAgICAgICAgICAgICAgICAgYiIsIEFSSUFfTEFCRUwgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IENMQVNTX0FSUk9XUyB9IGZyb20gJy4uLy4uL2NvbnN0YW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIEVWRU5UX0FSUk9XU19NT1VOVCIKICAgICAgICAgICAgICAgICAgICAgICAgYidFRCxcXHJcXG4gIEVWRU5UX0FSUk9XU19VUERBVEVELFxcclxcbiAgRVZFTlRfRU5EX0lOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RFWF9DSEFOR0VELFxcclxcbiAgRVZFTlRfTU9VTlRFRCxcXHJcXG4gIEVWRU5UX01PVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCxcXHJcXG4gIEVWRU5UX1JFRlJFU0gsXFxyXFxuICBFVkVOVF9TQ1JPTExFRCxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICBFVkVOVF9VUERBVEVELFxcclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2UiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidmVudHMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW0iCiAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCB7XFxyXFxuICBhZGRDbGFzcyxcXHJcXG4gIGFwcGVuZCxcXHJcXG4gIGFwcGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSxcXHJcXG4gIGFzc2lnbixcXHJcXG4gIGJlZm9yZSxcXHJcXG4gIGNyZWF0ZSxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBkaXNwbGF5LFxcclxcbiAgcGFyc2VIdG1sLFxcclxcbiAgcmVtb3ZlLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJlbW92ZUF0dHJpYnV0ZSxcXHJcXG4gIHJlbW92ZUNsYXNzLFxcclxcbiAgc2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiInJpYnV0ZSxcXHJcXG59IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBQQVQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiSCwgU0laRSwgWE1MX05BTUVfU1BBQ0UgfSBmcm9tICcuL3BhdGgnO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgQXJyb3dzIGNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGludGVyZmFjZSBBcnJvd3NDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICBhcnJvd3M6IHsgcHJldj86IEhUTUxCdXR0b25FbGVtZW50LCBuZXh0PycKICAgICAgICAgICAgICAgICAgICAgICAgYic6IEhUTUxCdXR0b25FbGVtZW50IH07XFxyXFxuXFxyXFxuICAvKiogQGludGVybmFsICovJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgdXBkYXRlKCk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBUaGUgY29tcG9uZW50IGZvciBoYW5kbGluZyBwcmV2aW91cyBhbmQgbmV4dCBhcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3dzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gQW4gQXJyb3dzIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBBcnJvd3MoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cywgb3B0aW9uczogT3B0aW9ucyApOiBBcnJvd3NDb21wb25lbnQge1xcclxcbiAgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHsgb24sIGJpbmQsIGVtaXQgfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgeyBjbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgYidlcywgaTE4biB9ID0gb3B0aW9ucztcXHJcXG4gIGNvbnN0IHsgRWxlbWVudHMsIENvbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cm9sbGVyIH0gPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBhcnJvd3M6IHBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWhvbGRlciwgdHJhY2sgfSA9IEVsZW1lbnRzO1xcclxcblxcclxcbiAgLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogVGhlIHdyYXBwZXIgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHdyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGVyID0gcGxhY2Vob2xkZXI7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgcHJldmlvdXMgYXJyb3cgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gRWxlbWVudHMucHJldjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0IGFycm93IGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBuZXh0ID0gRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLm5leHQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidldGhlciB0aGUgY29tcG9uZW50IGNyZWF0ZXMgYXJyb3dzIG9yIHJldHJpZXZlZCBmcm9tJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgRE9NLlxcclxcbiAgICovXFxyXFxuICBsZXQgY3JlYXRlZDogYm9vbGVhbicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG1vZGlmaWVyIGNsYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAgICovXFxyXFxuICBsZXQgd3JhcHBlckNsYXNzZXM6IHN0cmluZzsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEFuIG9iamVjdCB3aXRoIHByZXZpb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBhbmQgbmV4dCBhcnJvd3MuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0IGFycm93czogQScKICAgICAgICAgICAgICAgICAgICAgICAgYiJycm93c0NvbXBvbmVudFsgJ2Fycm93cycgXSA9IHt9O1xcclxcblxcclxcbiAgLyoiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0KCk7XFxyXFxuICAgIG9uKCBFVkVOVF9VUERBVEVELCByZW1vdW50ICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZW1vdW50cyB0aGUgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVtb3VudCgpOiB2b2lkIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGRlc3Ryb3koKTtcXHJcXG4gICAgbW91bnQoKTtcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29uc3QgZW5hYmxlZCA9IG9wdGlvbnMuYXJyb3dzO1xcclxcblxcclxcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBlbmFibGVkICYmICEgKCBwcmV2ICYmIG5leHQgKSApIHtcXHJcXG4gICAgICBjcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlQXJyb3dzKCk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaWYgKCBwcmV2ICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiBuZXh0ICkge1xcclxcbiAgICAgIGFzc2lnbiggYXJyb3dzLCB7IHByZXYsIG5leHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIH0gKTtcXHJcXG4gICAgICBkaXNwbGF5KCB3cmFwcGVyLCBlbmFibGVkID8gJycgOiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ25vbmUnICk7XFxyXFxuICAgICAgYWRkQ2xhc3MoIHdyYXBwZXIsICggd3JhcHBlckMiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc2VzID0gYCR7IENMQVNTX0FSUk9XUyB9LS0keyBvcHRpb25zLmRpcmVjdGlvbiB9YCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKSApO1xcclxcblxcclxcbiAgICAgIGlmICggZW5hYmxlZCApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBsaXN0ZW4oKTtcXHJcXG4gICAgICAgIHVwZGF0ZSgpO1xcclxcbiAgICAgICAgc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZSggWyBwcmV2LCBuZXh0IF0sIEFSSUFfQ09OVFJPTFMsIHRyYWNrLmlkICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgICAgZW1pdCggRVZFTlRfQVJST1dTX01PVU5URUQsIHByZXYsIG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXh0ICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBEZXN0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcXHJcXG4gICAgZXZlbnQuZGVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3koKTtcXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIHdyYXBwZXIsIHdyYXBwZXJDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlcyApO1xcclxcblxcclxcbiAgICBpZiAoIGNyZWF0ZWQgKSB7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW92ZSggcGxhY2Vob2xkZXIgPyBbIHByZXYsIG5leHQgXSA6IHdyYXBwZXIgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICAgcHJldiA9IG5leHQgPSBudWxsO1xcclxcbiAgICB9IGVsc2Uge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICByZW1vdmVBdHRyaWJ1dGUoIFsgcHJldiwgbmV4dCBdLCBBTExfQVRUUklCVScKICAgICAgICAgICAgICAgICAgICAgICAgYidURVMgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICogTGlzdGVucyB0byBzb21lIGV2ZW50cy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGxpc3RlbigpOiB2b2lkIHtcXHJcXG4gICAgb24oIFsgRVZFTlRfTU9VTlRFRCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX01PVkVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9TQ1JPTExFRCwgRVZFTlRfRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRF9JTkRFWF9DSEFOR0VEIF0sIHVwZGF0ZSApO1xcclxcbiAgICBiaW5kKCBuZXh0LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ2NsaWNrJywgYXBwbHkoIGdvLCAnPicgKSApO1xcclxcbiAgICBiaW5kKCBwcmV2LCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJ2NsaWNrJywgYXBwbHkoIGdvLCAnPCcgKSApO1xcclxcbiAgfVxcclxcblxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogVGhlIHdyYXBwZXIgZnVuY3Rpb24gb2YgQ29udHJvbGxlciMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ28oKS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY29udHJvbCAtIFRoZSBjb250cicKICAgICAgICAgICAgICAgICAgICAgICAgYidvbCBwYXR0ZXJuLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnbyggY29udHJvbDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZyApOiB2b2lkIHtcXHJcXG4gICAgQ29udHJvbGxlci5nbyggY29udHJvbCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RydWUgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ3JlYXRlIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvd3MgYW5kIGFwcGVuZCB0aGVtIHRvIHRoZSBzbGlkZXIuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBmdW5jdGlvbiBjcmVhdGVBcnJvd3MoKTogdm9pZCB7XFxyXFxuICAgIHdyYXBwZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJyID0gcGxhY2Vob2xkZXIgfHwgY3JlYXRlKCAnZGl2JywgY2xhc3Nlcy5hcnJvd3MgKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIHByZXYgICAgPSBjcmVhdGVBcnJvdyggdHJ1ZSApO1xcclxcbiAgICBuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCAgICA9IGNyZWF0ZUFycm93KCBmYWxzZSApO1xcclxcbiAgICBjcmVhdGVkID0gdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XFxyXFxuXFxyXFxuICAgIGFwcGVuZCggd3JhcHBlciwgWyBwcmV2LCBuZXh0IF0gKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICEgcGxhY2Vob2xkZXIgJiYgYmVmb3JlKCB3cmFwcGVyLCB0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ3JlYXRlcyBhbiBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jyb3cgYnV0dG9uLlxcclxcbiAgICogSW4gSUUsIEEgU1ZHIGVsZW1lbnQgaXMgZm9jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzYWJsZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJldiAtIERldGVybWluZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHdoZXRoZXIgdG8gY3JlYXRlIGEgcHJldmlvdXMgb3IgbmV4dCBhcnJvdy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogQHJldHVybiBBIGNyZWF0ZWQgYnV0dG9uIGVsZW1lbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJvdyggcHJldjogYm9vbGVhbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xcclxcbiAgICBjb25zdCBhcnJvdyA9IGA8YicKICAgICAgICAgICAgICAgICAgICAgICAgYid1dHRvbiBjbGFzcz1cXCIkeyBjbGFzc2VzLmFycm93IH0gJHsgcHJldiA/IGNsYXNzZXMucCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXYgOiBjbGFzc2VzLm5leHQgfVxcIiB0eXBlPVxcImJ1dHRvblxcIj5gXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICtcXHRgPHN2ZyB4bWxucz1cXCIkeyBYTUxfTkFNRV9TUEFDRSB9XFwiIHZpZXdCb3gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIjAgMCAkeyBTSVpFIH0gJHsgU0laRSB9XFwiIHdpZHRoPVxcIiR7IFNJWkUgfVxcIicKICAgICAgICAgICAgICAgICAgICAgICAgYicgaGVpZ2h0PVxcIiR7IFNJWkUgfVxcIiBmb2N1c2FibGU9XFwiZmFsc2VcXCI+YFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICArIGA8cGF0aCBkPVxcIiR7IG9wdGlvbnMuYXJyb3dQYXRoIHx8IFBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RIIH1cXCIgLz5gO1xcclxcblxcclxcbiAgICByZXR1cm4gcGFyc2VIdG1sPEhUTUxCdXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uRWxlbWVudD4oIGFycm93ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBVcGRhdGVzIHN0YXR1cyBvZiBhcnJvd3MsIHN1Y2ggYXMgYGRpc2FibGVkYCBhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkIGBhcmlhLWxhYmVsYC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdXBkYXRlKCk6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2b2lkIHtcXHJcXG4gICAgaWYgKCBwcmV2ICYmIG5leHQgKSB7XFxyXFxuICAgICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGluZGV4ICAgICA9IFNwbGlkZS5pbmRleDtcXHJcXG4gICAgICBjb25zdCBwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndkluZGV4ID0gQ29udHJvbGxlci5nZXRQcmV2KCk7XFxyXFxuICAgICAgY29uc3QgbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHRJbmRleCA9IENvbnRyb2xsZXIuZ2V0TmV4dCgpO1xcclxcbiAgICAgIGNvbnN0IHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2TGFiZWwgPSBwcmV2SW5kZXggPiAtMSAmJiBpbmRleCA8IHByZXZJbmRleCA/IGkxOCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLmxhc3QgOiBpMThuLnByZXY7XFxyXFxuICAgICAgY29uc3QgbmV4dExhYmVsID0gbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHRJbmRleCA+IC0xICYmIGluZGV4ID4gbmV4dEluZGV4ID8gaTE4bi5maXJzdCA6IGkxJwogICAgICAgICAgICAgICAgICAgICAgICBiJzhuLm5leHQ7XFxyXFxuXFxyXFxuICAgICAgcHJldi5kaXNhYmxlZCA9IHByZXZJbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPCAwO1xcclxcbiAgICAgIG5leHQuZGlzYWJsZWQgPSBuZXh0SW5kZXggPCAwO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIHByZXYsIEFSSUFfTEFCRUwsIHByZXZMYScKICAgICAgICAgICAgICAgICAgICAgICAgYidiZWwgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIG5leHQsIEFSSUFfTEFCRUwsICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXh0TGFiZWwgKTtcXHJcXG5cXHJcXG4gICAgICBlbWl0KCBFVkVOVF9BUlJPV1NfVVBEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FURUQsIHByZXYsIG5leHQsIHByZXZJbmRleCwgbmV4dEluZGV4ICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBhcnJvd3MsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBtb3VudCxcXHJcXG4gICAgZGVzdHJveSxcXHJcXG4gICAgdXBkYXRlLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH07XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFRoZSBuYW1lc3BhY2UgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvciBTVkcgZWxlbWVudHMuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFhNTF9OQU1FJwogICAgICAgICAgICAgICAgICAgICAgICBiIl9TUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFRoZSBhcnJvdyBwYXRoLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgUEFUSCA9ICdtMTUuNSAwLjkzMi00LjMgNC4zOCAxNC41IDE0LjYtMTQuNSAxNC41ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiI0LjMgNC40IDE0LjYtMTQuNiA0LjQtNC4zLTQuNC00LjQtMTQuNi0xNC42eic7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFNWRyB3aWR0aCBhbmQgaGVpZ2h0LlxcclxcbiAqLycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5leHBvcnQgY29uc3QgU0laRSA9IDQwO1xcclxcbiIsImltcG9ydCB7IEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiIkNPTlRST0xTLCBBUklBX0xBQkVMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2F0dHJpYnUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidGVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU19BQ1RJVkUgfSBmcm9tICcuLi8uLi9jb24iCiAgICAgICAgICAgICAgICAgICAgICAgIGIic3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBFVkVOVF9BVVRPUExBWSIKICAgICAgICAgICAgICAgICAgICAgICAgYidfUEFVU0UsXFxyXFxuICBFVkVOVF9BVVRPUExBWV9QTEFZLFxcclxcbiAgRVZFTlRfQVVUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09QTEFZX1BMQVlJTkcsXFxyXFxuICBFVkVOVF9NT1ZFLFxcclxcbiAgRVZFTlRfUkVGUkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiU0gsXFxyXFxuICBFVkVOVF9TQ1JPTEwsXFxyXFxufSBmcm9tICcuLi8uLi9jb25zdGFudCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UsIFJlcXVlc3RJbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0ZXJ2YWwgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBnZXRBdHRyaWJ1dGUsIHNldEF0dHJpYnV0IgogICAgICAgICAgICAgICAgICAgICAgICBiImUsIHN0eWxlLCB0b2dnbGVDbGFzcyB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgSU5URVJWQUxfREFUQV9BVFRSSUJVVEUgfSBmcm9tICcuL2NvbnN0YW50cyciCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgQXV0b3BsYXkgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgQXV0b3BsYXlDb21wb25lbnQgZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuICBwbGF5KCk6IHZvaWQ7XFxyXFxuICBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F1c2UoKTogdm9pZDtcXHJcXG4gIGlzUGF1c2VkKCk6IGJvb2xlYW47XFxyXFxufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50IGZvciBhdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGhhbmRsaW5nIGEgcHJvZ3Jlc3MgYmFyIGFuZCBhIHRvZ2dsZSBidXR0b24uXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3V0b3BsYXkgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIEF1dG9wbGF5KCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIG9wdGlvbnM6IE9wdGlvbnMgKTogQXV0b3BsYXlDb21wb25lbnQge1xcclxcbiAgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IHsgb24sIGJpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjb25zdCBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbCggb3B0aW9ucy5pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYiJ2YWwsIFNwbGlkZS5nby5iaW5kKCBTcGxpZGUsICc+JyApLCBvbkFuaW1hdGlvbkZyYW1lIgogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgY29uc3QgeyBpc1BhdXNlZCB9ID0gaW50ZXJ2YWw7XFxyXFxuICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgeyBFbGVtZW50cywgRWxlbWVudHM6IHsgcm9vdCwgdG9nZ2xlIH0gfSA9IENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzO1xcclxcbiAgY29uc3QgeyBhdXRvcGxheSB9ID0gb3B0aW9ucztcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzbGlkZXIgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGhvdmVyZWQgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBsZXQgaG92ZXJlZDogYm9vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbmUgb2Ygc2xpZGVyIGVsZW1lbnRzIGhhcyBmb2N1cyBvciBub3QuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBsZXQgZm9jdXNlZDogYm9vbGVhbjtcXHJcXG5cXHJcXG4gIC8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBhdXRvcGxheSBpcyBzdG9wcGVkIG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJub3QuXFxyXFxuICAgKiBJZiBzdG9wcGVkLCBhdXRvcGxheSB3b24ndCBzdGFydCBhdSIKICAgICAgICAgICAgICAgICAgICAgICAgYid0b21hdGljYWxseSB1bmxlc3MgYHBsYXkoKWAgaXMgZXhwbGljaXRseSBjYWxsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLlxcclxcbiAgICovXFxyXFxuICBsZXQgc3RvcHBlZCA9IGF1dG9wbGF5ID09PSAncGF1cyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJlJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbSIKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBpZiAoIGF1dG9wbGF5ICkge1xcclxcbiAgICAgIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4oKTtcXHJcXG4gICAgICB0b2dnbGUgJiYgc2V0QXR0cmlidXRlKCB0b2dnbGUsIEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUklBX0NPTlRST0xTLCBFbGVtZW50cy50cmFjay5pZCApO1xcclxcbiAgICAgIHN0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGVkIHx8IHBsYXkoKTtcXHJcXG4gICAgICB1cGRhdGUoKTtcXHJcXG4gICAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTGlzdGVucyB0byBzb21lIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGxpc3RlbigpOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGlmICggb3B0aW9ucy5wYXVzZU9uSG92ZXIgKSB7XFxyXFxuICAgICAgYmluJwogICAgICAgICAgICAgICAgICAgICAgICBiImQoIHJvb3QsICdtb3VzZWVudGVyIG1vdXNlbGVhdmUnLCBlID0+IHtcXHJcXG4gICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICBob3ZlcmVkID0gZS50eXBlID09PSAnbW91c2VlbnRlcic7XFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgYXV0b1RvZ2dsZSgpO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgaWYgKCBvcHRpb25zLnBhdXNlT25Gb2N1cyApIHtcXHJcXG4gICAgICBiaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZCggcm9vdCwgJ2ZvY3VzaW4gZm9jdXNvdXQnLCBlID0+IHtcXHJcXG4gICAgICAgIGYiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib2N1c2VkID0gZS50eXBlID09PSAnZm9jdXNpbic7XFxyXFxuICAgICAgICBhdXRvVG8iCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dsZSgpO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYiIgKCB0b2dnbGUgKSB7XFxyXFxuICAgICAgYmluZCggdG9nZ2xlLCAnY2xpY2snLCAoKSIKICAgICAgICAgICAgICAgICAgICAgICAgYicgPT4ge1xcclxcbiAgICAgICAgc3RvcHBlZCA/IHBsYXkoKSA6IHBhdXNlKCB0cnVlICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICAgIH0gKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBvbiggWyBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfTU9WRSwgRVZFTlRfU0NST0xMLCBFVkVOVF9SRUZSRVNIIF0sIGludGVydmFsLnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXdpbmQgKTtcXHJcXG4gICAgb24oIEVWRU5UX01PVkUsIG9uTW92ZSApO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RhcnRzIGF1dG9wbGF5IGFuZCBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlYXJzIGFsbCBmbGFncy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcGxheSgpOiB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pZCB7XFxyXFxuICAgIGlmICggaXNQYXVzZWQoKSAmJiBDb21wb25lbnRzLlNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuaXNFbm91Z2goKSApIHtcXHJcXG4gICAgICBpbnRlcnZhbC5zdGFydCggISBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5yZXNldFByb2dyZXNzICk7XFxyXFxuICAgICAgZm9jdXNlZCA9IGhvdmVyZWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gc3RvcHBlZCA9IGZhbHNlO1xcclxcbiAgICAgIHVwZGF0ZSgpO1xcclxcbiAgICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBFVkVOVF9BVVRPUExBWV9QTEFZICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFBhdXNlcyBhdXRvcGxheS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIHN0b3AgLSBJZiBgdHJ1ZWAsIGF1dG9wbGF5IGtlZXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBwYXVzZWQgdW50aWwgYHBsYXkoKWAgaXMgZXhwbGljaXRseSBjYWxsZWQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBwYXVzZSggc3RvcCA9IHRydWUgKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBzdG9wcGVkID0gISEgc3RvcDtcXHJcXG4gICAgdXBkYXRlKCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoICEgaXNQYXVzZWQoKSApIHtcXHJcXG4gICAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJ2YWwucGF1c2UoKTtcXHJcXG4gICAgICBlbWl0KCBFVkVOVF9BVVRPUExBWV9QJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FVU0UgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogVG9nZ2xlcyBwbGF5L3BhdXNlIGFjY29yZGluZyB0byBjdXJyZW50IGZsYWdzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIElmIGF1dG9wbGF5IGlzIG1hbnVhbGx5IHBhdXNlZCwgdGhpcyB3aWxsIGRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBub3RoaW5nLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBhdXRvVG9nZ2xlKCk6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkIHtcXHJcXG4gICAgaWYgKCAhIHN0b3BwZWQgKSB7XFxyXFxuICAgICAgaG92ZXJlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgZm9jdXNlZCA/IHBhdXNlKCBmYWxzZSApIDogcGxheSgpO1xcclxcbiAgICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBVcGRhdGVzIHRoZSB0b2dnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlIGJ1dHRvbiBzdGF0dXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZCB7XFxyXFxuICAgIGlmICggdG9nZ2xlICkge1xcclxcbiAgICAgIHRvZ2dsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzcyggdG9nZ2xlLCBDTEFTU19BQ1RJVkUsICEgc3RvcHBlZCApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXRBdHRyaWJ1dGUoIHRvZ2dsZSwgQVJJQV9MQUJFTCwgb3B0aW9ucy5pMThuWyBzJwogICAgICAgICAgICAgICAgICAgICAgICBiInRvcHBlZCA/ICdwbGF5JyA6ICdwYXVzZScgXSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgb24gZXZlcnkgYW5pbWF0aW9uIGZyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtZSB3aGlsZSBhdXRvcGxheSBpcyBhY3RpdmUuXFxyXFxuICAgKlxcclxcbiAgICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSByYXRlIC0gVGhlIHByb2dyZXNzIHJhdGUgYmV0d2VlbiAwIGFuZCAxLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSggcmF0ZTogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBiYXIgfSA9IEVsZW1lbnRzO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgYmFyICYmIHN0eWxlKCBiYXIsICd3aWR0aCcsIGAkeyByYXRlICogMTAwIH0lIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2AgKTtcXHJcXG4gICAgZW1pdCggRVZFTlRfQVVUT1BMQVlfUExBWUlORywgcmF0ZSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVXBkYXRlcyBvciByZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9yZXMgdGhlIGludGVydmFsIGR1cmF0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gaW5kZXggLSBBbiBpbmRleCB0byBtb3ZlIHRvLlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gb25Nb3ZlKCBpbmRleDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uc3QgU2xpZGUgPSBDb21wb25lbnRzLlNsaWRlcy5nZXRBdCggaW5kZXggKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGludGVydmFsLnNldCggU2xpZGUgJiYgK2dldEF0dHJpYnV0ZSggU2xpZGUuc2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLCBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSApIHx8IG9wdGlvbnMuaW50ZXJ2YWwgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGRlc3Ryb3k6IGludGVydmFsLmNhbmNlbCxcXHJcXG4gICAgcGxheSxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIHBhdXNlLFxcclxcbiAgICBpc1BhdXNlZCxcXHJcXG4gIH07XFxyXFxufVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4iLCJpbXBvcnQgeyBFVkVOVF9MQVpZTE9BRF9MT0FERUQsIEVWRU5UX01PVU5URUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJFVkVOVF9SRUZSRVNILCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9ldmVudHMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVuIgogICAgICAgICAgICAgICAgICAgICAgICBiInQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IGFwcGx5LCBjaGlsZCwgZGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuaW1wb3J0IHsgU2xpZGVDb21wb25lbnQgfSBmcm9tICcuLi9TbGlkZXMvU2wiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciIKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIENvdmVyIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIENvdmVyQ29tcG9uZW50IGV4dGVuZHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEJhc2VDb21wb25lbnQge1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudCBmb3Igc2V0dGluZyB0aGUgaW1hZ2UgYXMgdGhlIHNsaWRlIGJhY2tncm91JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBDb3ZlciBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gQ292ZXIoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9uczogT3B0aW9ucyApOiBDb3ZlckNvbXBvbmVudCB7XFxyXFxuICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneyBvbiB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcblxcclxcbiAgLyoqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuY292ZXIgKSB7XFxyXFxuICAgICAgb24oIEVWRU5UX0xBWllMT0FEX0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0FERUQsIGFwcGx5KCB0b2dnbGUsIHRydWUgKSApO1xcclxcbiAgICAgIG9uKCBbIEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIIF0sIGFwcGx5KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY292ZXIsIHRydWUgKSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBTZXRzL3JlbW92ZXMgdGhlIGJhY2tncm91bmQgaW1hZ2UgdG8vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Zyb20gYWxsIHNsaWRlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY292ZXIgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSWYgYGZhbHNlYCwgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBpbWFnZS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIGNvdmVyKCBjb3ZlcjogYm9vbGVhbiApOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIENvbXBvbmVudHMuU2xpZGVzLmZvckVhY2goIFNsaWRlID0+IHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgY29uc3QgaW1nID0gY2hpbGQ8SFRNTEltYWdlRWxlbWVudD4oIFNsaWRlLmNvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm50YWluZXIgfHwgU2xpZGUuc2xpZGUsICdpbWcnICk7XFxyXFxuXFxyXFxuICAgICAgaWYiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICggaW1nICYmIGltZy5zcmMgKSB7XFxyXFxuICAgICAgICB0b2dnbGUoIGNvdmVyLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW1nLCBTbGlkZSApO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU2V0cy9yZW1vdmVzIHRoZSBiYWNrZ3JvdW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpbWFnZSB0by9mcm9tIHRoZSBwYXJlbnQgZWxlbWVudC5cXHJcXG4gICAqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGNvdmVyIC0gSWYgYGZhbHNlYCwgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW1hZ2UuXFxyXFxuICAgKiBAcGFyYW0gaW1nICAgLSBBIHRhcmdldCBpbWFnZSBlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudC5cXHJcXG4gICAqIEBwYXJhbSBTbGlkZSAtIEEgU2xpZGVDb21wb25lbnQgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCB3aGVyZSB0aGUgaW1hZ2UgYmVsb25ncy5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHRvZ2dsZSggY292ZXI6IGJvb2xlYW4sIGltZzogSFRNTEltYWdlRWxlbWVudCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlOiBTbGlkZUNvbXBvbmVudCApOiB2b2lkIHtcXHJcXG4gICAgU2xpZGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIieWxlKCAnYmFja2dyb3VuZCcsIGNvdmVyID8gYGNlbnRlci9jb3ZlciBuby1yZXBlYXQgdSIKICAgICAgICAgICAgICAgICAgICAgICAgYidybChcXCIkeyBpbWcuc3JjIH1cXCIpYCA6IFwnXCcsIHRydWUgKTtcXHJcXG4gICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJpc3BsYXkoIGltZywgY292ZXIgPyAnbm9uZScgOiAnJyApO1xcclxcbiAgfVxcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICBkZXN0cm95OiBhcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGNvdmVyLCBmYWxzZSApLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7IEVWRU5UX01PVkUsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1NDUk9MTCwgRVZFTlRfU0NSJwogICAgICAgICAgICAgICAgICAgICAgICBiIk9MTEVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IElETEUsIFNDUk9MTElORyB9IGZyb20gJy4uLy4uL2NvbnMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBTTElERSB9IGZyb20gJy4uLy4uL2MiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXJmYWNlLCBSZXEiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidWVzdEludGVydmFsLCBSZXF1ZXN0SW50ZXJ2YWxJbnRlcmZhY2UgfSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBBbnlGdW5jdGlvbiwgQiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlIgogICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcbmltcG9ydCB7IGFicywgYXBwbHksIGFwcHJveGltYXRlbHlFcXVhbCwgIgogICAgICAgICAgICAgICAgICAgICAgICBiImZsb29yLCBtYXgsIHNpZ24gfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IgogICAgICAgICAgICAgICAgICAgICAgICBiJyB7IEJBU0VfVkVMT0NJVFksIEJPVU5DRV9ESUZGX1RIUkVTSE9MRCwgQk9VTkNFX0RVUkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiVElPTiwgRlJJQ1RJT05fRkFDVE9SLCBNSU5fRFVSQVRJT04gfSBmcm9tICcuL2NvbnN0YSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJudHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIgogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgU2Nyb2xsIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIFNjcm9sbENvbXBvbmVudCBleHRlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIHNjcm9sbCggcG9zaXRpb246IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgY2FsbGJhY2s/OiBBbnlGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gKTogdm9pZDtcXHJcXG4gIGNhbmNlbCgpOiB2b2lkO1xcclxcbn1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3Igc2Nyb2xsaW5nIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVyLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gQSBTY3JvbGwgY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIFNjcm9sbCggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IFNjcm9sbENvbXBvbmVudCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgeyBvbiwgZW1pdCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGNvbnN0IHsgc3RhdGU6IHsgc2V0IH0gfSA9IFNwbGlkZTtcXHJcXG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCB7IE1vdmUgfSA9IENvbXBvbmVudHM7XFxyXFxuICBjb25zdCB7IGdldFBvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiwgZ2V0TGltaXQsIGV4Y2VlZGVkTGltaXQsIHRyYW5zbGF0ZSB9ID0gTW92ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBjb25zdCBpc1NsaWRlID0gU3BsaWRlLmlzKCBTTElERSApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0YWlucyB0aGUgYWN0aXZlIFJlcXVlc3RJbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ2YWwgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBsZXQgaW50ZXJ2YWw6IFJlcXVlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJ2YWxJbnRlcmZhY2U7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2s6IEFueUZ1bmN0aW9uO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1cnJlbnQgZnJpY3Rpb24gKDw9IDEpLlxcclxcbiAgICovXFxyXFxuICBsZXQgZnJpY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uID0gMTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjb21wb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50KCk6IHZvaWQge1xcclxcbiAgICBvbiggRVZFTlRfTU9WRSwgY2xlYXIgKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIG9uKCBbIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0ggXSwgY2FuY2VsICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTY3JvbGxzIHRoZSBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVyIHRvIHRoZSBwcm92aWRlZCBkZXN0aW5hdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGRlc3RpbmF0aW9uIC0gVGhlIGRlc3RpbmF0aW9uIHRvIHNjcm9sbCB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlciB0by5cXHJcXG4gICAqIEBwYXJhbSBkdXJhdGlvbiAgICAtIE9wdGlvbmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbC4gVGhlIHNjcm9sbCBkdXJhdGlvbi4gSWYgb21pdHRlZCwgY2FsY3VsYXRlcyBpdCBieScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIGRpc3RhbmNlLlxcclxcbiAgICogQHBhcmFtIHNuYXAgICAgICAgIC0gT3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmFsLiBXaGV0aGVyIHRvIHNuYXAgdGhlIHNsaWRlciB0byB0aGUgY2xvc2VzdCBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugb3Igbm90LlxcclxcbiAgICogQHBhcmFtIG9uU2Nyb2xsZWQgIC0gT3B0aW9uYWwuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBBIGNhbGxiYWNrIGludm9rZWQgYWZ0ZXIgc2Nyb2xsIGVuZHMuXFxyXFxuICAgKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIG5vQ29uc3RyYWluIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8gc3VwcHJlc3MgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0cmFpbnQgcHJvY2VzcyB3aGVuIHRoZSBzbGlkZXIgZXhjZWVkcyBib3VuZHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzY3JvbGwoXFxyXFxuICAgIGRlc3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbjogbnVtYmVyLFxcclxcbiAgICBkdXJhdGlvbj86IG51bWJlcixcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNuYXA/OiBib29sZWFuLFxcclxcbiAgICBvblNjcm9sbGVkPzogQW55RnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICBub0NvbnN0cmFpbj86IGJvb2xlYW5cXHJcXG4gICk6IHZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgY29uc3QgZnJvbSA9IGdldFBvc2l0aW9uKCk7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjbGVhcigpO1xcclxcblxcclxcbiAgICBpZiAoIHNuYXAgJiYgKCAhIGlzU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8ICEgZXhjZWVkZWRMaW1pdCgpICkgKSB7XFxyXFxuICAgICAgY29uc3Qgc2l6ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICA9IENvbXBvbmVudHMuTGF5b3V0LnNsaWRlclNpemUoKTtcXHJcXG4gICAgICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Qgb2Zmc2V0ID0gc2lnbiggZGVzdGluYXRpb24gKSAqIHNpemUgKiBmbG9vciggYWJzKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdGluYXRpb24gKSAvIHNpemUgKSB8fCAwO1xcclxcbiAgICAgIGRlc3RpbmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiA9IE1vdmUudG9Qb3NpdGlvbiggQ29tcG9uZW50cy5Db250cm9sbGVyLnRvRGVzdCggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3RpbmF0aW9uICUgc2l6ZSApICkgKyBvZmZzZXQ7XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIGNvbnN0IG5vRGlzdGFuY2UgPSBhcHByb3hpbWF0ZWx5RXF1YWwoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmcm9tLCBkZXN0aW5hdGlvbiwgMSApO1xcclxcblxcclxcbiAgICBmcmljdGlvbiA9IDE7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBkdXJhdGlvbiA9IG5vRGlzdGFuY2UgPyAwIDogZHVyYXRpb24gfHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21heCggYWJzKCBkZXN0aW5hdGlvbiAtIGZyb20gKSAvIEJBU0VfVkVMT0NJVFksIE1JTl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRFVSQVRJT04gKTtcXHJcXG4gICAgY2FsbGJhY2sgPSBvblNjcm9sbGVkO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoIGR1cmF0aW9uLCBvbkVuZCwgYXBwbHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB1cGRhdGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cmFpbiApLCAxICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBzZXQoIFNDUk9MTElORyApO1xcclxcbiAgICBlbWl0KCBFVkVOVF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0NST0xMICk7XFxyXFxuICAgIGludGVydmFsLnN0YXJ0KCk7XFxyXFxuICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiBzY3JvbGwgZW5kcyBvciBoYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGJlZW4ganVzdCBjYW5jZWxlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kKCk6IHZvaWQge1xcclxcbiAgICBzZXQoIElETEUgKTtcXHJcXG4gICAgY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInICYmIGNhbGxiYWNrKCk7XFxyXFxuICAgIGVtaXQoIEVWRU5UX1NDUk9MTEVEICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbmV2ZXIgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBpbnRlcnZhbCB0aW1lciBpcyB1cGRhdGVkLlxcclxcbiAgICpcXHJcXG4gICAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gZnJvbSAgICAgICAgLSBBIHBvc2l0aW9uIHdoZXJlIHNjcm9sbCBzdGFydHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHBhcmFtIHRvICAgICAgICAgIC0gQSBkZXN0aW5hdGlvbiB3aGVyZSB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlciBnb2VzLlxcclxcbiAgICogQHBhcmFtIG5vQ29uc3RyYWluIC0gV2hldGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdG8gc3VwcHJlc3MgY29uc3RyYWludCBwcm9jZXNzIHdoZW4gdGhlIHNsaWRlciBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkcyBib3VuZHMuXFxyXFxuICAgKiBAcGFyYW0gcmF0ZSAgICAgICAgLSBBIGN1cnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IHJhdGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSggZnJvbTogbicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciwgdG86IG51bWJlciwgbm9Db25zdHJhaW46IGJvb2xlYW4gfCB1bmRlZmluZWQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByYXRlOiBudW1iZXIgKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IHBvc2l0aW9uID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldFBvc2l0aW9uKCk7XFxyXFxuICAgIGNvbnN0IHRhcmdldCAgID0gZnJvbSArICggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIC0gZnJvbSApICogZWFzaW5nKCByYXRlICk7XFxyXFxuICAgIGNvbnN0IGRpZmYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA9ICggdGFyZ2V0IC0gcG9zaXRpb24gKSAqIGZyaWN0aW9uO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdHJhbnNsYXRlKCBwb3NpdGlvbiArIGRpZmYgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaXNTbGlkZSAmJiAhIG5vQ29uc3RyYWluICYmIGV4Y2VlZGVkTGltaXQoKSApIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgZnJpY3Rpb24gKj0gRlJJQ1RJT05fRkFDVE9SO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICBpZiAoIGFicyggZGlmZiApIDwgQk9VTkNFX0RJRkZfVEhSRVNIT0xEICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgIHNjcm9sbCggZ2V0TGltaXQoIGV4Y2VlZGVkTGltaXQoIHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlICkgKSwgQk9VTkNFX0RVUkFUSU9OLCBmYWxzZSwgY2FsbGJhY2ssIHRydWUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBDbGVhcnMgdGhlIGFjdGl2ZSBpbnRlcnZhbC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIGZ1bmN0aW9uIGNsZWFyKCk6IHZvaWQge1xcclxcbiAgICBpZiAoIGludGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnZhbCApIHtcXHJcXG4gICAgICBpbnRlcnZhbC5jYW5jZWwoKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FuY2VscyB0aGUgYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGl2ZSBpbnRlcnZhbCBhbmQgZW1pdHMgdGhlIGBzY3JvbGxlZGAgZXZlbnQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBjYW5jZWwoKTogdm9pZCB7XFxyXFxuICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoIGludGVydmFsICYmICEgaW50ZXJ2YWwuaXNQYXVzZWQoKSApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xlYXIoKTtcXHJcXG4gICAgICBvbkVuZCgpO1xcclxcbiAgICB9XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgZWFzaW5nIGZ1bmN0aW9uLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqXFxyXFxuICAgKiBAcGFyYW0gdCAtIEEgdmFsdWUgdG8gZWFzZS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHJldHVybiBBbiBlYXNlZCB2YWx1ZS5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIGVhc2luZyggdDogbnVtYmVyICk6IG51bWJlciB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCB7IGVhc2luZ0Z1bmMgfSA9IG9wdGlvbnM7XFxyXFxuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWFzaW5nRnVuYyA/IGVhc2luZ0Z1bmMoIHQgKSA6IDEgLSBNYXRoLnBvdyggMSAtIHQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYic0ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGRlc3Ryb3k6IGNsZWFyLFxcclxcbiAgICBzY3JvbGwsXFxyXFxuICAgIGNhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjZWwsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBUcmlnZ2VycyB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGJvdW5jZSBlZmZlY3Qgd2hlbiB0aGUgZGlmZiBiZWNvbWVzIGxlc3MgdGhhbiB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyB2YWx1ZS5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgY29uc3QgQk9VTkNFX0RJRkZfVEhSRVNIT0xEID0gMTA7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgYm91bmNlIGVmZmVjdC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEJPVU5DRV9EVVJBVElPTiA9IDYwMDtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZyaWN0aW9uIGZhY3Rvci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBUaGUgdmVsb2NpdHkgdG8gY2FsY3VsYXRlIHRoZSBzY3JvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsIGR1cmF0aW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBjb25zdCBCQVNFX1ZFTE9DSVRZID0gMS41O1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBUaGUgbWluaW11bSBkdXJhdGlvbiBvZiBzY3JvbGwuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSU5fRFVSQVRJT04gPSA4MDA7XFxyXFxuIiwiaW1wb3J0IHsgQ0xBU1NfQVJST1csIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiTEFTU19QQUdJTkFUSU9OX1BBR0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3NlcyIKICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcbmltcG9ydCB7IEVWRU5UX0RSQUcsIEVWRU5UX0RSQUdHRUQsIEVWRU5UXyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJEUkFHR0lORywgRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uLy4uIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBTQ1JPTExfTElTVEVORVJfIgogICAgICAgICAgICAgICAgICAgICAgICBiIk9QVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbGlzdGVuZXItb3B0aW9ucyc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmltcG9ydCB7IERSQUdHSU5HLCBJRExFLCBNT1ZJTkcsIFNDUk9MTElORyB9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBGQURFLCBMT09QIgogICAgICAgICAgICAgICAgICAgICAgICBiIiwgU0xJREUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSciCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFicywgaXNPYmplY3QiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLCBtYXRjaGVzLCBtaW4sIG5vb3AsIHByZXZlbnQsIHNpZ24sIHRpbWVPZiB9IGZyb20gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRlJJQ1RJT04sIExPR19JTlRFUlZBTCIKICAgICAgICAgICAgICAgICAgICAgICAgYicsIFBPSU5URVJfRE9XTl9FVkVOVFMsIFBPSU5URVJfTU9WRV9FVkVOVFMsIFBPSU5URVJfJwogICAgICAgICAgICAgICAgICAgICAgICBiIlVQX0VWRU5UUyB9IGZyb20gJy4vY29uc3RhbnRzJztcXHJcXG5cXHJcXG5cXHJcXG4vIgogICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIERyYWcgY29tcG9uZW50LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlIERyYWdDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBkaXNhYmxlKCBkaXNhYmxlZDogYm9vbGVhbiApOiB2b2lkO1xcclxcbiAgaXNEcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dpbmcoKTogYm9vbGVhbjtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb21wb25lbnQgZm9yIGRyYWdnaW5nIHRoZSBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIERyYWcgY29tcG9uZW50IG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIERyYWcoIFNwbGlkZTogU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBEcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uLCBlbWl0LCBiaW5kLCB1bmJpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH0gPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCB7IHN0YXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyBNb3ZlLCBTY3JvbGwsIENvbnRyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyLCBFbGVtZW50czogeyB0cmFjayB9LCBNZWRpYTogeyByZWR1Y2UgfSB9ID0gQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHM7XFxyXFxuICBjb25zdCB7IHJlc29sdmUsIG9yaWVudCB9ID0gQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMuRGlyZWN0aW9uO1xcclxcbiAgY29uc3QgeyBnZXRQb3NpdGlvbiwgZXhjZWVkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidkTGltaXQgfSA9IE1vdmU7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBiYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZSBzbGlkZXIgcG9zaXRpb24gdG8gY2FsY3VsYXRlIHRoZSBkZWx0YSBvZiBjb29yZHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBsZXQgYmFzZVBvc2l0aW9uOiBudW1iZXI7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgYmFzZSBldmVudCBvYmplY3Qgc2F2ZWQgcGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBzcGVjaWZpYyBzYW1wbGluZyBpbnRlcnZhbC5cXHJcXG4gICAqL1xcclxcbiAgbGV0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidiYXNlRXZlbnQ6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50O1xcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogSG9sZHMgdGhlIHByZXZpb3VzIGJhc2UgZXZlbnQgb2JqZWN0LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgbGV0IHByZXZCYXNlRXZlbnQ6IFRvdWNoRXZlbnQgfCBNb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VFdmVudDtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGVyIHRoZSBkcmFnIG1vZGUgaXMgYGZyZWVgIG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxldCBpc0ZyZWU6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRpY2F0ZXMgd2hldGhlciB0aGUgdXNlciBpcyBkcmFnZ2luZyB0aGUgc2xpZGVyIG9yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBkcmFnZ2luZzogYm9vbGVhbjtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBzbGlkZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4Y2VlZHMgbGltaXRzIG9yIG5vdC5cXHJcXG4gICAqIFRoaXMgbXVzdCBub3QgYmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGB1bmRlZmluZWRgIGZvciBzdHJpY3QgY29tcGFyaXNvbi5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGxldCBleGNlZWRlZCA9IGZhbHNlO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgVHVybnMgaW50byBgdHJ1ZWAgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmcgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGlkZXIuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjbGlja1ByZXZlbnRlZDogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgZHJhZyBjb21wb25lbnQgaXMgbm93IGRpc2FibGVkIG9yIG5vdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGxldCBkaXNhYmxlZDogYm9vbGVhbjtcXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFRoZSB0YXJnZXQgZWxlbWVudCB0byBhdHRhY2ggbGlzdGVuZXJzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgbGV0IHRhcmdldDogV2luZG93IHwgSFRNTEVsZW1lbnQ7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIGJpbmQoIHRyYWNrLCBQT0lOVEVSX01PVkVfRVZFTlRTLCBub29wLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgU0NST0xMX0xJU1RFTkVSX09QVElPTlMgKTtcXHJcXG4gICAgYmluZCggdHJhY2ssICcKICAgICAgICAgICAgICAgICAgICAgICAgYidQT0lOVEVSX1VQX0VWRU5UUywgbm9vcCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGJpbmQoIHRyYWNrLCBQT0lOVEVSX0RPV05fRVZFTlRTLCBvblBvaW50ZXJEbycKICAgICAgICAgICAgICAgICAgICAgICAgYid3biwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMgKTtcXHJcXG4gICAgYmluZCggdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgYiJrLCAnY2xpY2snLCBvbkNsaWNrLCB7IGNhcHR1cmU6IHRydWUgfSApO1xcclxcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgYmluZCggdHJhY2ssICdkcmFnc3RhcnQnLCBwcmV2ZW50ICk7XFxyXFxuICAgIG9uKCIKICAgICAgICAgICAgICAgICAgICAgICAgYicgWyBFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEIF0sIGluaXQgKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgY29uc3QgeyBkcmFnIH0gPSBvcHRpb25zO1xcclxcbiAgICBkaXNhYmxlKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgISBkcmFnICk7XFxyXFxuICAgIGlzRnJlZSA9IGRyYWcgPT09ICdmcmVlJztcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjbGlja3Mgb3IgdG91Y2hlcyB0aGUgc2xpZGVyLlxcclxcbiAgICogLSBOZWVkcyB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ28gcHJldmVudCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiB0aGUgc2xpZGVyIGlzIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXN5IHRvIGRlbnkgYW55IGFjdGlvbiwgc3VjaCBhcyBkcmFnZ2luZyBpbWFnZXNcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiAtIElFIGRvZXMgbm90IHN1cHBvcnQgTW91c2VFdmVudCBhbmQgVG91Y2hFdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgY29uc3RydWN0b3JzXFxyXFxuICAgKiAtIFRoZSBgZHJhZ2dpbmdgIHN0YXRlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHdheXMgYmVjb21lcyBgdHJ1ZWAgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3doaWxlIHRoZSBzbGlkZXIgaXMgbW92aW5nXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKCBlOiBUb3VjaEV2ZW50IHwgTW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgIGNsaWNrUHJldmVudGVkID0gZmFsc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgICBpZiAoICEgZGlzYWJsZWQgKSB7XFxyXFxuICAgICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQoIGUgKTtcXHJcXG5cXHJcXG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKCBpc0RyYWdnYWJsZSggZS50YXJnZXQgKSAmJiAoIGlzVG91Y2ggfHwgISBlLmJ1dHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKSApIHtcXHJcXG4gICAgICAgIGlmICggISBDb250cm9sbGVyLmlzQnVzeSgpICkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICAgICAgdGFyZ2V0ICAgICAgICA9IGlzVG91Y2ggPyB0cmFjayA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB3aW5kb3c7XFxyXFxuICAgICAgICAgIGRyYWdnaW5nICAgICAgPSBzdGF0ZS5pcyggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1sgTU9WSU5HLCBTQ1JPTExJTkcgXSApO1xcclxcbiAgICAgICAgICBwcmV2QmFzZUV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCA9IG51bGw7XFxyXFxuXFxyXFxuICAgICAgICAgIGJpbmQoIHRhcmdldCwgUE9JTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vdmUsIFNDUk9MTF9MSVNURU5FUl9PUFRJTycKICAgICAgICAgICAgICAgICAgICAgICAgYidOUyApO1xcclxcbiAgICAgICAgICBiaW5kKCB0YXJnZXQsIFBPSU5URVJfVVBfRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUUywgb25Qb2ludGVyVXAsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICBNb3ZlLmNhbmNlbCgpO1xcclxcbiAgICAgICAgICBTY3JvbGwuY2FuYycKICAgICAgICAgICAgICAgICAgICAgICAgYidlbCgpO1xcclxcbiAgICAgICAgICBzYXZlKCBlICk7XFxyXFxuICAgICAgICB9IGVsc2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICAgICAgcHJldmVudCggZSwgdHJ1ZSApO1xcclxcbiAgICAgICAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIENhbGxlZCB3aGlsZSB0aGUgdXNlciBtb3ZlcyB0aGUgcG9pbnRlciBvbiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgVG91Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgb3IgTW91c2VFdmVudCBvYmplY3RcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduUG9pbnRlck1vdmUoIGU6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6IHZvaWQge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgaWYgKCAhIHN0YXRlLmlzKCBEUkFHR0lORyApICkge1xcclxcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0ZS5zZXQoIERSQUdHSU5HICk7XFxyXFxuICAgICAgZW1pdCggRVZFTlRfRFJBRyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBpZiAoIGUuY2FuY2VsYWJsZSApIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgaWYgKCBkcmFnZ2luZyApIHtcXHJcXG4gICAgICAgIE1vdmUudHJhbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGF0ZSggYmFzZVBvc2l0aW9uICsgY29uc3RyYWluKCBkaWZmQ29vcmQoIGUgKSApICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICAgICAgY29uc3QgZXhwaXJlZCAgICAgPSBkaWZmVGltZSggZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA+IExPR19JTlRFUlZBTDtcXHJcXG4gICAgICAgIGNvbnN0IGhhc0V4Y2VlZGVkID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGV4Y2VlZGVkICE9PSAoIGV4Y2VlZGVkID0gZXhjZWVkZWRMaW1pdCgpICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICAgICAgaWYgKCBleHBpcmVkIHx8IGhhc0V4Y2VlZGVkICkge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgc2F2ZSggZSApO1xcclxcbiAgICAgICAgfVxcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGNsaWNrUHJldmVudGVkID0gdHJ1ZTtcXHJcXG4gICAgICAgIGVtaXQoIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9EUkFHR0lORyApO1xcclxcbiAgICAgICAgcHJldmVudCggZSApO1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9IGVsc2UgaWYgKCBpc1NsaWRlckRpcmVjdGlvbiggZSApICkge1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRyYWdnaW5nID0gc2hvdWxkU3RhcnQoIGUgKTtcXHJcXG4gICAgICAgIHByZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KCBlICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciByZWxlYXNlcyBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pbnRpbmcgZGV2aWNlcy5cXHJcXG4gICAqIE5lZWRzIHRvIG1vdmUgdGhlIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Igd2hlbjpcXHJcXG4gICAqIC0gVGhlIHVzZXIgZHJhZ3MgdGhlIHNsaWRlciBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBkaXN0YW5jZSBleGNlZWRzIHRoZSB0aHJlc2hvbGRcXHJcXG4gICAqIC0gVGhlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB1c2VyIGFib3J0ZWQgdGhlIHNsaWRlciBtb3ZpbmcgYnkgcG9pbnRlcmRvd24gYW5kIGonCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXN0IHJlbGVhc2VkIGl0IHdpdGhvdXQgZHJhZ2dpbmcgdGhlIHNsaWRlclxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgVG91Y2hFdmVudCBvciBNb3VzZUV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvYmplY3RcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25Qb2ludGVyVXAoIGU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidUb3VjaEV2ZW50IHwgTW91c2VFdmVudCApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUuaXMoIERSQUdHSU5HICkgKSB7XFxyXFxuICAgICAgc3RhdGUuc2V0KCBJRExFICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICAgIGVtaXQoIEVWRU5UX0RSQUdHRUQgKTtcXHJcXG4gICAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gICAgaWYgKCBkcmFnZ2luZyApIHtcXHJcXG4gICAgICBtb3ZlKCBlICk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIHByZXZlbnQoIGUgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5iaW5kKCB0YXJnZXQsIFBPSU5URVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vdmUgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIHVuYmluZCggdGFyZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25QbycKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlclVwICk7XFxyXFxuICAgIGRyYWdnaW5nID0gZmFsc2U7XFxyXFxuICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdHJhY2sgZWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgaXMgY2xpY2tlZC5cXHJcXG4gICAqIERpc2FibGVzIGNsaWNrIGFueSBlbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgaW5zaWRlIGl0IHdoaWxlIGRyYWdnaW5nLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gZSAtIEEgTW91c2VFdmVudCBvYmplY3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvbkNsaWNrKCBlOiBNb3VzZUV2ZW50ICk6IHZvaWQge1xcclxcbiAgICBpZiAoICcKICAgICAgICAgICAgICAgICAgICAgICAgYichIGRpc2FibGVkICYmIGNsaWNrUHJldmVudGVkICkge1xcclxcbiAgICAgIHByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBlLCB0cnVlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIFNhdmVzIGRhdGEgYXQgdGhlIHNwZWNpZmljIG1vbWVudC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzYXZlKCBlOiBUb3VjaEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCB8IE1vdXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgIHByZXZCYXNlRXZlbnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgYmFzZUV2ZW50O1xcclxcbiAgICBiYXNlRXZlbnQgICAgID0gZTtcXHJcXG4gICAgYmFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VQb3NpdGlvbiAgPSBnZXRQb3NpdGlvbigpO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogQ2FsY3VsYXRlcyB0aGUgZGVzdGluYXRpb24gYnkgdGhlIGRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnIHZlbG9jaXR5IGFuZCBtb3ZlcyB0aGUgY2Fyb3VzZWwuXFxyXFxuICAgKiBJZiBtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290aW9uIGlzIHJlZHVjZWQsIHJlc3RvcmVzIHRyYW5zaXRpb24gc3BlZWQgdG8gdGhlIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbml0aWFsIHZhbHVlXFxyXFxuICAgKiBiZWNhdXNlIGl0XCdzIFxcImVzc2VudGlhbFxcIiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW90aW9uIGZvciB0aGUgdXNlciB0byByZWNvZ25pemUgd2hhdCBoYXBwZW5zIG9uIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2Fyb3VzZWwuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IG9yIE1vdXNlRXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZSggZTogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCB2ZWxvY2l0eSAgICA9IGNvbXB1dGVWZWxvY2l0eSggZSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgY29uc3QgZGVzdGluYXRpb24gPSBjb21wdXRlRGVzdGluYXRpb24oIHZlbG9jaXR5ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICBjb25zdCByZXdpbmQgICAgICA9IG9wdGlvbnMucmV3aW5kICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLnJld2luZEJ5RHJhZztcXHJcXG5cXHJcXG4gICAgcmVkdWNlKCBmYWxzZSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gICAgaWYgKCBpc0ZyZWUgKSB7XFxyXFxuICAgICAgQ29udHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsZXIuc2Nyb2xsKCBkZXN0aW5hdGlvbiwgMCwgb3B0aW9ucy5zbmFwICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGVsc2UgaWYgKCBTcGxpZGUuaXMoIEZBREUgKSApIHtcXHJcXG4gICAgICBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29udHJvbGxlci5nbyggb3JpZW50KCBzaWduKCB2ZWxvY2l0eSApICkgPCAwID8gKCByZXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5kID8gJzwnIDogJy0nICkgOiAoIHJld2luZCA/ICc+JyA6ICcrJyApICk7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICB9IGVsc2UgaWYgKCBTcGxpZGUuaXMoIFNMSURFICkgJiYgZXhjZWVkZWQgJiYgcicKICAgICAgICAgICAgICAgICAgICAgICAgYidld2luZCApIHtcXHJcXG4gICAgICBDb250cm9sbGVyLmdvKCBleGNlZWRlZExpbWl0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYiIgdHJ1ZSApID8gJz4nIDogJzwnICk7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbnRyb2xsZXIuZ28oIENvbnRyb2xsZXIudG9EZXN0KCBkZXN0aW5hdGlvbiApLCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJlZHVjZSggdHJ1ZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBkcmFnICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXN0YW5jZSBleGNlZWRzIHRoZSBkZWZpbmVkIHRocmVzaG9sZC5cXHJcXG4gICAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBkaXN0YW5jZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXhjZWVkcyB0aGUgdGhyZXNob2xkLCBvciBgZmFsc2VgIGlmIG5vdC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIHNob3VsZFN0YXJ0KCBlOiBUb3VjaEV2ZW50IHwgTScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdXNlRXZlbnQgKTogYm9vbGVhbiB7XFxyXFxuICAgIGNvbnN0IHsgZHJhZ01pblRocicKICAgICAgICAgICAgICAgICAgICAgICAgYidlc2hvbGQ6IHRocmVzaG9sZHMgfSA9IG9wdGlvbnM7XFxyXFxuICAgIGNvbnN0IGlzTycKICAgICAgICAgICAgICAgICAgICAgICAgYidiaiA9IGlzT2JqZWN0KCB0aHJlc2hvbGRzICk7XFxyXFxuICAgIGNvbnN0IG1vdXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGlzT2JqICYmIHRocmVzaG9sZHMubW91c2UgfHwgMDtcXHJcXG4gICAgY29uc3QgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvdWNoID0gKCBpc09iaiA/IHRocmVzaG9sZHMudG91Y2ggOiArdGhyZXNob2xkcyApIHx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxMDtcXHJcXG4gICAgcmV0dXJuIGFicyggZGlmZkNvb3JkKCBlICkgKSA+ICggaXNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291Y2hFdmVudCggZSApID8gdG91Y2ggOiBtb3VzZSApO1xcclxcbiAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIHdoZXRoZXIgZHJhZ2dpbmcgdG93YXJkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgdGhlIHNsaWRlciBvciB0aGUgc2Nyb2xsIGRpcmVjdGlvbi5cXHJcXG4gICAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgZHJhZ2dpbmcgdG93YXJkcyB0aGUgc2xpZGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkaXJlY3Rpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAgICpcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBAcGFyYW0gZSAtIEEgVG91Y2hFdmVudCBvciBNb3VzZUV2ZW50IG9iamVjdFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gaXNTbGlkZXJEaXJlY3Rpb24oIGU6IFRvdWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50IHwgTW91c2VFdmVudCApOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIGFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoIGRpZmZDb29yZCggZSApICkgPiBhYnMoIGRpZmZDb29yZCggZSwgdHJ1ZSApICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb21wdXRlcyB0aGUgZHJhZycKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmVsb2NpdHkuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGhlIGRyYWcgdmVsb2NpdHkuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlVmVsb2NpdHkoIGU6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBpZiAoIFNwbGlkZS5pcyggTE9PUCApIHx8ICEgZXhjZWVkZWQgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICAgIGNvbnN0IHRpbWUgPSBkaWZmVGltZSggZSApO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICBpZiAoIHRpbWUgJiYgdGltZSA8IExPR19JTlRFUlZBTCApIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICByZXR1cm4gZGlmZkNvb3JkKCBlICkgLyB0aW1lO1xcclxcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIDA7XFxyXFxuICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb21wdXRlcyB0aGUgZGVzdGluYXRpb24gYnkgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB2ZWxvY2l0eSBhbmQgdGhlIGBmbGlja1Bvd2VyYCBvcHRpb24uXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEBwYXJhbSB2ZWxvY2l0eSAtIFRoZSBkcmFnIHZlbG9jaXR5LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBkZXN0aW5hdGlvbi5cXHJcXG4gICAqL1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGZ1bmN0aW9uIGNvbXB1dGVEZXN0aW5hdGlvbiggdmVsb2NpdHk6IG51bWJlciApJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKCkgKyBzaWduKCB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vsb2NpdHkgKSAqIG1pbihcXHJcXG4gICAgICBhYnMoIHZlbG9jaXR5ICkgKiAoIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmZsaWNrUG93ZXIgfHwgNjAwICksXFxyXFxuICAgICAgaXNGcmVlID8gSW5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXR5IDogQ29tcG9uZW50cy5MYXlvdXQubGlzdFNpemUoKSAqICggb3B0aW9ucy5mbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2tNYXhQYWdlcyB8fCAxIClcXHJcXG4gICAgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGNvb3JkIGRpZmZlcmVuY2UgYmV0d2VlbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIHByb3ZpZGVkIGFuZCBiYXNlIGV2ZW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIGUgICAgICAgICAgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICogQHBhcmFtIG9ydGhvZ29uYWwgLSBPcHRpb25hbC4gSWYgYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCwgcmV0dXJucyB0aGUgY29vcmQgb2YgdGhlIG9ydGhvZ29uYWwgYXhpcyBhZ2FpbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgZHJhZyBvbmUuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgZGlmZmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VuY2Ugb2YgdGhlIGNvb3JkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBkaWZmQ28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3JkKCBlOiBUb3VjaEV2ZW50IHwgTW91c2VFdmVudCwgb3J0aG9nb25hbD86IGJvb2xlYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduICk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiBjb29yZE9mKCBlLCBvcnRob2dvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbCApIC0gY29vcmRPZiggZ2V0QmFzZUV2ZW50KCBlICksIG9ydGhvZ29uYWwgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGVsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwc2VkIHRpbWUgZnJvbSB0aGUgYmFzZSBldmVudCB0byBgZWAuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0LlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBlbGFwc2VkIHRpbWUgaW4gbWlsbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2Vjb25kcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGlmZlRpbWUoIGU6IFRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VjaEV2ZW50IHwgTW91c2VFdmVudCApOiBudW1iZXIge1xcclxcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RpbWVPZiggZSApIC0gdGltZU9mKCBnZXRCYXNlRXZlbnQoIGUgKSApO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgYmFzZSBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKiBJZiB0aGUgYmFzZSBldmVudCBpcyBzYW1lIHdpdGggYGVgLCByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJucyBwcmV2aW91cyBvbmUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0LlxcclxcbiAgICpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcmV0dXJuIEEgYmFzZSBldmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEJhc2VFdmVudCggZTogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQgKTogVG91Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgfCBNb3VzZUV2ZW50IHtcXHJcXG4gICAgcmV0dXJuIGJhc2VFdmVudCA9PT0gZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgcHJldkJhc2VFdmVudCB8fCBiYXNlRXZlbnQ7XFxyXFxuICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBgcGFnZVhgIGFuZCBgcGFnZVlgIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb29yZGluYXRlcyBwcm92aWRlZCBieSB0aGUgZXZlbnQuXFxyXFxuICAgKiBCZSBhd2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmUgdGhhdCBJRSBkb2VzIG5vdCBzdXBwb3J0IGJvdGggVG91Y2hFdmVudCBhbmQgTW91cycKICAgICAgICAgICAgICAgICAgICAgICAgYidlRXZlbnQgY29uc3RydWN0b3JzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAtIEEgVG91Y2hFdmVudCBvciBNb3VzZUV2ZW50IG9iamVjdC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gb3J0aG9nb25hbCAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIHJldHVybnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBjb29yZCBvZiB0aGUgb3J0aG9nb25hbCBheGlzIGFnYWluc3QgdGhlIGRyYWcgbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgcGFnZVggb3IgcGFnZVkgY29vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JkaW5hdGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvb3JkT2YoIGU6IFRvdWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaEV2ZW50IHwgTW91c2VFdmVudCwgb3J0aG9nb25hbD86IGJvb2xlYW4gKTogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHJldHVybiAoIGlzVG91Y2hFdmVudCggZSApID8gZS5jaGFuZ2VkVCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJvdWNoZXNbIDAgXSA6IGUgKVsgYHBhZ2UkeyByZXNvbHZlKCBvcnRob2dvbmFsID8gJ1knIgogICAgICAgICAgICAgICAgICAgICAgICBiIiA6ICdYJyApIH1gIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWR1Y2VzIHRoZSBkaXN0YW5jZSB0byBtb3ZlIGJ5IHRoZSBwcmVkZWZpbmVkIGZyaWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbi5cXHJcXG4gICAqIFRoaXMgZG9lcyBub3RoaW5nIHdoZW4gdGhlIHNsaWRlciB0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZSBpcyBub3QgYHNsaWRlYCwgb3IgdGhlIHBvc2l0aW9uIGlzIGluc2lkZSBib3JkZXJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGlmZiAtIERpZmYgdG8gY29uc3RyYWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBjb25zdHJhaW5lZCBkaWZmLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY29uc3RyYWluKCBkaWZmOiBudW1iZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiBkaWZmIC8gKCBleGNlZWRlZCAmJiBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlLmlzKCBTTElERSApID8gRlJJQ1RJT04gOiAxICk7XFxyXFxuICB9XFxyXFxuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdXNlciBjYW4gZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYWcgdGhlIHRhcmdldC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FuIGV2ZW50IHRhcmdldC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgdGhlIHRhcmdldCBpcyBkcmFnZ2FibGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBpc0RyYWdnYWJsZSggdGFyZ2V0OiBFdmVudFRhcmdldCApOiBib29sZWFuIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGNvbnN0IHsgbm9EcmFnIH0gPSBvcHRpb25zO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuICEgbWF0Y2hlcyggdGFyZ2V0LCBgLiR7IENMQVNTX1BBR0lOQVRJT05fUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBR0UgfSwgLiR7IENMQVNTX0FSUk9XIH1gIClcXHJcXG4gICAgICAmJiAoICEgbm9EcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhZyB8fCAhIG1hdGNoZXMoIHRhcmdldCwgbm9EcmFnICkgKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgZXZlbnQgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIGUgLSBBbiBldmVudCB0byBjaGVjay5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBgdHJ1ZWAgaWYgdGhlIGBlYCBpcyBUb3VjaEV2ZW50LlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gaXNUb3VjaEV2ZW50KCBlOiBUb3VjaEV2ZW50IHwgTW91c2VFdmVudCApOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZSBpcyBUb3VjaEV2ZW50IHtcXHJcXG4gICAgcmV0dXJuIHR5cGVvZiBUb3VjaEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZSBpbnN0YW5jZW9mIFRvdWNoRXZlbnQ7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgbm93IHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdXNlciBpcyBkcmFnZ2luZyB0aGUgc2xpZGVyIG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHVzZXIgaXMgZHJhZ2dpbmcgdGhlIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc0RyYWdnaW5nKCk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gZHJhZ2dpbmc7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEaXNhYmxlcyB0aGUgY29tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gdmFsdWUgLSBTZXQgYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYCB0byBkaXNhYmxlIHRoZSBjb21wb25lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBkaXNhYmxlKCB2YWx1ZTogYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgZGlzYScKICAgICAgICAgICAgICAgICAgICAgICAgYidibGVkID0gdmFsdWU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgbW91bnQsXFxyXFxuICAgIGRpc2FibGUsXFxyXFxuICAgIGlzRHJhZ2dpbmcsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQ0xBU1NfTE9BRElORyB9IGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIEVWRSIKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9MQVpZTE9BRF9MT0FERUQsXFxyXFxuICBFVkVOVF9NT1ZFRCxcXHJcXG4gIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19SRUZSRVNILFxcclxcbiAgRVZFTlRfUkVTSVpFLFxcclxcbiAgRVZFTlRfU0NST0xMRUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLFxcclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9IGZybycKICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIGFkZENsYXNzLFxcIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGFwcGx5LFxcclxcbiAgY2hpbGQsXFxyXFxuICBjcmVhdGUsXFxyXFxuICBkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheSxcXHJcXG4gIGVtcHR5LFxcclxcbiAgZ2V0QXR0cmlidXRlLFxcclxcbiAgcScKICAgICAgICAgICAgICAgICAgICAgICAgYid1ZXJ5QWxsLFxcclxcbiAgcmVtb3ZlLFxcclxcbiAgcmVtb3ZlQXR0cmlidXRlLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gIHJlbW92ZUNsYXNzLFxcclxcbiAgc2V0QXR0cmlidXRlLFxcclxcbn0gZnJvbSAnIgogICAgICAgICAgICAgICAgICAgICAgICBiIi4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBTbGlkZUNvbXBvbmVudCB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICBiIicuLi9TbGlkZXMvU2xpZGUnO1xcclxcbmltcG9ydCB7IElNQUdFX1NFTEVDVE9SLCBTIgogICAgICAgICAgICAgICAgICAgICAgICBiIlJDX0RBVEFfQVRUUklCVVRFLCBTUkNTRVRfREFUQV9BVFRSSUJVVEUgfSBmcm9tICcuL2MiCiAgICAgICAgICAgICAgICAgICAgICAgIGIib25zdGFudHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhYyIKICAgICAgICAgICAgICAgICAgICAgICAgYidlIGZvciB0aGUgTGF6eUxvYWQgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgTGF6eUxvYWRDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuICAvKiogQGludGVybmFsIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgY2hlY2soKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIFRoZSB0eXBlIGZvciBlYWNoIGVudHJ5LlxcclxcbiAqIFVzZSBhIHR1cGxlIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgYmV0dGVyIGNvbXByZXNzaW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqL1xcclxcbnR5cGUgTGF6eUxvYWRFbnRyeSA9IFsgSFRNTEltYWdlRWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIFNsaWRlQ29tcG9uZW50LCBIVE1MU3BhbkVsZW1lbnQgXTtcXHJcXG5cXHJcXG4vKionCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgbGF6aWx5IGxvYWRpbmcgaW1hZ2VzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbScKICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xhenlMb2FkIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBMYXp5TG9hZCggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBvcHRpb25zOiBPcHRpb25zICk6IExhenlMb2FkQ29tcG9uZW50IHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCB7IG9uLCBvZmYsIGJpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlICk7XFxyXFxuICBjb25zdCBpc1NlcXVlbnRpYWwgPSBvcHRpb25zLmxhenlMb2FkJwogICAgICAgICAgICAgICAgICAgICAgICBiIiA9PT0gJ3NlcXVlbnRpYWwnO1xcclxcbiAgY29uc3QgZXZlbnRzICAgICAgID0gWyBFIgogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEVEIF07XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBTdG9yZXMgZGF0YSBvZiBpbWFnZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cmllczogTGF6eUxvYWRFbnRyeVtdID0gW107XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5sYXp5TG9hZCApIHtcXHJcXG4gICAgICBpbml0KCk7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKCBFVkVOVF9SRUZSRVNILCBpbml0ICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCBzdGFydCBsb2FkaW5nIGltYWdlcy5cXHJcXG4gICAqIEJlIGF3YXJlIHRoYXQgYHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZyZXNoYCBhbHNvIGNhbGxzIHRoaXMgbWV0aG9kLlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gaW5pdCgpIHtcXHJcXG4gICAgZW1wdHkoIGVudHJpZXMgKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZ2lzdGVyKCk7XFxyXFxuXFxyXFxuICAgIGlmICggaXNTZXF1ZW50aWFsICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBsb2FkTmV4dCgpO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvZmYoIGV2ZW50cyApO1xcclxcbiAgICAgIG9uKCBldmVudHMsIGNoZWNrICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNoZWNrKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIEZpbmRzIGltYWdlcyBhbmQgcmVnaXN0ZXIgdGhlbSBhcyBlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmllcyB3aXRoIGNyZWF0aW5nIHNwaW5uZXIgZWxlbWVudHMuXFxyXFxuICAgKiBOb3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0aGF0IHNwaW5uZXIgY2FuIGJlIGFscmVhZHkgYXZhaWxhYmxlIGJlY2F1c2Ugb2YgYCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWZyZXNoKClgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiByZWdpc3RlcigpOiB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29pZCB7XFxyXFxuICAgIENvbXBvbmVudHMuU2xpZGVzLmZvckVhY2goIFNsaWRlID0+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgcXVlcnlBbGw8SFRNTEltYWdlRWxlbWVudD4oIFNsaWRlLnNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgSU1BR0VfU0VMRUNUT1IgKS5mb3JFYWNoKCBpbWcgPT4ge1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGNvbnN0IHNyYyAgICA9IGdldEF0dHJpYnV0ZSggaW1nLCBTUkNfREFUQV9BVFRSSUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVRFICk7XFxyXFxuICAgICAgICBjb25zdCBzcmNzZXQgPSBnZXRBdHRyaWJ1dGUoIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSApO1xcclxcblxcclxcbiAgICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3JjICE9PSBpbWcuc3JjIHx8IHNyY3NldCAhPT0gaW1nLnNyY3NldCApIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IG9wdGlvbnMuY2xhc3Nlcy5zcGlubmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgICAgICAgY29uc3QgcGFyZW50ICAgID0gaW1nLnBhcmVudEVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250O1xcclxcbiAgICAgICAgICBjb25zdCBzcGlubmVyICAgPSBjaGlsZCggcGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiIiwgYC4keyBjbGFzc05hbWUgfWAgKSB8fCBjcmVhdGUoICdzcGFuJywgY2xhc3NOYW1lLCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyZW50ICk7XFxyXFxuXFxyXFxuICAgICAgICAgIGVudHJpZXMucHVzaCggWyBpbWcsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZSwgc3Bpbm5lciBdICk7XFxyXFxuICAgICAgICAgIGltZy5zcmMgfHwgZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXkoIGltZywgJ25vbmUnICk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgfSApO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDaGVjaycKICAgICAgICAgICAgICAgICAgICAgICAgYidzIGhvdyBjbG9zZSBlYWNoIGltYWdlIGlzIGZyb20gdGhlIGFjdGl2ZSBzbGlkZSwgYW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gc3RhcnQgbG9hZGluZyBvciBub3QuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogVGhlIGxhc3QgYCsxYCBpcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNoZWNrKCk6IHZvaWQge1xcclxcbiAgICBlbnRyaWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyA9IGVudHJpZXMuZmlsdGVyKCBkYXRhID0+IHtcXHJcXG4gICAgICBjb25zdCBkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFuY2UgPSBvcHRpb25zLnBlclBhZ2UgKiAoICggb3B0aW9ucy5wcmVsb2FkUGFnZXMgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IDEgKSArIDEgKSAtIDE7XFxyXFxuICAgICAgcmV0dXJuIGRhdGFbIDEgXS5pc1dpdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaW4oIFNwbGlkZS5pbmRleCwgZGlzdGFuY2UgKSA/IGxvYWQoIGRhdGEgKSA6IHRydWU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIGVudHJpZXMubGVuZ3RoIHx8IG9mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YoIGV2ZW50cyApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRzIGxvYWRpbmcgdGhlIGltYWdlIGluIHRoZSBwcm92aWRlZCBkYXRhLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gZGF0YSAtIEEgTGF6eUxvYWRFbnRyeSBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsb2FkKCBkYXRhOiBMYXp5TG9hZEVudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyeSApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgWyBpbWcgXSA9IGRhdGE7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgICBhZGRDbGFzcyggZGF0YVsgMSBdLnNsaWRlLCBDTEFTU19MT0FESU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiRyApO1xcclxcbiAgICBiaW5kKCBpbWcsICdsb2FkIGVycm9yJywgYXBwbHkoIG9uTG8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiYWQsIGRhdGEgKSApO1xcclxcblxcclxcbiAgICBzZXRBdHRyaWJ1dGUoIGltZywgJ3NyYyIKICAgICAgICAgICAgICAgICAgICAgICAgYiInLCBnZXRBdHRyaWJ1dGUoIGltZywgU1JDX0RBVEFfQVRUUklCVVRFICkgKTtcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJuICAgIHNldEF0dHJpYnV0ZSggaW1nLCAnc3Jjc2V0JywgZ2V0QXR0cmlidXRlKCBpbWcsIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBTUkNTRVRfREFUQV9BVFRSSUJVVEUgKSApO1xcclxcbiAgICByZW1vdmVBdHRyaWJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKCBpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSApO1xcclxcbiAgICByZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKCBpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSApO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGltYWdlIGlzIGxvYWRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IgYW55IGVycm9yIG9jY3Vycy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EgLSBBIExhenlMb2FkRW50cnkgb2JqZWN0LlxcclxcbiAgICogQHBhcmFtIGUgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0gQW4gRXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbkxvYWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBkYXRhOiBMYXp5TG9hZEVudHJ5LCBlOiBFdmVudCApOiB2b2lkIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IFsgaW1nLCBTbGlkZSBdID0gZGF0YTtcXHJcXG5cXHJcXG4gICAgcmVtb3ZlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzKCBTbGlkZS5zbGlkZSwgQ0xBU1NfTE9BRElORyApO1xcclxcblxcclxcbiAgICBpJwogICAgICAgICAgICAgICAgICAgICAgICBiImYgKCBlLnR5cGUgIT09ICdlcnJvcicgKSB7XFxyXFxuICAgICAgcmVtb3ZlKCBkYXRhIgogICAgICAgICAgICAgICAgICAgICAgICBiIlsgMiBdICk7XFxyXFxuICAgICAgZGlzcGxheSggaW1nLCAnJyApO1xcclxcbiAgICAgIGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGltZywgU2xpZGUgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdCggRVZFTlRfUkVTSVpFICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzU2VxdWVudGlhbCAmJiBsb2FkTmV4dCgpO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogU3RhcnRzIGxvYWRpbmcgYSBuZXh0IGltYWdlLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gbG9hZE5leHQoKTogdm9pZCB7XFxyXFxuICAgIGVudHJpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmxlbmd0aCAmJiBsb2FkKCBlbnRyaWVzLnNoaWZ0KCkgKTtcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4gICAgZGVzdHJveTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcGx5KCBlbXB0eSwgZW50cmllcyApLFxcclxcbiAgICBjaGVjayxcXHJcXG4gIH07XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBBUlJPV19MRUZULCBBUlJPV19SSUdIVCB9IGZyJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi8uLi9jb25zdGFudHMvYXJyb3dzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgQVIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQ09OVFJPTFMsXFxyXFxuICBBUklBX0xBQkVMLFxcclxcbiAgQVJJQV9PUklFTlRBVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJT04sXFxyXFxuICBBUklBX1NFTEVDVEVELFxcclxcbiAgUk9MRSxcXHJcXG4gIFRBQicKICAgICAgICAgICAgICAgICAgICAgICAgYiJfSU5ERVgsXFxyXFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IENMQVNTX0FDVElWRSwgQ0xBU1NfUEFHSU5BVElPTiB9IGZyb20gJy4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHsgVFRCIH0gZnJvbSAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJy4uLy4uL2NvbnN0YW50cy9kaXJlY3Rpb25zJztcXHJcXG5pbXBvcnQge1xcclxcbiAgRSIKICAgICAgICAgICAgICAgICAgICAgICAgYidWRU5UX0VORF9JTkRFWF9DSEFOR0VELFxcclxcbiAgRVZFTlRfTU9WRSxcXHJcXG4gIEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9QQUdJTkFUSU9OX01PVU5URUQsXFxyXFxuICBFVkVOVF9QQUdJTkFUSU9OX1VQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEVELFxcclxcbiAgRVZFTlRfUkVGUkVTSCxcXHJcXG4gIEVWRU5UX1NDUk9MTCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBFVkVOVF9TQ1JPTExFRCxcXHJcXG4gIEVWRU5UX1VQREFURUQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiIlxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgRSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIifSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIGFkZENsYXNzLCIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGFwcGx5LFxcclxcbiAgY2VpbCxcXHJcXG4gIGNyZWF0ZSxcXHJcXG4gIGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGF5LFxcclxcbiAgZW1wdHksXFxyXFxuICBmb2N1cyxcXHJcXG4gIGZvcm1hdCxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBwcmV2ZW50LFxcclxcbiAgcmVtb3ZlLFxcclxcbiAgcmVtb3ZlQXR0cmlidXRlLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJlbW92ZUNsYXNzLFxcclxcbiAgc2V0QXR0cmlidXRlLFxcclxcbiAgcycKICAgICAgICAgICAgICAgICAgICAgICAgYiJsaWNlLFxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IG5vcm1hIgogICAgICAgICAgICAgICAgICAgICAgICBiImxpemVLZXkgfSBmcm9tICcuLi8uLi91dGlscy9kb20vbm9ybWFsaXplS2V5L25vcm1hbGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiemVLZXknO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZiIKICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0aGUgUGFnaW5hdGlvbiBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgaXRlbXM6IFBhZ2luYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uSXRlbVtdO1xcclxcbiAgZ2V0QXQoIGluZGV4OiBudW1iZXIgKTogUGFnaW5hdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25JdGVtO1xcclxcbiAgdXBkYXRlKCk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBkYXRhIG9mIHRoZSBwYWdpbmF0aW9uLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJmYWNlIFBhZ2luYXRpb25EYXRhIHtcXHJcXG4gIGxpc3Q6IEhUTUxVTGlzdEVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50O1xcclxcbiAgaXRlbXM6IFBhZ2luYXRpb25JdGVtW107XFxyXFxufVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciBlYWNoIHBhZ2luYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGl0ZW0uXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uSXRlbSB7XFxyXFxuICBsaTogSFRNTExJRScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQ7XFxyXFxuICBidXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xcclxcbiAgcGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U6IG51bWJlcjtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgZm9yIHRoZSBwYWdpbmF0aW9uIFVJIChhIHNsaWRlIHBpY2tlcikuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMjEvTk9URS13YWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLWFyaWEtcHJhY3RpY2VzLTEuMi0yMDIxMTEyOS8jZ3JvdXBlZC1jYXJvdXNlbC1lbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHNcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgUGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb24gY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIFBhZ2luYXRpb24oIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cywgb3B0aW9uczogT3B0aW9ucyApOiBQYWdpbmF0aW9uQ29tcG9uZW50IHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICBjb25zdCBldmVudCA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCB7IG9uLCBlbWl0LCBiaW5kIH0gPSBldmVudDtcXHJcXG4gIGNvbnN0IHsgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlcywgRWxlbWVudHMsIENvbnRyb2xsZXIgfSA9IENvbXBvbmVudHM7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgeyBoYXNGb2N1cywgZ2V0SW5kZXgsIGdvIH0gPSBDb250cm9sbGVyO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGNvbnN0IHsgcmVzb2x2ZSB9ID0gQ29tcG9uZW50cy5EaXJlY3Rpb247XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgY29uc3QgeyBwYWdpbmF0aW9uOiBwbGFjZWhvbGRlciB9ID0gRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIHBhZ2luYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGl0ZW1zLlxcclxcbiAgICovXFxyXFxuICBjb25zdCBpdGVtczogUGFnaW5hdGlvbkl0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtW10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHBhZ2luYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsaXN0OiBIVE1MVUxpc3RFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCB8IG51bGw7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG1vZGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2llciBjbGFzc2VzLlxcclxcbiAgICovXFxyXFxuICBsZXQgcGFnaW5hdGlvbkNsYXNzZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmc7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgZGVzdHJveSgpO1xcclxcbiAgICBvbiggWyBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIF0sIG1vdW50ICk7XFxyXFxuXFxyXFxuICAgIGNvbnN0IGVuYWJsZWQgPSBvcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdpbmF0aW9uO1xcclxcbiAgICBwbGFjZWhvbGRlciAmJiBkaXNwbGF5KCBwbGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJob2xkZXIsIGVuYWJsZWQgPyAnJyA6ICdub25lJyApO1xcclxcblxcclxcbiAgICBpZiAoIgogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbmFibGVkICkge1xcclxcbiAgICAgIG9uKCBbIEVWRU5UX01PVkUsIEVWRU5UX1NDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JPTEwsIEVWRU5UX1NDUk9MTEVEIF0sIHVwZGF0ZSApO1xcclxcbiAgICAgIGNyZWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VQYWdpbmF0aW9uKCk7XFxyXFxuICAgICAgdXBkYXRlKCk7XFxyXFxuICAgICAgZW1pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCwgeyBsaXN0LCBpdGVtcyB9LCBnZXRBdCggUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZS5pbmRleCApICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIERlc3Ryb3lzIHRoZSBjb21wb25lbnQuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xcclxcbiAgICBpZiAoIGxpc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIHJlbW92ZSggcGxhY2Vob2xkZXIgPyBzbGljZSggbGlzdC5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGRyZW4gKSA6IGxpc3QgKTtcXHJcXG4gICAgICByZW1vdmVDbGFzcyggbGlzdCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb25DbGFzc2VzICk7XFxyXFxuICAgICAgZW1wdHkoIGl0ZW1zICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIGxpc3QgPSBudWxsO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndC5kZXN0cm95KCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENyZScKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVzIHRoZSBwYWdpbmF0aW9uIGVsZW1lbnQgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhZ2luYXRpb24oKTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQge1xcclxcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gU3BsaWRlO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgeyBjbGFzc2VzLCBpMThuLCBwZXJQYWdlIH0gPSBvcHRpb25zO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY29uc3QgbWF4ID0gaGFzRm9jdXMoKSA/IENvbnRyb2xsZXIuZ2V0RW5kKCkgKyAxJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA6IGNlaWwoIGxlbmd0aCAvIHBlclBhZ2UgKTtcXHJcXG5cXHJcXG4gICAgbGlzdCA9IHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGFjZWhvbGRlciB8fCBjcmVhdGUoICd1bCcsIGNsYXNzZXMucGFnaW5hdGlvbiwgRWxlbSIKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLnRyYWNrLnBhcmVudEVsZW1lbnQgKTtcXHJcXG5cXHJcXG4gICAgYWRkQ2xhc3MoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBsaXN0LCAoIHBhZ2luYXRpb25DbGFzc2VzID0gYCR7IENMQVNTX1BBR0lOQVRJT04gfS0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSR7IGdldERpcmVjdGlvbigpIH1gICkgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIibGlzdCwgUk9MRSwgJ3RhYmxpc3QnICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZSggbGkiCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3QsIEFSSUFfTEFCRUwsIGkxOG4uc2VsZWN0ICk7XFxyXFxuICAgIHNldEF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoIGxpc3QsIEFSSUFfT1JJRU5UQVRJT04sIGdldERpcmVjdGlvbigpID09PSBUVEIgPycKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ3ZlcnRpY2FsJyA6ICcnICk7XFxyXFxuXFxyXFxuICAgIGZvciAoIGxldCBpID0gMDsgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2kgPCBtYXg7IGkrKyApIHtcXHJcXG4gICAgICBjb25zdCBsaSAgICAgICA9IGNyZWF0JwogICAgICAgICAgICAgICAgICAgICAgICBiImUoICdsaScsIG51bGwsIGxpc3QgKTtcXHJcXG4gICAgICBjb25zdCBidXR0b24gICA9IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBjcmVhdGUoICdidXR0b24nLCB7IGNsYXNzOiBjbGFzc2VzLnBhZ2UsIHR5cGU6ICdidXQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIidG9uJyB9LCBsaSApO1xcclxcbiAgICAgIGNvbnN0IGNvbnRyb2xzID0gU2xpZGVzLmciCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRJbiggaSApLm1hcCggU2xpZGUgPT4gU2xpZGUuc2xpZGUuaWQgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgY29uc3QgdGV4dCAgICAgPSAhIGhhc0ZvY3VzKCkgJiYgcGVyUGFnZSA+IDEgPyBpMScKICAgICAgICAgICAgICAgICAgICAgICAgYic4bi5wYWdlWCA6IGkxOG4uc2xpZGVYO1xcclxcblxcclxcbiAgICAgIGJpbmQoIGJ1dHRvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm4sICdjbGljaycsIGFwcGx5KCBvbkNsaWNrLCBpICkgKTtcXHJcXG5cXHJcXG4gICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCBvcHRpb25zLnBhZ2luYXRpb25LZXlib2FyZCApIHtcXHJcXG4gICAgICAgIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW5kKCBidXR0b24sICdrZXlkb3duJywgYXBwbHkoIG9uS2V5ZG93biwgaSApICk7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGxpLCBSJwogICAgICAgICAgICAgICAgICAgICAgICBiIk9MRSwgJ3ByZXNlbnRhdGlvbicgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGJ1IgogICAgICAgICAgICAgICAgICAgICAgICBiInR0b24sIFJPTEUsICd0YWInICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBidXR0IgogICAgICAgICAgICAgICAgICAgICAgICBiIm9uLCBBUklBX0NPTlRST0xTLCBjb250cm9scy5qb2luKCAnICcgKSApO1xcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBzZXRBdHRyaWJ1dGUoIGJ1dHRvbiwgQVJJQV9MQUJFTCwgZm9ybWF0KCB0ZXh0LCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSArIDEgKSApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggYnV0dG9uLCBUQUJfSU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInREVYLCAtMSApO1xcclxcblxcclxcbiAgICAgIGl0ZW1zLnB1c2goIHsgbGksIGJ1dHRvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHBhZ2U6IGkgfSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgZWFjaCBwYWdpbmF0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkb3QuXFxyXFxuICAgKiBNb3ZlcyB0aGUgZm9jdXMgdG8gdGhlIGFjdGl2ZSBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIGFjY2Vzc2liaWxpdHkuXFxyXFxuICAgKlxcclxcbiAgICogQGxpbmsgaHR0cHM6JwogICAgICAgICAgICAgICAgICAgICAgICBiJy8vd3d3LnczLm9yZy9XQUkvdHV0b3JpYWxzL2Nhcm91c2Vscy9mdW5jdGlvbmFsaXR5L1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcGFnZSAtIEEgY2xpY2tlZCBwYWdlIGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25DbGljayggcGFnZTogbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApOiB2b2lkIHtcXHJcXG4gICAgZ28oIGA+JHsgcGFnZSB9YCwgdHJ1ZSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gYW55IGtleSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgcHJlc3NlZCBvbiB0aGUgcGFnaW5hdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMjEvTk9URS13YWktYXJpYS1wcmFjdGljJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLTEuMi0yMDIxMTEyOS8ja2V5Ym9hcmQtaW50ZXJhY3Rpb24tMjFcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIHBhZ2UgLSBBIHBhZ2UgaW5kZXguXFxyXFxuICAgKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIGUgICAgLSBBIEtleWJvYXJkRXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gb25LZXlkb3duKCBwYWdlOiBudW1iZXIsIGU6IEtleWJvYXJkRXZlbnQgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gaXRlbXM7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCBrZXkgPSBub3JtYWxpemVLZXkoIGUgKTtcXHJcXG4gICAgY29uc3QgZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInciA9IGdldERpcmVjdGlvbigpO1xcclxcblxcclxcbiAgICBsZXQgbmV4dFBhZ2UgPSAtMScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAgIGlmICgga2V5ID09PSByZXNvbHZlKCBBUlJPV19SSUdIVCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhbHNlLCBkaXIgKSApIHtcXHJcXG4gICAgICBuZXh0UGFnZSA9ICsrcGFnZSAlIGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGg7XFxyXFxuICAgIH0gZWxzZSBpZiAoIGtleSA9PT0gcmVzb2x2ZSggQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRlQsIGZhbHNlLCBkaXIgKSApIHtcXHJcXG4gICAgICBuZXh0UGFnZSA9ICggLS1wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZSArIGxlbmd0aCApICUgbGVuZ3RoO1xcclxcbiAgICB9IGVsc2UgaWYgKCBrZXkgJwogICAgICAgICAgICAgICAgICAgICAgICBiIj09PSAnSG9tZScgKSB7XFxyXFxuICAgICAgbmV4dFBhZ2UgPSAwO1xcclxcbiAgICB9IGUiCiAgICAgICAgICAgICAgICAgICAgICAgIGIibHNlIGlmICgga2V5ID09PSAnRW5kJyApIHtcXHJcXG4gICAgICBuZXh0UGFnZSA9IGwiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW5ndGggLSAxO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGNvbnN0IGl0ZW0gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRlbXNbIG5leHRQYWdlIF07XFxyXFxuXFxyXFxuICAgIGlmICggaXRlbSApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgZm9jdXMoIGl0ZW0uYnV0dG9uICk7XFxyXFxuICAgICAgZ28oIGA+JHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5leHRQYWdlIH1gICk7XFxyXFxuICAgICAgcHJldmVudCggZSwgdHJ1ZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgbGF0ZXN0IGRpcmVjdGlvbiBmb3IgcGFnaW5hdGlvbi5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGZ1bmN0aW9uIGdldERpcmVjdGlvbigpOiBPcHRpb25zWydkaXJlY3Rpb24nXSB7IgogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gb3B0aW9ucy5wYWdpbmF0aW9uRGlyZWN0aW9uIHx8IG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmRpcmVjdGlvbjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFJldHVybnMgdGhlIHBhZ2luYXRpb24gaXRlbSBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBbiBpbmRleC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKlxcclxcbiAgICogQHJldHVybiBBIHBhZ2luYXRpb24gaXRlbSBvYmplY3QgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIGF2YWlsYWJsZSwgb3Igb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gZ2V0QXQoIGluZGV4OiBudW1iZXIgKTogUGFnaW5hdGlvbkl0ZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgdW5kZWZpbmVkIHtcXHJcXG4gICAgcmV0dXJuIGl0ZW1zWyBDb250cm9sbGVyLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb1BhZ2UoIGluZGV4ICkgXTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIFVwZGF0ZXMgdGhlIHBhZ2luYXRpb24gc3RhdHVzLlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xcclxcbiAgICBjb25zdCBwcmV2ID0gZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0KCBnZXRJbmRleCggdHJ1ZSApICk7XFxyXFxuICAgIGNvbnN0IGN1cnIgPSBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIGdldEluZGV4KCkgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBwcmV2ICkge1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgICBjb25zdCB7IGJ1dHRvbiB9ID0gcHJldjtcXHJcXG4gICAgICByZW1vdmVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3MoIGJ1dHRvbiwgQ0xBU1NfQUNUSVZFICk7XFxyXFxuICAgICAgcmVtb3ZlQXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZSggYnV0dG9uLCBBUklBX1NFTEVDVEVEICk7XFxyXFxuICAgICAgc2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZSggYnV0dG9uLCBUQUJfSU5ERVgsIC0xICk7XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIGlmICggY3VyciApIHtcXHJcXG4gICAgICBjb25zdCB7IGJ1dHRvbiB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGN1cnI7XFxyXFxuICAgICAgYWRkQ2xhc3MoIGJ1dHRvbiwgQ0xBU1NfQUNUSVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggYnV0dG9uLCBBUklBX1NFTEVDVEVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgdHJ1ZSApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggYnV0dG9uLCBUQUJfSU5EJwogICAgICAgICAgICAgICAgICAgICAgICBiIkVYLCAnJyApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGVtaXQoIEVWRU5UX1BBIgogICAgICAgICAgICAgICAgICAgICAgICBiJ0dJTkFUSU9OX1VQREFURUQsIHsgbGlzdCwgaXRlbXMgfSwgcHJldiwgY3VyciApOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIGl0ZW1zLFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICAgIGdldEF0LFxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgdXBkYXRlLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgUycKICAgICAgICAgICAgICAgICAgICAgICAgYiJDUk9MTF9MSVNURU5FUl9PUFRJT05TIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2xpc3RlIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5lci1vcHRpb25zJztcXHJcXG5pbXBvcnQgeyBNT1ZJTkcgfSBmcm9tICcuLi8uLi9jIgogICAgICAgICAgICAgICAgICAgICAgICBiIm9uc3RhbnRzL3N0YXRlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UgfSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmIgogICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlIgogICAgICAgICAgICAgICAgICAgICAgICBiIkNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJzsiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuaW1wb3J0IHsgYWJzLCBwcmV2ZW50LCB0aW1lT2YgfSBmcm9tICcuLi8uLi8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIidXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZiIKICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0aGUgV2hlZWwgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgV2hlZWxDb21wb25lbnQgZXh0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcG9uZW50IGZvciBvYnNlcnZpbmcgdGhlIG1vdXNlIHdoZWVsIGFuZCBtb3ZpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQHJldHVybiBBIFdoZWVsIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBmdW5jdGlvbiBXaGVlbCggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IFdoZWVsQ29tcG9uZW50IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBjb25zdCB7IGJpbmQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIHRoZSBsYXN0IHRpbWUgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4gdGhlIHdoZWVsIG1vdmVzIHRoZSBzbGlkZXIuXFxyXFxuICAgKi9cXHJcXG4gIGxldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgbGFzdFRpbWUgPSAwO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgdycKICAgICAgICAgICAgICAgICAgICAgICAgYidoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGlmICggb3B0aW9ucy53aGVlbCApJwogICAgICAgICAgICAgICAgICAgICAgICBiIiB7XFxyXFxuICAgICAgYmluZCggQ29tcG9uZW50cy5FbGVtZW50cy50cmFjaywgJ3doIgogICAgICAgICAgICAgICAgICAgICAgICBiImVlbCcsIG9uV2hlZWwsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TICk7XFxyXFxuICAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgdXNlciByb3RhdGVzIHRoZSBtb3VzZSB3aGVlbCBvbiB0aGUgc2xpZGVyLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgV2hlZWxFdmVudCBvYmplY3QuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbldoZWVsKCBlOiBXaGVlbEV2ZW50ICk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2b2lkIHtcXHJcXG4gICAgaWYgKCBlLmNhbmNlbGFibGUgKSB7XFxyXFxuICAgICAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHsgZGVsdGFZIH0gPSBlO1xcclxcbiAgICAgIGNvbnN0IGJhY2t3YXJkcyA9IGRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x0YVkgPCAwO1xcclxcbiAgICAgIGNvbnN0IHRpbWVTdGFtcCA9IHRpbWVPZiggZSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgICBjb25zdCBtaW4gICAgICAgPSBvcHRpb25zLndoZWVsTWluVGhyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzaG9sZCB8fCAwO1xcclxcbiAgICAgIGNvbnN0IHNsZWVwICAgICA9IG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3doZWVsU2xlZXAgfHwgMDtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGFicyggZGVsdGFZICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID4gbWluICYmIHRpbWVTdGFtcCAtIGxhc3RUaW1lID4gc2xlZXAgKSB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgU3BsaWRlLmdvKCBiYWNrd2FyZHMgPyAnPCcgOiAnPicgKTtcXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBsYXN0VGltZSA9IHRpbWVTdGFtcDtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIHNob3VsZFByZXZlbnQoIGJhY2t3YXJkcyApICYmIHByZXZlbnQoIGUgKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIHcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIHByZXZlbnQgdGhlIGRlZmF1bHQgYWN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvZiB0aGUgd2hlZWwgZXZlbnQgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gYmFja3dhcmRzIC0gU2V0IHRoaXMgdG8gYHRydWVgIGZvciBiYWNrd2FyZHMgZGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBzaG91bGQgYmUgcHJldmVudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gc2hvdWxkUHJldmVudCggYmFja3dhcmRzOiBib29sZWFuICk6IGJvb2xlYW4geycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgcmV0dXJuICEgb3B0aW9ucy5yZWxlYXNlV2hlZWxcXHJcXG4gICAgICB8JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3wgU3BsaWRlLnN0YXRlLmlzKCBNT1ZJTkcgKVxcclxcbiAgICAgIHx8IENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLkNvbnRyb2xsZXIuZ2V0QWRqYWNlbnQoIGJhY2t3YXJkcyApICE9PSAtMTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBBUklBX0FUT01JQywgQVJJQV9CVVNZLCBBUicKICAgICAgICAgICAgICAgICAgICAgICAgYiJJQV9MSVZFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2F0dHJpYnV0ZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJpbXBvcnQgeyBDTEFTU19TUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jbGFzc2VzJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuaW1wb3J0IHsgRVZFTlRfQVVUT1BMQVlfUEFVU0UsIEVWRU5UX0FVVE9QTEFZX1BMQScKICAgICAgICAgICAgICAgICAgICAgICAgYiJZLCBFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRUQgfSBmcm9tICcuLi8uLi9jb25zdGFuIgogICAgICAgICAgICAgICAgICAgICAgICBiInRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UsIFJlcXVlc3RJIgogICAgICAgICAgICAgICAgICAgICAgICBiIm50ZXJ2YWwgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltIgogICAgICAgICAgICAgICAgICAgICAgICBiInBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhcHBlbmQsIGFwcGx5LCBjcmVhdGUsIHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZW1vdmUsIHJlbW92ZUF0dHJpYnV0ZSwgc2V0QXR0cmlidXRlIH0gZnJvbSAnLi4vLi4vdSIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aWxzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIExpdmUgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZUNvbXBvbmVudCBleHRlbmRzICcKICAgICAgICAgICAgICAgICAgICAgICAgYidCYXNlQ29tcG9uZW50IHtcXHJcXG4gIGRpc2FibGUoIGRpc2FibGVkOiBib29sZWFuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpOiB2b2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBEZWxheSBpbiBtaWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzZWNvbmRzIGJlZm9yZSByZW1vdmluZyB0aGUgU1IgZmllbGQgZm9yIFdpbmRvd3MgTmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJhdG9yLlxcclxcbiAqL1xcclxcbmNvbnN0IFNSX1JFTU9WQUxfREVMQVkgPSA5MDtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgaW1wbGVtZW50aW5nIEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlIFJlZ2lvbiB0byB0aGUgc2xpZGVyLlxcclxcbiAqXFxyXFxuICogQGxpbmsgaHR0cCcKICAgICAgICAgICAgICAgICAgICAgICAgYidzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5L0FSSUEvQVJJQV9MaXZlX1JlZ2lvbnNcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSA0LjAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgTGl2ZSBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gTGl2ZSggU3BsaWRlOiBTcGxpZGUsIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IExpdmVDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IHtcXHJcXG4gIGNvbnN0IHsgb24gfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBjb25zdCB7IHRyYWNrIH0gPSBDb21wb25lbnRzLkVsZW1lbnRzO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxpdmUgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2lvbiBpcyBlbmFibGVkIG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbiAgY29uc3QgZW5hYicKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWQgPSBvcHRpb25zLmxpdmUgJiYgISBvcHRpb25zLmlzTmF2aWdhdGlvbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBzcGFuIGVsZW1lbnQgZm9yIHRoZSBTUiBvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm5seSB0ZXh0LlxcclxcbiAgICovXFxyXFxuICBjb25zdCBzciA9IGNyZWF0ZSggJ3NwYW4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiJywgQ0xBU1NfU1IgKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSBSZXF1ZXN0SW50ZXJ2YWwgaW5zdGFuY2UuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbCggU1JfUkVNT1ZBTF9ERUxBWSwgYXBwbHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0b2dnbGUsIGZhbHNlICkgKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqIC0gSkFXJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MgbmVlZHMgYGFyaWEtYXRvbWljYCB0byBtYWtlIHRoZSBgYXJpYS1idXN5YCB3b3JrLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIC0gSW1tZWRpYXRlbHkgcmVtb3ZpbmcgdGhlIFNSIG1ha2VzIFdpbmRvd3MgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05hcnJhdG9yIHNpbGVudCwgaGVuY2UgcmVxdWlyZXMgdGhlIGRlbGF5IGFyb3VuZCA1MG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBpZiAoIGVuYWJsZWQgKSB7XFxyXFxuICAgICAgZGlzYWJsZSggISBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cy5BdXRvcGxheS5pc1BhdXNlZCgpICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSggdHJhY2ssIEFSSUFfQVRPTUlDLCB0cnVlICk7XFxyXFxuICAgICAgc3IudGV4dEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIib250ZW50ID0gJ1x4ZTJceDgwXHhhNic7XFxyXFxuXFxyXFxuICAgICAgb24oIEVWRU5UX0EiCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVRPUExBWV9QTEFZLCBhcHBseSggZGlzYWJsZSwgdHJ1ZSApICk7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9uKCBFVkVOVF9BVVRPUExBWV9QQVVTRSwgYXBwbHkoIGRpc2FibGUsIGZhbHNlICkgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICAgb24oIFsgRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEVEIF0sICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBseSggdG9nZ2xlLCB0cnVlICkgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogVG9nZ2xlcyB0aGUgU1IgZmllbGQgYW5kIGBhcmlhJwogICAgICAgICAgICAgICAgICAgICAgICBiJy1idXN5YC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gYWN0aXZlIC0gRGV0ZXJtaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgd2hldGhlciB0byBhY3RpdmF0ZSB0aGUgZmllbGQgb3Igbm90LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgZnVuY3Rpb24gdG9nZ2xlKCBhY3RpdmU6IGJvb2xlYW4gKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICBzZXRBdHRyaWJ1dGUoIHRyYWNrLCBBUklBX0JVU1ksIGFjdGl2ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBhY3RpdmUgKSB7XFxyXFxuICAgICAgYXBwZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCggdHJhY2ssIHNyICk7XFxyXFxuICAgICAgaW50ZXJ2YWwuc3RhcnQoKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0gZWxzZSB7XFxyXFxuICAgICAgcmVtb3ZlKCBzciApO1xcclxcbiAgICAgIGludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbC5jYW5jZWwoKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgIHJlbW92ZUF0dHJpYnV0ZSggJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrLCBbIEFSSUFfTElWRSwgQVJJQV9BVE9NSUMsIEFSSUFfQlVTWSBdICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICByZW1vdmUoIHNyICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBEaXNhYmxlcy9lbmFibGVzIHRoZSBsaXZlIHJlZ2lvbi5cXHJcXG4gICAqIEQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2VzIG5vdGhpbmcgd2hlbiB0aGUgYGxpdmVgIG9wdGlvbiBpcyBub3QgZW5hYmxlZC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGRpc2FibGVkIC0gYHRydWVgIHRvIGRpc2FiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlIHRoZSBsaXZlIHJlZ2lvbiBvciBgZmFsc2VgIHRvIGVuYWJsZSBpdCBhZ2FpbicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRpc2FibGUoIGRpc2FibGVkOiBib29sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VhbiApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBlbmFibGVkICkge1xcclxcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXRBdHRyaWJ1dGUoIHRyYWNrLCBBUklBX0xJVkUsIGRpc2FibGVkID8gJ29mZicgOiAncCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJvbGl0ZScgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIG1vdW50LFxcclxcbiAgICBkaXNhYmxlLFxcclxcbiAgICBkZXN0cm95JwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIH07XFxyXFxufSIsImltcG9ydCB7IE9wdGlvbnMgfSBmcm9tIFwnLi4vdHlwJwogICAgICAgICAgICAgICAgICAgICAgICBiImVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU0VTIH0gZnJvbSAnLi9jbGFzc2VzJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW1wb3J0IHsgSTE4TiB9IGZyb20gJy4vaTE4bic7XFxyXFxuXFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGRlZmF1bHQgb3B0aW9ucy5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgTm90ZSB0aGF0IHRoaXMgY29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluIGFsbCBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnQgY29uc3QgREVGQVVMVFM6IE9wdGlvbnMgPSB7XFxyXFxuICB0eXBlICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgOiAnc2xpZGUnLFxcclxcbiAgcm9sZSAgICAgICAgICAgICAgOiAncmVnaW8iCiAgICAgICAgICAgICAgICAgICAgICAgIGIibicsXFxyXFxuICBzcGVlZCAgICAgICAgICAgICA6IDQwMCxcXHJcXG4gIHBlclBhZ2UgICIKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICA6IDEsXFxyXFxuICBjbG9uZVN0YXR1cyAgICAgICA6IHRydWUsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgYXJyb3dzICAgICAgICAgICAgOiB0cnVlLFxcclxcbiAgcGFnaW5hdGlvbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIDogdHJ1ZSxcXHJcXG4gIHBhZ2luYXRpb25LZXlib2FyZDogdHJ1ZSxcXHJcXG4gIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcnZhbCAgICAgICAgICA6IDUwMDAsXFxyXFxuICBwYXVzZU9uSG92ZXIgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiB0cnVlLFxcclxcbiAgcGF1c2VPbkZvY3VzICAgICAgOiB0cnVlLFxcclxcbiAgcmVzZScKICAgICAgICAgICAgICAgICAgICAgICAgYiJ0UHJvZ3Jlc3MgICAgIDogdHJ1ZSxcXHJcXG4gIGVhc2luZyAgICAgICAgICAgIDogJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJjdWJpYy1iZXppZXIoMC4yNSwgMSwgMC41LCAxKScsXFxyXFxuICBkcmFnICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgOiB0cnVlLFxcclxcbiAgZGlyZWN0aW9uICAgICAgICAgOiAnbHRyJyxcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB0cmltU3BhY2UgICAgICAgICA6IHRydWUsXFxyXFxuICBmb2N1c2FibGVOb2RlJwogICAgICAgICAgICAgICAgICAgICAgICBiInMgICAgOiAnYSwgYnV0dG9uLCB0ZXh0YXJlYSwgaW5wdXQsIHNlbGVjdCwgaWZyYW1lJywiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBsaXZlICAgICAgICAgICAgICA6IHRydWUsXFxyXFxuICBjbGFzc2VzICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgOiBDTEFTU0VTLFxcclxcbiAgaTE4biAgICAgICAgICAgICAgOiBJMThOLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJlZHVjZWRNb3Rpb246IHtcXHJcXG4gICAgc3BlZWQgICAgICA6IDAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLFxcclxcbiAgICByZXdpbmRTcGVlZDogMCxcXHJcXG4gICAgYXV0b3BsYXkgICA6ICdwYSIKICAgICAgICAgICAgICAgICAgICAgICAgYid1c2VcJyxcXHJcXG4gIH0sXFxyXFxufTsiLCIvKipcXHJcXG4gKiBUaGUgY29sbGVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gb2YgaTE4biBzdHJpbmdzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBJMThOID0ge1xcclxcbiAgcHJldiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiIiAgICA6ICdQcmV2aW91cyBzbGlkZScsXFxyXFxuICBuZXh0ICAgICAgOiAnTmV4dCBzIgogICAgICAgICAgICAgICAgICAgICAgICBiImxpZGUnLFxcclxcbiAgZmlyc3QgICAgIDogJ0dvIHRvIGZpcnN0IHNsaWRlJyxcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICBsYXN0ICAgICAgOiAnR28gdG8gbGFzdCBzbGlkZScsXFxyXFxuICBzbGlkZVggICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIDogJ0dvIHRvIHNsaWRlICVzJyxcXHJcXG4gIHBhZ2VYICAgICA6ICdHbyB0byBwYWciCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSAlcycsXFxyXFxuICBwbGF5ICAgICAgOiAnU3RhcnQgYXV0b3BsYXknLFxcclxcbiAgcCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhdXNlICAgICA6ICdQYXVzZSBhdXRvcGxheScsXFxyXFxuICBjYXJvdXNlbCAgOiAnYyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJhcm91c2VsJyxcXHJcXG4gIHNsaWRlICAgICA6ICdzbGlkZScsXFxyXFxuICBzZWxlY3QgIgogICAgICAgICAgICAgICAgICAgICAgICBiIiAgIDogJ1NlbGVjdCBhIHNsaWRlIHRvIHNob3cnLFxcclxcbiAgc2xpZGVMYWJlbDogIgogICAgICAgICAgICAgICAgICAgICAgICBiIiclcyBvZiAlcycsIC8vIFsgc2xpZGUgbnVtYmVyIF0gLyBbIHNsaWRlIHNpemUgXSIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG59O1xcclxcbiIsImltcG9ydCB7IEVWRU5UX01PVU5URUQsIEVWRU5UX1JFRlJFJwogICAgICAgICAgICAgICAgICAgICAgICBiIlNIIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgIgogICAgICAgICAgICAgICAgICAgICAgICBiIkV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJyIKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuaW1wb3J0IHsgQ29tcG9uZW50cywgT3B0aW9ucywgVHJhbnNpdGlvbkNvbScKICAgICAgICAgICAgICAgICAgICAgICAgYiJwb25lbnQgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgbmV4dFRpYyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJrLCBub29wIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBUaGUgY29tcG9uZW50IGZvciB0aGUgZmFkZSB0cmFuc2l0aW9uLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBUcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNpdGlvbiBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gRmFkZSggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zOiBPcHRpb25zICk6IFRyYW5zaXRpb25Db21wb25lbnQge1xcclxcbiAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHsgU2xpZGVzIH0gPSBDb21wb25lbnRzO1xcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIEV2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZSggU3BsaWRlICkub24oIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVGUkVTSCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgXSwgaW5pdCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lhbGl6ZXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqIE9mZnNldHMgYWxsIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgZm9yIHN0YWNraW5nIHRoZW0gb250byB0aGUgaGVhZCBvZiB0aGUgbGlzdC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBUaGUgYG5leHRUaWNrYCBkaXNhYmxlcyB0aGUgaW5pdGlhbCBmYWRlIHRyYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aW9uIG9mIHRoZSBmaXJzdCBzbGlkZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGluaXQoKTogdm9pZCB7XFxyXFxuICAgIFNsaWRlcy5mb3JFYWNoKCBTbGlkZSA9PicKICAgICAgICAgICAgICAgICAgICAgICAgYiIge1xcclxcbiAgICAgIFNsaWRlLnN0eWxlKCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgYidYKC0keyAxMDAgKiBTbGlkZS5pbmRleCB9JSlgICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0YXJ0cyB0aGUgdHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQSBzbGlkZSBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gYmUgYWN0aXZlLlxcclxcbiAgICogQHBhcmFtIGRvbmUgIC0gVGhlIGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cmFuc2l0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzdGFydCggaW5kZXg6IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsIGRvbmU6ICgpID0+IHZvaWQgKTogdm9pZCB7XFxyXFxuICAgIFNsaWRlcy5zdHlsJwogICAgICAgICAgICAgICAgICAgICAgICBiImUoICd0cmFuc2l0aW9uJywgYG9wYWNpdHkgJHsgb3B0aW9ucy5zcGVlZCB9bXMgJHsgb3AiCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMuZWFzaW5nIH1gICk7XFxyXFxuICAgIG5leHRUaWNrKCBkb25lICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FydCxcXHJcXG4gICAgY2FuY2VsOiBub29wLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImltcG9ydCB7IFNMSURFIH0gZnJvbSBcJy4uLy4uL2NvbnN0YW50cy90eXBlc1wnO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9yIgogICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlIgogICAgICAgICAgICAgICAgICAgICAgICBiIi9TcGxpZGUnO1xcclxcbmltcG9ydCB7IENvbXBvbmVudHMsIE9wdGlvbnMsIFRyYW5zIgogICAgICAgICAgICAgICAgICAgICAgICBiIml0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBhYnMsIGFwcGx5LCBzdHlsZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCBmb3IgdGhlIHNsaWRlIHRyYW5zaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gQSBUcmFuc2l0aW9uIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBmdW5jdGlvbiBTbGlkZSggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IFRyYW5zaXRpb25Db21wb25lbnQgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGNvbnN0IHsgTW92ZSwgQ29udHJvbGxlciwgU2Nyb2xsIH0gPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cztcXHJcXG4gIGNvbnN0IHsgbGlzdCB9ID0gQ29tcG9uZW50cy5FbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuICBjb25zdCB0cmFuc2l0aW9uID0gYXBwbHkoIHN0eWxlLCBsaXN0LCAndCIKICAgICAgICAgICAgICAgICAgICAgICAgYiJyYW5zaXRpb24nICk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIHRoZSIKICAgICAgICAgICAgICAgICAgICAgICAgYicgYGRvbmVgIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAgICovXFxyXFxuICBsZXQgZW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NhbGxiYWNrOiAoKSA9PiB2b2lkO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIEV2ZW50SW50ZXJmYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSggU3BsaWRlICkuYmluZCggbGlzdCwgJ3RyYW5zaXRpb25lbmQnLCBlID0+IHtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgaWYgKCBlLnRhcmdldCA9PT0gbGlzdCAmJiBlbmRDYWxsYmFjayApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgICBjYW5jZWwoKTtcXHJcXG4gICAgICAgIGVuZENhbGxiYWNrKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogU3RhcnRzIHRoZSB0cmFuc2l0aW9uLlxcclxcbiAgICogVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidNb3ZlIGNvbXBvbmVudCBjYWxscyB0aGlzIG1ldGhvZCBqdXN0IGJlZm9yZSB0aGUgc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciBtb3Zlcy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBIGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5hdGlvbiBpbmRleC5cXHJcXG4gICAqIEBwYXJhbSBkb25lICAtIFRoZSBjYWxsYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2sgZnVuY3Rpb24gdGhhdCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZW5kcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gc3RhcnQoIGluZGV4OiBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyLCBkb25lOiAoKSA9PiB2b2lkICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luYXRpb24gPSBNb3ZlLnRvUG9zaXRpb24oIGluZGV4LCB0cnVlICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBwb3NpdGlvbiAgICA9IE1vdmUuZ2V0UG9zaXRpb24oKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHNwZWVkICAgICAgID0gZ2V0U3BlZWQoIGluZGV4ICk7XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoIGFicyggZGVzdGluYXRpb24gLSBwb3NpdGlvbiApID49IDEgJiYgc3BlZWQgPicKICAgICAgICAgICAgICAgICAgICAgICAgYic9IDEgKSB7XFxyXFxuICAgICAgaWYgKCBvcHRpb25zLnVzZVNjcm9sbCApIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBTY3JvbGwuc2Nyb2xsKCBkZXN0aW5hdGlvbiwgc3BlZWQsIGZhbHNlLCBkb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSApO1xcclxcbiAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICB0cmFuc2l0aW9uKCBgdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYW5zZm9ybSAkeyBzcGVlZCB9bXMgJHsgb3B0aW9ucy5lYXNpbmcgfWAgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgICBNb3ZlLnRyYW5zbGF0ZSggZGVzdGluYXRpb24sIHRydWUgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7XFxyXFxuICAgICAgfVxcclxcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbHNlIHtcXHJcXG4gICAgICBNb3ZlLmp1bXAoIGluZGV4ICk7XFxyXFxuICAgICAgZG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmUoKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICogQ2FuY2VscyB0aGUgdHJhbnNpdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiJuIGNhbmNlbCgpOiB2b2lkIHtcXHJcXG4gICAgdHJhbnNpdGlvbiggJycgKTtcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIFNjcm9sbC5jYW5jZWwoKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFJldHVybnMgdGhlIHRyYW5zaXRpb24gc3BlZWQuXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBpbmRleCAtIEEgZGVzdGluYXRpb24gaW5kZXguXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBnZXRTcGVlZCggaW5kZXg6IG51bWJlciApOiBudW1iZXIgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgY29uc3QgeyByZXdpbmRTcGVlZCB9ID0gb3B0aW9ucztcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGlmICggU3BsaWRlLmlzKCBTTElERSApICYmIHJld2luZFNwZWVkICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBjb25zdCBwcmV2ID0gQ29udHJvbGxlci5nZXRJbmRleCggdHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgKTtcXHJcXG4gICAgICBjb25zdCBlbmQgID0gQ29udHJvbGxlci5nZXRFbmQoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgICAgaWYgKCAoIHByZXYgPT09IDAgJiYgaW5kZXggPj0gZW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHx8ICggcHJldiA+PSBlbmQgJiYgaW5kZXggPT09IDAgKSApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gcmV3aW5kU3BlZWQ7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICByZXR1cm4gb3B0aW9ucy5zcGVlZDtcXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4gICAgc3RhcnQsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjYW5jZWwsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgKiBhcyBDJwogICAgICAgICAgICAgICAgICAgICAgICBiIm9tcG9uZW50Q29uc3RydWN0b3JzIGZyb20gJy4uLy4uL2NvbXBvbmVudHMnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICBiIm5pbXBvcnQgeyBTbGlkZU1hdGNoZXIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL1NsaWQiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZXMvU2xpZGVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU19JTklUSUFMSVpFRCB9IGZyb20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW1wb3J0IHsgREVGQVVMVFMiCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RlZmF1bHRzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfREVTVFJPWSwgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVBRFksIEVWRU5UX1JFRicKICAgICAgICAgICAgICAgICAgICAgICAgYiJSRVNIIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0ICIKICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IERBVEFfQVRUUklCVVRFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG5pbXBvcnQgeyBDUkVBVEVELCBERVNUUk9ZRUQsIElETEUsIFNUQVRFUyB9IGZyb20gJyIKICAgICAgICAgICAgICAgICAgICAgICAgYiIuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBGQURFIH0gZnJvbSIKICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlciIKICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlLCBFdmVudEludGVyZmFjZU9iamVjdCwgU3RhdGUsIFN0YXRlT2JqZWN0IH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgRmFkZSwgU2xpZGUgIgogICAgICAgICAgICAgICAgICAgICAgICBiIn0gZnJvbSAnLi4vLi4vdHJhbnNpdGlvbnMnO1xcclxcbmltcG9ydCB7IEFueUZ1bmN0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiwgQ29tcG9uZW50Q29uc3RydWN0b3IsIENvbXBvbmVudHMsIEV2ZW50TWFwLCBPcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiaW9ucywgU3luY1RhcmdldCB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQiCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHsgYWRkQ2xhc3MsIGFzc2VydCwgYXNzaWduLCBlbXB0eSwgZm9yT3duLCBnZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYiJidXRlLCBpc1N0cmluZywgbWVyZ2UsIHF1ZXJ5LCBzbGljZSB9IGZyb20gJy4uLy4uL3V0IgogICAgICAgICAgICAgICAgICAgICAgICBiImlscyc7XFxyXFxuaW1wb3J0IHsgQVJJQV9MQUJFTCwgQVJJQV9MQUJFTExFREJZIH0gIgogICAgICAgICAgICAgICAgICAgICAgICBiImZyb20gJy4uLy4uL2NvbnN0YW50cy9hdHRyaWJ1dGVzJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVGhlIGZyb250ZW5kIGNsYXNzIGZvciB0aGUgU3BsaWRlIHNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGNsYXNzIFNwbGlkZSB7XFxyXFxuICAvKipcXHJcXG4gICAqIENoYW5nZXMgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWZhdWx0IG9wdGlvbnMgZm9yIGFsbCBTcGxpZGUgaW5zdGFuY2VzLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgc3RhdGljIGRlZmF1bHRzOiBPcHRpb25zID0ge307XFxyXFxuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgLyoqXFxyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBzdGF0ZSBudW1iZXJzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgc3RhdGljIHJlYWRvbmx5IFNUQVRFUyA9IFNUQVRFUztcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSByb290IGVsZW1lbnQgd2hlcmUgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUgaXMgYXBwbGllZC5cXHJcXG4gICAqL1xcclxcbiAgcmVhZG9ubHkgcm9vdDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0hUTUxFbGVtZW50O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgRXZlbnRCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzT2JqZWN0IG9iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgcmVhZG9ubHkgZXZlbnQ6IEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZU9iamVjdCA9IEV2ZW50SW50ZXJmYWNlKCk7XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBhbGwgY29tcG9uZW50IG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RzLlxcclxcbiAgICovXFxyXFxuICByZWFkb25seSBDb21wb25lbnRzOiBDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cyA9IHt9IGFzIENvbXBvbmVudHM7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBUaGUgU3RhdGVPYmplY3Qgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICByZWFkb25seSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGU6IFN0YXRlT2JqZWN0ID0gU3RhdGUoIENSRUFURUQgKTtcXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIEFuIGFycmF5IHdpdGggU3luY1RhcmdldCBvYmplY3RzIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3BsaWRlIGluc3RhbmNlcyB0byBzeW5jIHdpdGguXFxyXFxuICAgKi9cXHJcXG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fkb25seSBzcGxpZGVzOiBTeW5jVGFyZ2V0W10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFRoZSBjdXJyZW50IG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIHJlYWRvbmx5IF9vOiBPcHRpb25zID0ge307XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBhbGwgY29tcG9uZW50cy5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIHByaXZhdGUgX0M6IENvbXBvbmVudHM7XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBleHRlbnNpb25zLlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgcHJpdmF0ZSBfRTogUmVjb3JkPHN0cmluZywgQ29tcG9uZW50Q29uc3RydWN0b3I+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHt9O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgVHJhbnNpdGlvbiBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBwcml2YXRlIF9UOiBDb21wb25lbnRDb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3RydWN0b3I7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBTcGxpZGUgY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0cnVjdG9yLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXQgIC0gVGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3RvciBmb3IgdGhlIHRhcmdldCBlbGVtZW50LCBvciB0aGUgZWxlbWVudCBpdHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xmLlxcclxcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbC4gQW4gb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB3aXRoIG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0cnVjdG9yKCB0YXJnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBzdHJpbmcgfCBIVE1MRWxlbWVudCwgb3B0aW9ucz86IE9wdGlvbnMgKSB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBjb25zdCByb290ID0gaXNTdHJpbmcoIHRhcmdldCApID8gcXVlcnk8SFRNTEVsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50PiggZG9jdW1lbnQsIHRhcmdldCApIDogdGFyZ2V0O1xcclxcbiAgICBhc3NlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KCByb290LCBgJHsgcm9vdCB9IGlzIGludmFsaWQuYCApO1xcclxcblxcclxcbiAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcy5yb290ID0gcm9vdDtcXHJcXG5cXHJcXG4gICAgb3B0aW9ucyA9IG1lcmdlKCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGxhYmVsICAgICA6IGdldEF0dHJpYnV0ZSggcm9vdCwgQVJJQV9MQUJFTCApJwogICAgICAgICAgICAgICAgICAgICAgICBiIiB8fCAnJyxcXHJcXG4gICAgICBsYWJlbGxlZGJ5OiBnZXRBdHRyaWJ1dGUoIHJvb3QsIgogICAgICAgICAgICAgICAgICAgICAgICBiIiBBUklBX0xBQkVMTEVEQlkgKSB8fCAnJyxcXHJcXG4gICAgfSwgREVGQVVMVFMsIFNwIgogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30gKTtcXHJcXG5cXHJcXG4gICAgdHJ5IHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgbWVyZ2UoIG9wdGlvbnMsIEpTT04ucGFyc2UoIGdldEF0dHJpYnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUoIHJvb3QsIERBVEFfQVRUUklCVVRFICkgKSApO1xcclxcbiAgICB9IGNhdGNoICgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGUgKSB7XFxyXFxuICAgICAgYXNzZXJ0KCBmYWxzZSwgJ0ludmFsaWQgSlNPTicgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgdGhpcy5fbyA9IE9iamVjdC5jcmVhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCBtZXJnZSgge30sIG9wdGlvbnMgKSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogSW5pdGlhbGl6ZXMgdGhlIGluc3RhbmNlLlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gRXh0ZW5zaW9ucyAtIE9wdGlvbmFsLiBBbiBvYmplY3Qgd2l0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZXh0ZW5zaW9ucy5cXHJcXG4gICAqIEBwYXJhbSBUcmFuc2l0aW9uIC0gT3B0aW9uYScKICAgICAgICAgICAgICAgICAgICAgICAgYidsLiBBIFRyYW5zaXRpb24gY29tcG9uZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICBtb3VudCggRXh0ZW5zaW9ucz86IFJlY28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmQ8c3RyaW5nLCBDb21wb25lbnRDb25zdHJ1Y3Rvcj4sIFRyYW5zaXRpb24/OiBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50Q29uc3RydWN0b3IgKTogdGhpcyB7XFxyXFxuICAgIGNvbnN0IHsgc3RhdGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzIH0gPSB0aGlzO1xcclxcbiAgICBhc3NlcnQoIHN0YXRlLmlzKCBbICcKICAgICAgICAgICAgICAgICAgICAgICAgYiJDUkVBVEVELCBERVNUUk9ZRUQgXSApLCAnQWxyZWFkeSBtb3VudGVkIScgKTtcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIHN0YXRlLnNldCggQ1JFQVRFRCApO1xcclxcblxcclxcbiAgICB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5fQyA9IENvbXBvbmVudHM7XFxyXFxuICAgIHRoaXMuX1QgPSBUcmFuc2l0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYid8fCB0aGlzLl9UIHx8ICggdGhpcy5pcyggRkFERSApID8gRmFkZSA6IFNsaWRlICknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICB0aGlzLl9FID0gRXh0ZW5zaW9ucyB8fCB0aGlzLl9FO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgY29uc3QgQ29uc3RydWN0b3JzID0gYXNzaWduKCB7fSwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudENvbnN0cnVjdG9ycywgdGhpcy5fRSwgeyBUcmFuc2l0aW9uOiB0aGlzLl9UIH0gKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgIGZvck93biggQ29uc3RydWN0b3JzLCAoIENvbXBvbmVudCwgaycKICAgICAgICAgICAgICAgICAgICAgICAgYidleSApID0+IHtcXHJcXG4gICAgICBjb25zdCBjb21wb25lbnQgPSBDb21wb25lbnQoICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLCBDb21wb25lbnRzLCB0aGlzLl9vICk7XFxyXFxuICAgICAgQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYidbIGtleSBdID0gY29tcG9uZW50O1xcclxcbiAgICAgIGNvbXBvbmVudC5zZXR1cCAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcG9uZW50LnNldHVwKCk7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvck93biggQ29tcG9uZW50cywgY29tcG9uZW50ID0+IHtcXHJcXG4gICAgICBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50Lm1vdW50ICYmIGNvbXBvbmVudC5tb3VudCgpO1xcclxcbiAgICB9ICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0aGlzLmVtaXQoIEVWRU5UX01PVU5URUQgKTtcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGFkZENsYXNzKCB0aGlzLnJvb3QsIENMQVNTX0lOSVRJQUxJWkVEICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBzdGF0ZS5zZXQoIElETEUgKTtcXHJcXG4gICAgdGhpcy5lbWl0KCBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfUkVBRFkgKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTeW5jcyB0aGUgc2xpZGVyIHdpdGggdGhlIHByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292aWRlZCBvbmUuXFxyXFxuICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vmb3JlIHRoZSBgbW91bnQoKWAuXFxyXFxuICAgKlxcclxcbiAgICogQGV4YW1wbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlXFxyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyIHByaW1hcnkgICA9IG5ldyBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlKCk7XFxyXFxuICAgKiB2YXIgc2Vjb25kYXJ5ID0gbmV3IFNwbGlkZSgpO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBwcmltYXJ5LnN5bmMoIHNlY29uZGFyeSApO1xcclxcbiAgICogcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaW1hcnkubW91bnQoKTtcXHJcXG4gICAqIHNlY29uZGFyeS5tb3VudCgpO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAqIGBgYFxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBzcGxpZGUgLSBBIFNwbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5zdGFuY2UgdG8gc3luYyB3aXRoLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzYFxcclxcbiAgICovXFxyXFxuICBzeW5jKCBzcGxpZGU6IFNwbGlkZSApOiB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgIHRoaXMuc3BsaWRlcy5wdXNoKCB7IHNwbGlkZSB9ICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBzcGxpZGUuc3BsaWRlcy5wdXNoKCB7IHNwbGlkZTogdGhpcywgaXNQYXJlbnQ6IHRydScKICAgICAgICAgICAgICAgICAgICAgICAgYidlIH0gKTtcXHJcXG5cXHJcXG4gICAgaWYgKCB0aGlzLnN0YXRlLmlzKCBJRExFICkgKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIHRoaXMuX0MuU3luYy5yZW1vdW50KCk7XFxyXFxuICAgICAgc3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS5Db21wb25lbnRzLlN5bmMucmVtb3VudCgpO1xcclxcbiAgICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIE1vdmVzIHRoZSBzbGlkZXIgd2l0aCB0aGUgZm9sbG93aW5nIGNvbnRyb2wgcGF0dGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogfCBQYXR0ZXJuIHwgRGVzY3JpcHRpb24gfCcKICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIHwtLS18LS0tfFxcclxcbiAgICogfCBgaWAgfCBHb2VzIHRvIHRoZSBzJwogICAgICAgICAgICAgICAgICAgICAgICBiImxpZGUgYGlgIHxcXHJcXG4gICAqIHwgYCcrJHtpfSdgIHwgSW5jcmVtZW50cyB0aGUgIgogICAgICAgICAgICAgICAgICAgICAgICBiInNsaWRlIGluZGV4IGJ5IGBpYCB8XFxyXFxuICAgKiB8IGAnLSR7aX0nYCB8IERlY3JlIgogICAgICAgICAgICAgICAgICAgICAgICBiIm1lbnRzIHRoZSBzbGlkZSBpbmRleCBieSBgaWAgfFxcclxcbiAgICogfCBgJz4nYCB8IgogICAgICAgICAgICAgICAgICAgICAgICBiIiBHb2VzIHRvIHRoZSBuZXh0IHBhZ2UgfFxcclxcbiAgICogfCBgJzwnYCB8IEdvZXMgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIHRoZSBwcmV2aW91cyBwYWdlIHxcXHJcXG4gICAqIHwgYD4ke2l9YCB8IEdvZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIHRoZSBwYWdlIGBpYCB8XFxyXFxuICAgKlxcclxcbiAgICogSW4gbW9zdCBjYXNlcywnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIGAnPidgIGFuZCBgJzwnYCBub3RhdGlvbnMgYXJlIGVub3VnaCB0byBjb250cm9sIHRoZSIKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVyXFxyXFxuICAgKiBiZWNhdXNlIHRoZXkgcmVzcGVjdCBgcGVyUGFnZWAgYScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZCBgcGVyTW92ZWAgb3B0aW9ucy5cXHJcXG4gICAqXFxyXFxuICAgKiBAZXhhbXBsZVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIGBgYHRzXFxyXFxuICAgKiB2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgpO1xcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiAvLyBHb2VzIHRvIHRoZSBzbGlkZSAxOlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwbGlkZS5nbyggMSApO1xcclxcbiAgICpcXHJcXG4gICAqIC8vIEluY3JlbWVudHMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiZSBpbmRleDpcXHJcXG4gICAqIHNwbGlkZS5nbyggJysyJyApO1xcclxcbiAgICpcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiAvLyBHb2VzIHRvIHRoZSBuZXh0IHBhZ2U6XFxyXFxuICAgKiBzcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiLmdvKCAnPicgKTtcXHJcXG4gICAqXFxyXFxuICAgKiAvLyBHb2VzIHRvIHRoZSBwYWdlICIKICAgICAgICAgICAgICAgICAgICAgICAgYiIyOlxcclxcbiAgICogc3BsaWRlLmdvKCAnPjInICk7XFxyXFxuICAgKiBgYGBcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRyb2wgLSBBIGNvbnRyb2wgcGF0dGVybicKICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdGhpc2BcXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGdvKCBjb250cm9sOiBudW1iZXIgfCBzdHJpbmcgKTogdGhpcyB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLl9DLkNvbnRyb2xsZXIuZ28oIGNvbnRyb2wgKTtcXHJcXG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZWdpc3RlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGFuIGV2ZW50IGhhbmRsZXIuXFxyXFxuICAgKlxcclxcbiAgICogQGV4YW1wbGVcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyIHNwbGlkZSA9IG5ldyBTcGxpZGUoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogLy8gTGlzdGVucyB0byBhIHNpbmdsZSBldmVudDpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgKiBzcGxpZGUub24oICdtb3ZlJywgZnVuY3Rpb24oKSB7fSApO1xcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiAvLyBMaXN0ZW5zIHRvIG11bHRpcGxlIGV2ZW50czpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiKiBzcGxpZGUub24oICdtb3ZlIHJlc2l6ZScsIGZ1bmN0aW9uKCkge30gKTtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogLy8gQXBwZW5kcyBhIG5hbWVzcGFjZTpcXHJcXG4gICAqIHNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUub24oICdtb3ZlLm15TmFtZXNwYWNlIHJlc2l6ZS5teU5hbWVzcGFjZScsIGZ1bmN0IgogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbigpIHt9ICk7XFxyXFxuICAgKiBgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIGV2ZW50cyAgIC0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcyBzZXBhcmF0ZWQgYnkgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlcy4gVXNlIGEgZG90KC4pIHRvIGFwcGVuZCBhIG5hbWVzcGFjZS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICBvbjxLIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnRzOiBLLCBjYWxsYmFjazogRXZlbnRNYScKICAgICAgICAgICAgICAgICAgICAgICAgYidwWyBLIF0gKTogdGhpcztcXHJcXG4gIG9uKCBldmVudHM6IHN0cmluZyB8IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgYidbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6IHRoaXM7XFxyXFxuICBvbiggZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgIHRoaXMuZXZlbnQub24oIGV2ZW50cywgY2FsbGJhY2sgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgUmVtb3ZlcyB0aGUgcmVnaXN0ZXJlZCBhbGwgaGFuZGxlcnMgZm9yIHRoZSBzcGVjaWZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIGV2ZW50IG9yIGV2ZW50cy5cXHJcXG4gICAqIElmIHlvdSB3YW50IHRvIG9ubHkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbW92ZSBhIHBhcnRpY3VsYXIgaGFuZGxlciwgdXNlIG5hbWVzcGFjZSB0byBpZGVudGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnkgaXQuXFxyXFxuICAgKlxcclxcbiAgICogQGV4YW1wbGVcXHJcXG4gICAqIGBgYHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1xcclxcbiAgICogdmFyIHNwbGlkZSA9IG5ldyBTcGxpZGUoKTtcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogLy8gUmVtb3ZlcyBhbGwgaGFuZGxlcnMgYXNzaWduZWQgdG8gXFwibScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVcXCI6XFxyXFxuICAgKiBzcGxpZGUub2ZmKCBcJ21vdmVcJyApO1xcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiAvLyBPbmx5IHJlbW92ZXMgaGFuZGxlcnMgdGhhdCBiZWxvbmcgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRoZSBzcGVjaWZpZWQgbmFtZXNwYWNlOlxcclxcbiAgICogc3BsaWRlLm9mZiggJ20iCiAgICAgICAgICAgICAgICAgICAgICAgIGIib3ZlLm15TmFtZXNwYWNlJyApO1xcclxcbiAgICogYGBgXFxyXFxuICAgKlxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEBwYXJhbSBldmVudHMgLSBBbiBldmVudCBuYW1lIG9yIG5hbWVzIHNlcGFyYXRlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgYnkgc3BhY2VzLiBVc2UgYSBkb3QoLikgdG8gYXBwZW5kIGEgbmFtZXNwYWNlLlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2ZmPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50czogSyB8IEtbXSB8IHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpbmcgfCBzdHJpbmdbXSApOiB0aGlzIHtcXHJcXG4gICAgdGhpcy5ldmVudC5vZmYoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBldmVudHMgKTtcXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBFbWl0cyBhbiBldmVudCBhbmQgdHJpZ2dlcnMgcmVnaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZWQgaGFuZGxlcnMuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGV2ZW50IC0gQScKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGV2ZW50IG5hbWUgdG8gZW1pdC5cXHJcXG4gICAqIEBwYXJhbSBhcmdzICAtIE9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25hbC4gQW55IG51bWJlciBvZiBhcmd1bWVudHMgdG8gcGFzcyB0byBoYW5kbGVycy5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdGhpc2BcXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtaXQ8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnQ6IEssIC4uLmFyZ3M6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidQYXJhbWV0ZXJzPEV2ZW50TWFwWyBLIF0+ICk6IHRoaXM7XFxyXFxuICBlbWl0KCBldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10gKTogdGhpcztcXHJcXG4gIGVtaXQoICcKICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudDogc3RyaW5nICk6IHRoaXMge1xcclxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgYictbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtcywgcHJlZmVyLXNwcmVhZFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdGhpcy5ldmVudC5lbWl0KCBldmVudCwgLi4uc2xpY2UoIGFyZ3VtZW50cywgMSApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEluc2VydHMgYSBzbGlkZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAZXhhbXBsZVxcclxcbiAgICogYGBgdHNcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiB2YXIgc3BsaWRlID0gbmV3IFNwbGlkZSgpO1xcclxcbiAgICogc3BsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudCgpO1xcclxcbiAgICpcXHJcXG4gICAqIC8vIEFkZHMgdGhlIHNsaWRlIGJ5IHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiImUgSFRNTDpcXHJcXG4gICAqIHNwbGlkZS5hZGQoICc8bGk+PC9saT4gKTtcXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogLy8gb3IgYWRkcyB0aGUgZWxlbWVudDpcXHJcXG4gICAqIHNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYiIuYWRkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGknICkgKTtcXHJcXG4gICAqICIKICAgICAgICAgICAgICAgICAgICAgICAgYidgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc2xpZGVzIC0gQSBzbGlkZSBlbGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCwgYW4gSFRNTCBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgc2xpZGUsIG9yIGFuIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJheSB3aXRoIHRoZW0uXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggIC0gT3B0aW9uYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLiBBbiBpbmRleCB0byBpbnNlcnQgYSBzbGlkZSBhdC5cXHJcXG4gICAqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQHJldHVybiBgdGhpc2BcXHJcXG4gICAqL1xcclxcbiAgYWRkKCBzbGlkZXM6IHN0cmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cgfCBIVE1MRWxlbWVudCB8IEFycmF5PHN0cmluZyB8IEhUTUxFbGVtZW50PiwgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPzogbnVtYmVyICk6IHRoaXMge1xcclxcbiAgICB0aGlzLl9DLlNsaWRlcy5hZGQoIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMsIGluZGV4ICk7XFxyXFxuICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyBzbGlkZXMgdGhhdCBtYXRjaCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlIG1hdGNoZXJcXHJcXG4gICAqIHRoYXQgY2FuIGJlIGFuIGluZGV4LCBhbiBhcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG9yLCBvciBhbiBpdGVyYXRlZSBmdW5jdGlvbi5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG1hdGNoZXIgLSBBbiBpbmRleCwgYW4gYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmF5IHdpdGggaW5kaWNlcywgYSBzZWxlY3RvciBzdHJpbmcsIG9yIGFuIGl0ZXJhdGVlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgcmVtb3ZlKCBtYXRjaGVyOiBTbGlkZU1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RjaGVyICk6IHRoaXMge1xcclxcbiAgICB0aGlzLl9DLlNsaWRlcy5yZW1vdmUoIG1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RjaGVyICk7XFxyXFxuICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogQ2hlY2tzIHRoZSBzbGlkZXIgdHlwZS5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIHR5cGUgLSBBIHR5cGUgdG8gdGVzdC5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHR5cGUgbWF0Y2hlcyB0aGUgY3VycmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgb25lLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqL1xcclxcbiAgaXMoIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlOiBzdHJpbmcgKTogYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiB0aGlzLl9vLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlID09PSB0eXBlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmcmVzaGVzIHRoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NgXFxyXFxuICAgKi9cXHJcXG4gIHJlZnJlc2goKTogdGhpcyB7XFxyXFxuICAgIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmVtaXQoIEVWRU5UX1JFRlJFU0ggKTtcXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEZXN0cm95cyB0aGUgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY29tcGxldGVseSAtIE9wdGlvbmFsLicKICAgICAgICAgICAgICAgICAgICAgICAgYicgSWYgYHRydWVgLCBTcGxpZGUgd2lsbCBub3QgcmVtb3VudCB0aGUgc2xpZGVyIGJ5IGJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vha3BvaW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZGVzdHJveSggY29tcGxldGVseSA9IHRydWUgKTogdGhpcyB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjb25zdCB7IGV2ZW50LCBzdGF0ZSB9ID0gdGhpcztcXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGlmICggc3RhdGUuaXMoIENSRUFURUQgKSApIHtcXHJcXG4gICAgICAvLyBQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zdHBvbmVzIGRlc3RydWN0aW9uIHJlcXVlc3RlZCBiZWZvcmUgdGhlIHNsaWRlciBiZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21lcyByZWFkeS5cXHJcXG4gICAgICBFdmVudEludGVyZmFjZSggdGhpcyApLm9uKCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfUkVBRFksIHRoaXMuZGVzdHJveS5iaW5kKCB0aGlzLCBjb21wbGV0ZWx5ICkgKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgZm9yT3duKCB0aGlzLl9DLCBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50ID0+IHtcXHJcXG4gICAgICAgIGNvbXBvbmVudC5kZXN0cm95ICYmIGNvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnQuZGVzdHJveSggY29tcGxldGVseSApO1xcclxcbiAgICAgIH0sIHRydWUgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAgICAgZXZlbnQuZW1pdCggRVZFTlRfREVTVFJPWSApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBldmVudC5kZXN0cm95KCk7XFxyXFxuICAgICAgY29tcGxldGVseSAmJiBlbXB0eScKICAgICAgICAgICAgICAgICAgICAgICAgYicoIHRoaXMuc3BsaWRlcyApO1xcclxcbiAgICAgIHN0YXRlLnNldCggREVTVFJPWUVEICcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyBvcHRpb25zLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcmV0dXJuIEFuIG9iamVjdCB3aXRoIHRoZSBsYXRlc3Qgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuXFxyXFxuICAgKi9cXHJcXG4gIGdldCBvcHRpb25zKCk6IE9wdGlvbnMge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgcmV0dXJuIHRoaXMuX287XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBNZXJnZXMgb3B0aW9ucyB0byB0aGUgY3VycmVudCBvcHRpb25zIGFuZCBlbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgYHVwZGF0ZWRgIGV2ZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyAtIEFuIG9iamVjdCB3aXRoIG5ldyBvcHRpb25zLlxcclxcbiAgICovXFxyXFxuICBzZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0IG9wdGlvbnMoIG9wdGlvbnM6IE9wdGlvbnMgKSB7XFxyXFxuICAgIHRoaXMuX0MuTScKICAgICAgICAgICAgICAgICAgICAgICAgYidlZGlhLnNldCggb3B0aW9ucywgdHJ1ZSwgdHJ1ZSApO1xcclxcbiAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNsaWRlcyB3aScKICAgICAgICAgICAgICAgICAgICAgICAgYid0aG91dCBjbG9uZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvZiBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHJldHVybiB0aGlzLl9DLlNsaWRlcy5nZXRMZW5ndGgoIHRydWUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGFjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpdmUgc2xpZGUgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgYWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZSBzbGlkZSBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZ2V0IGluZGV4KCk6IG51bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIge1xcclxcbiAgICByZXR1cm4gdGhpcy5fQy5Db250cm9sbGVyLmdldEluZGV4KCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgfVxcclxcbn1cXHJcXG4iXSwibmFtZXMiOlsiTUVESUFfUFJFRkVSU18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkVEVUNFRF9NT1RJT04iLCJNT1ZJTkciLCJTQ1JPTExJTkciLCJTVEFURVMiLCJDUkVBVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFRCIsIk1PVU5URUQiLCJJRExFIiwiRFJBR0dJTkciLCJERVNUUk9ZRUQiLCJlbXB0eSIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJhcnJheSIsImxlbmd0aCIsInNsaWNlIiwiYXJyYXlMaWtlIiwic3RhcnQiLCJlbmQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXBwbHkiLCJmdW5jIiwiYmluZCIsImFyZycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bWVudHMiLCJub29wIiwibmV4dFRpY2siLCJzZXRUaW1lb3V0IiwicmFmIiwicmVxdWVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RBbmltYXRpb25GcmFtZSIsInR5cGVPZiIsInR5cGUiLCJzdWJqZWN0IiwiaXNPYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaXNOdWxsIiwiaXNBcnJheSIsImlzRnVuY3Rpb24iLCJpc1N0cmluZyIsImlzVW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaW5lZCIsImlzSFRNTEVsZW1lbnQiLCJvd25lckRvY3VtZW50IiwiZGVmYXVsdFZpZXciJwogICAgICAgICAgICAgICAgICAgICAgICBiJywid2luZG93IiwiSFRNTEVsZW1lbnQiLCJlIiwidG9BcnJheSIsInZhbHVlIiwiZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2giLCJ2YWx1ZXMiLCJpdGVyYXRlZSIsImluY2x1ZGVzIiwiaW5kZXhPZiIsInB1c2giLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciaXRlbXMiLCJ0b2dnbGVDbGFzcyIsImVsbSIsImNsYXNzZXMiLCJhZGQiLCJuYW1lIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzTGlzdCIsImFkZENsYXNzIiwic3BsaXQiLCJhcHBlbmQiLCJwYXJlbnQiLCJjaGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGRyZW4iLCJhcHBlbmRDaGlsZCIsImJlZm9yZSIsIm5vZGVzIiwicmVmIiwibm9kZSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJlbnROb2RlIiwiaW5zZXJ0QmVmb3JlIiwibWF0Y2hlcyIsInNlbGVjdG9yIiwiZmlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlciIsImNoaWxkIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJvd25LZXlzIiwiT2JqZWN0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImtleXMiLCJmb3JPd24iLCJvYmplY3QiLCJyaWdodCIsInJldmVyc2UiLCJrZXkiLCJhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzaWduIiwic291cmNlIiwibWVyZ2UiLCJvbWl0IiwicmVtb3ZlQXR0cmlidXRlIiwiZWxtJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MiLCJhdHRycyIsImF0dHIiLCJzZXRBdHRyaWJ1dGUiLCJTdHJpbmciLCJjcmVhdGUiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFnIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJwcm9wIiwiZ2V0QycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXB1dGVkU3R5bGUiLCJkaXNwbGF5IiwiZm9jdXMiLCJwcmV2ZW50U2Nyb2xsIiwiZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZSIsImhhc0NsYXNzIiwiY2xhc3NOYW1lIiwiY29udGFpbnMiLCJyZWN0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInInRhcmdldCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInJlbW92ZSIsInJlbW92ZUNoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZCIsInBhcnNlSHRtbCIsImh0bWwiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiYm9keSIsInByZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJxdWVyeSIsInF1ZXJ5U2VsZWN0b3IiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicicXVlcnlBbGwiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVtb3ZlQ2xhc3MiLCJ0aW1lT2YiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywidGltZVN0YW1wIiwidW5pdCIsIlBST0pFQ1RfQ09ERSIsIkRBVEFfQVRUUklCVVRFIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImFzc2VydCIsImNvbmRpdGlvbiIsIm1lc3NhZ2UiLCJFcnJvciIsIm1pbiIsIk1hdGgiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicibWF4IiwiZmxvb3IiLCJjZWlsIiwiYWJzIiwiYXBwcm94aW1hdGVseUVxdWFsIiwieCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ5IiwiZXBzaWxvbiIsImJldHdlZW4iLCJudW1iZXIiLCJleGNsdXNpdmUiLCJtaW5pbXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbSIsIm1heGltdW0iLCJjbGFtcCIsInNpZ24iLCJmb3JtYXQiLCJzdHJpbmciLCJyZXBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZW1lbnRzIiwicmVwbGFjZW1lbnQiLCJyZXBsYWNlIiwicGFkIiwiaWRzIiwiRXZlbnRCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGVyIiwibGlzdGVuZXJzIiwiZm9yRWFjaEV2ZW50IiwidGFyZ2V0cyIsImV2ZW50cyInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJldmVudE5TIiwiZnJhZ21lbnQiLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJldmVudCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYiduYW1lc3BhY2UiLCJpc0V2ZW50VGFyZ2V0IiwicmVtb3ZlciIsInJlbW92ZUV2ZW50TGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInVuYmluZCIsImxpc3RlbmVyIiwiZGlzcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY3JlYXRlRXZlbnQiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciaW5pdEN1c3RvbUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImRlc3Ryb3kiLCJkYXRhIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX01PVU5URUQiLCJFVkVOVF9NT1ZFIiwiRVZFTlRfTU9WRUQiLCJFVkVOVF9DTEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0siLCJFVkVOVF9BQ1RJVkUiLCJFVkVOVF9JTkFDVElWRSIsIkVWRU5UX1ZJU0lCTEUiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciRVZFTlRfSElEREVOIiwiRVZFTlRfUkVGUkVTSCIsIkVWRU5UX1VQREFURUQiLCJFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUkVTSVpFIiwiRVZFTlRfUkVTSVpFRCIsIkVWRU5UX1NDUk9MTCIsIkVWRU5UX1NDUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTExFRCIsIkVWRU5UX0RFU1RST1kiLCJFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQiLCJFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfQVVUT1BMQVlfUExBWSIsIkVWRU5UX0FVVE9QTEFZX1BBVVNFIiwiRVZFTlRfTEFaJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1lMT0FEX0xPQURFRCIsIkVWRU5UX1NMSURFX0tFWURPV04iLCJFVkVOVF9TSElGVEVEIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIkV2ZW50SW50ZXJmYWNlIiwiU3BsaWRlIiwiYnVzIiwiY3JlYXRlRG9jdW1lbnRGcmFnbScKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQiLCJiaW5kZXIiLCJvbiIsImpvaW4iLCJvZmYiLCJlbWl0IiwiUmVxdWVzdEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbCIsImludGVydmFsIiwib25JbnRlcnZhbCIsIm9uVXBkYXRlIiwibGltaXQiLCJzdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRUaW1lIiwiaWQiLCJub3ciLCJEYXRlIiwicmF0ZSIsInBhdXNlZCIsImNvdW50IiwidScKICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZSIsInBhdXNlIiwiY2FuY2VsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJyZXN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lIiwicmV3aW5kIiwic2V0IiwidGltZSIsImlzUGF1c2VkIiwiU3RhdGUiLCJpbml0aWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbFN0YXRlIiwic3RhdGUiLCJpcyIsInN0YXRlcyIsIkFSUk9XIiwiQVJST1dfTEVGVCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPV19SSUdIVCIsIkFSUk9XX1VQIiwiQVJST1dfRE9XTiIsIlRUQiIsIk9SSUVOVEFUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTl9NQVAiLCJ3aWR0aCIsImxlZnQiLCJYIiwiWSIsIkFycm93TGVmdCIsIkFycm93UmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0IiwiUk9MRSIsIlRBQl9JTkRFWCIsIkFSSUFfUFJFRklYIiwiQVJJQV9DT05UUk9MUycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJBUklBX0NVUlJFTlQiLCJBUklBX1NFTEVDVEVEIiwiQVJJQV9MQUJFTCIsIkFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBQkVMTEVEQlkiLCJBUklBX0hJRERFTiIsIkFSSUFfT1JJRU5UQVRJT04iLCJBUklBX1InCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0xFREVTQ1JJUFRJT04iLCJBUklBX0xJVkUiLCJBUklBX0JVU1kiLCJBUklBX0FUT01JQycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJBTExfQVRUUklCVVRFUyIsIkNMQVNTX1BSRUZJWCIsIkNMQVNTX1JPT1QiLCJDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfVFJBQ0siLCJDTEFTU19MSVNUIiwiQ0xBU1NfU0xJREUiLCJDTEFTU19DTE9ORSIsIkMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19DT05UQUlORVIiLCJDTEFTU19BUlJPV1MiLCJDTEFTU19BUlJPVyIsIkNMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPV19QUkVWIiwiQ0xBU1NfQVJST1dfTkVYVCIsIkNMQVNTX1BBR0lOQVRJT04iLCJDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfUEFHSU5BVElPTl9QQUdFIiwiQ0xBU1NfUFJPR1JFU1NfQkFSIiwiQ0xBU1NfVE8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0dMRSIsIkNMQVNTX1NSIiwiQ0xBU1NfQUNUSVZFIiwiU1RBVFVTX0NMQVNTX1BSRUZJWCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJDTEFTU19QUkVWIiwiQ0xBU1NfTkVYVCIsIkNMQVNTX1ZJU0lCTEUiLCJDTEFTU19MJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BRElORyIsIkNMQVNTX0ZPQ1VTX0lOIiwiQ0xBU1NfT1ZFUkZMT1ciLCJTVEFUVVNfQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTRVMiLCJQT0lOVEVSX0RPV05fRVZFTlRTIiwiUE9JTlRFUl9NT1ZFX0VWRU5UUyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgYidQT0lOVEVSX1VQX0VWRU5UUyIsIlNMSURFIiwiTE9PUCIsIkZBREUiLCJTbGlkZSIsImluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RleCIsInNsaWRlSW5kZXgiLCJzbGlkZSIsImRlc3Ryb3llZCIsIkNvbXBvbmVudHMiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCIsImlzTmF2aWdhdGlvbiIsInVwZGF0ZU9uTW92ZSIsImkxOG4iLCJwYWdpbmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiIsInNsaWRlRm9jdXMiLCJyZXNvbHZlIiwiRGlyZWN0aW9uIiwic3R5bGVzIiwibGFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsIiwiaXNDbG9uZSIsImNvbnRhaW5lciIsImluaXROYXZpZ2F0aW9uIiwiY29udHJvbHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwic3BsaWRlcyIsIm1hcCIsInNwbGlkZSIsIlNsaWRlcyIsImdldEF0Iiwic2xpZGVYIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIm9uTW92ZSIsImN1cnIiLCJoaWRkZW4iLCJhY3RpdmUiLCJpc0FjdGl2ZSIsInNlbGYiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywidmlzaWJsZSIsInRyYWNrUmVjdCIsIkVsZW1lbnRzIiwidHJhY2siLCJzbGlkZVJlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiZm9jdXNhYmxlTm9kZXMiLCJhY3RpdmVFbGVtZW50IiwiY2xvbmVTdGF0dXMiLCJtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQiLCJzbGlkZUxhYmVsIiwidXNlQ29udGFpbmVyIiwiX3N0eWxlIiwiaXNXaXRoaW4iJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiZnJvbSIsImRpc3RhbmNlIiwiZGlmZiIsIklOVEVSVkFMX0RBVEFfQVRUUklCVVRFIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIlNDUk9MTF9MSVNURU5FUl9PUFRJT05TIiwicGFzc2l2ZSIsImNhcHR1cmUiLCJOT1JNQScKICAgICAgICAgICAgICAgICAgICAgICAgYidMSVpBVElPTl9NQVAiLCJTcGFjZWJhciIsIlJpZ2h0IiwiTGVmdCIsIlVwIiwiRG93biIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJub3JtYWxpemVLZXkiLCJLRVlCT0FSRF9FVkVOVCIsIlNSQ19EQVRBX0FUVFJJQlVURSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJTUkNTRVRfREFUQV9BVFRSSUJVVEUiLCJJTUFHRV9TRUxFQ1RPUiIsIlRSSUdHRVJfSycKICAgICAgICAgICAgICAgICAgICAgICAgYidFWVMiLCJicmVha3BvaW50cyIsInJlZHVjZWRNb3Rpb24iLCJxdWVyaWVzIiwiY29tcGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbHkiLCJyZWdpc3RlciIsInF1ZXJ5TGlzdCIsIm1hdGNoTWVkaWEiLCJkaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwibWVyZ2VkIiwicmVkdWNlIiwiZW50cnkiLCJyZWZyZXNoIiwib3B0cyIsImJhc2UiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicibm90aWZ5IiwiZ2V0UHJvdG90eXBlT2YiLCJzZXR1cCIsImlzTWluIiwibWVkaWFRdWVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3kiLCJzb3J0IiwibiIsIm0iLCJlbmFibGUiLCJheGlzT25seSIsIm1hdGNoIiwib2Zmc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCIsInRvTG93ZXJDYXNlIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJvcmllbnQiLCJsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCIsImlzVXNpbmdLZXkiLCJlbGVtZW50cyIsInNsaWRlcyIsInJvb3RDbGFzc2VzIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrQ2xhc3NlcyIsImZpbmQiLCJhcnJvd3MiLCJwcmV2IiwibmV4dCIsImJhciIsInQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2dnbGUiLCJwcmVmaXgiLCJyb2xlIiwidGFnTmFtZSIsImNhcm91c2VsIiwiY29uY2F0IicKICAgICAgICAgICAgICAgICAgICAgICAgYicsImdldENsYXNzZXMiLCJsYWJlbGxlZGJ5IiwiY2xvc2VzdCIsIm5vZGVUeXBlIiwicGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEVsZW1lbnQiLCJkcmFnIiwiaW5pdCIsIlNsaWRlMSIsIlNsaWRlMiIsImdldCIsImUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGNsdWRlQ2xvbmVzIiwibWF0Y2hlciIsImdldEluIiwicGFnZSIsIkNvbnRyb2xsZXIiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicidG9JbmRleCIsImhhc0ZvY3VzIiwicGVyUGFnZSIsImZvckVhY2hJdGVtIiwiaW1hZ2VzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsImltZyIsInJlbW92ZU5vZGUiLCJnZXRMZW5ndGgiLCJpc0Vub3VnaCIsInZlcnRpY2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbCIsInJvb3RSZWN0Iiwib3ZlcmZsb3ciLCJzdHlsZVNsaWRlcyIsImNzc1BhZGRpbmciLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicicmVzaXplIiwiZm9yY2UiLCJuZXdSZWN0IiwiaGVpZ2h0IiwiY3NzSGVpZ2h0IiwiZ2FwJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsImF1dG9XaWR0aCIsImZpeGVkV2lkdGgiLCJjc3NTbGlkZVNpemUiLCJmaXhlZEhlaWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaHQiLCJhdXRvSGVpZ2h0IiwiaXNPdmVyZmxvdyIsInBhZGRpbmciLCJoZWlnaHRSYXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJsaXN0U2l6ZSIsInNsaWRlU2l6ZSIsIndpdGhvdXRHYXAiLCJnZXRHYXAiLCJ0b3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xTaXplIiwic2xpZGVyU2l6ZSIsInBhcnNlRmxvYXQiLCJkdXJhdGlvbiIsImdldFBhZGQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nIiwiY2xvbmVDb3VudCIsImNsb25lcyIsInJlbW91bnQiLCJvYnNlcnZlIiwiY29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1dGVDbG9uZUNvdW50IiwiZ2VuZXJhdGUiLCJpc0hlYWQiLCJjbG9uZSIsImNsb25lTm9kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiLCJMYXlvdXQiLCJmaXhlZFNpemUiLCJUcmFuc2l0aW9uIiwicmVwb3NpdGlvbiIsImknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0J1c3kiLCJTY3JvbGwiLCJqdW1wIiwidHJhbnNsYXRlIiwidG9Qb3NpdGlvbiIsInBvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbiIsInByZXZlbnRMb29wIiwiZGVzdGluYXRpb24iLCJleGNlZWRlZE1heCIsImdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RFbmQiLCJzaGlmdCIsImJhY2t3YXJkcyIsImV4Y2VzcyIsImdldExpbWl0Iiwic2l6ZSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCJnZXRQb3NpdGlvbiIsIm1pbkRpc3RhbmNlIiwiSW5maW5pdHkiLCJpIiwidHJpbW1pbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnIiwidHJpbVNwYWNlIiwibW92ZSIsImRlc3QiLCJzaGlmdGVkIiwiZXhjZWVkZWRMaW1pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiLCJleGNlZWRlZE1pbiIsImVuZEluZGV4Iiwic2xpZGVDb3VudCIsInBlck1vdmUiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZSIsIm9taXRFbmQiLCJpc0xvb3AiLCJpc1NsaWRlIiwiZ2V0TmV4dCIsImdldEFkaicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2VudCIsImdldFByZXYiLCJjdXJySW5kZXgiLCJwcmV2SW5kZXgiLCJvblJlc2l6ZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiY29tcHV0ZURlc3RJbmRleCIsImxvb3AiLCJzbmFwUGFnZSIsInRvUGFnZSIsInNldEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCIsIndhaXRGb3JUcmFuc2l0aW9uIiwiZ28iLCJjb250cm9sIiwiYWxsb3dTYW1lSScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4IiwiaW5kaWNhdG9yIiwiX3JlZiIsInNjcm9sbCIsInNuYXAiLCJnZXRJbmRleCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJ0b0Rlc3QiLCJjcmVhdGVkIiwid3JhcHBlckNsYXNzZXMiLCJwbGFjZWhvbGRlciIsIncnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFwcGVyIiwiZW5hYmxlZCIsImNyZWF0ZUFycm93IiwiYXJyb3ciLCJhcnJvd1BhdGgiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicibmV4dEluZGV4IiwicHJldkxhYmVsIiwibmV4dExhYmVsIiwibGFzdCIsImZpcnN0IiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc2FibGVkIiwiaG92ZXJlZCIsImZvY3VzZWQiLCJhdXRvcGxheSIsInN0b3BwZWQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxheSIsInJlc2V0UHJvZ3Jlc3MiLCJzdG9wIiwiYXV0b1RvZ2dsZSIsInBhdXNlT25IbycKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXIiLCJwYXVzZU9uRm9jdXMiLCJjb3ZlciIsInNyYyIsImZyaWN0aW9uIiwib25TY3JvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xsZWQiLCJub0NvbnN0cmFpbiIsIm5vRGlzdGFuY2UiLCJjbGVhciIsIm9uRW5kIiwidG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwidCIsImVhc2luZ0Z1bmMiLCJwb3ciLCJiYXNlUG9zaXRpb24iLCJiYXNlRXZlbnQiLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicicHJldkJhc2VFdmVudCIsImlzRnJlZSIsImRyYWdnaW5nIiwiY2xpY2tQcmV2ZW50ZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJywiTWVkaWEiLCJleGNlZWRlZCIsImRpc2FibGUiLCJvblBvaW50ZXJEb3duIiwiaXNUb3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2giLCJub0RyYWciLCJpc1RvdWNoRXZlbnQiLCJidXR0b24iLCJvblBvaW50ZXJNb3ZlIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIm9uUG9pbnRlclVwIiwic2F2ZSIsInRocmVzaG9sZHMiLCJpc09iaiIsIm1vdXNlIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbmNlbGFibGUiLCJkaWZmQ29vcmQiLCJleHBpcmVkIiwiZGlmZlRpbWUiLCJoYXNFeGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWQiLCJkcmFnTWluVGhyZXNob2xkIiwidG91Y2giLCJ2ZWxvY2l0eSIsImZsaWNrUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd2VyIiwiZmxpY2tNYXhQYWdlcyIsInJld2luZEJ5RHJhZyIsIm9uQ2xpY2siLCJvcnRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29nb25hbCIsImNvb3JkT2YiLCJnZXRCYXNlRXZlbnQiLCJjaGFuZ2VkVG91Y2hlcyIsIlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VjaEV2ZW50IiwiaXNEcmFnZ2luZyIsImtleWJvYXJkIiwib25LZXlkb3duIiwiX2RpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlZCIsImlzU2VxdWVudGlhbCIsImxhenlMb2FkIiwiZW50cmllcyIsInNyY3NldCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJzcGlubmVyIiwibG9hZE5leHQiLCJjaGVjayIsInByZWxvYWRQYWdlcyIsImxvYWQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25Mb2FkIiwicGFnaW5hdGlvbkNsYXNzZXMiLCJkaXIiLCJnZXREaXJlY3Rpb24iLCJuZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dFBhZ2UiLCJpdGVtIiwicGFnaW5hdGlvbkRpcmVjdGlvbiIsInNlbGVjdCIsImxpIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzIiwidGV4dCIsInBhZ2VYIiwicGFnaW5hdGlvbktleWJvYXJkIiwiaXNQYXJlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwic3luYyIsImxhc3RUaW1lIiwib25XaGVlbCIsInNsZWVwIiwiZGVsdGFZIiwid2hlZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsTWluVGhyZXNob2xkIiwid2hlZWxTbGVlcCIsInJlbGVhc2VXaGVlbCIsIndoZWVsIiwiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpdmUiLCJzciIsIkF1dG9wbGF5IiwidGV4dENvbnRlbnQiLCJERUZBVUxUUyIsInNwZWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCIsImVhc2luZyIsInJld2luZFNwZWVkIiwiRmFkZSIsImRvbmUiLCJlbmRDYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJ0cmFuc2l0aW9uIiwidXNlU2Nyb2xsIiwidGhpcyIsIl9vIiwiX0UiLCJfU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIsImRlZmF1bHRzIiwiSlNPTiIsInBhcnNlIiwiRXh0ZW5zaW9ucyIsIl90aGlzIiwiX0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiX1QiLCJDb21wb25lbnRDb25zdHJ1Y3RvcnMiLCJDb21wb25lbnQiLCJjb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwiU3luYyIsIl90aGlzJGV2ZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O3lDQUtPLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNQSxFQUErQixtQ0NhL0JDLEVBQVMsRUFLVEMsR0FBWSxFQWlCWkMsRUFBUyxDQUNwQkMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFFBdENxQixFQXVDckJDLFFBbENxQixFQW1DckJDLEtBOUJrQixFQStCbEJMLE9BQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNBQyxVQUFBQSxHQUNBSyxTQWxCc0IsRUFtQnRCQyxVQWR1QixDQU9ILEVDbkNmLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTQyxFQUFPQyxHQUNyQkEsRUFBTUMsT0FBUyxDQUNqQixDQ0VnQixTQUFBQyxFQUFVQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBeUJDLEVBQWdCQyxHQUNqRSxPQUFPQyxNQUFNQyxVQUFVTCxNQUFNTSxLQUFNTCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBV0MsRUFBT0MsQ0FBOUMsQ0FDVCxDQ2FPLFNBQVNJLEVBQU9DLEdBRXJCLE9BQU9BLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FLQyxLQUFMRixNQUFBQyxFQUFXLENBQUEsTUFBU1IsT0FBQUEsRUFBT1UsVUFBVyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWCxFQUFsQyxDQUNGLENDeEJvQixTQUFQQyxNQ0tOLElBQU1DLEVBQXVFQyxXQ0w3RSxTQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBU0MsRUFBS04sR0FDbkIsT0FBT08sc0JBQXVCUCxFQUNoQyxDQ09BLFNBQVNRLEVBQVFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFjQyxHQUM3QixPQUFPLE9BQU9BLElBQVlELENBQzVCLENBU08sU0FBU0UsR0FBVUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQ3hCLE1BQU8sQ0FBRUUsRUFBUUYsQ0FBQSxHQUFhRixFQUFRLFNBQVVFLENBQWxCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUNoQyxDQVNPLElBQU1HLEVBQXFEakIsTUFBTWlCLFFBUzNEQyxFQUE2RGYsRUFBT1MsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVEsVUFBUixFQVNwRU8sRUFBc0RoQixFQUFPUyxFQUFRLFFBQVIsRUFTN0RRLEdBQTQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRGpCLEVBQU9TLEVBQVEsV0FBUixFQVN6RSxTQUFTSSxFQUFRRixHQUN0QixPQUFtQixPQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWkEsQ0FDVCxDQVVPLFNBQVNPLEVBQWVQLEdBQ3pCLElBQ0YsT0FBT0EsYUFBdUJBLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FrQlEsY0FBY0MsYUFBZUMsUUFBU0MsV0FHeEYsT0FGVUMsR0FDRCxNQUFBLENBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1QsQ0FDRixDQzlFTyxTQUFTQyxFQUFZQyxHQUMxQixPQUFPWCxFQUFTVyxDQUFBLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidVQSxFQUFRLENBQUVBLEVBQ3RDLENDSGdCLFNBQUFDLEVBQVlDLEVBQWlCQyxHQUNsQ0osJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUFHLENBQUEsRUFBU0QsUUFBU0UsQ0FBbEIsQ0FDWCxDQ0ZnQixTQUFBQyxFQUFhdEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVlrQyxHQUNoQyxNQUF5QixDQUFBLEVBQXpCbEMsRUFBTXVDLFFBQVNMLENBQWYsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1QsQ0NBZ0IsU0FBQU0sRUFBU3hDLEVBQVl5QyxHQUU1QixPQURQekMsRUFBTXdDLEtBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FOeEMsTUFBQUEsRUFBZWlDLEVBQVNRLENBQUEsQ0FBeEIsRUFDT3pDLENBQ1QsQ0NKZ0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQUEwQyxFQUFhQyxFQUFjQyxFQUE0QkMsR0FDaEVGLEdBQ0hSLEVBQVNTLEVBQVMsUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVFFLEdBQ25CQSxHQUNISCxFQUFJSSxVQUFXRixFQUFNLE1BQVEsVUFBWUMsQ0FBekMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBRUYsQ0FKRixDQU1KLENDUmdCLFNBQUFFLEVBQVVMLEVBQWNDLEdBQ3pCRixFQUFBQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBS2xCLEVBQVVtQixHQUFZQSxFQUFRSyxNQUFPLEdBQWYsRUFBdUJMLEVBQVMsQ0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBM0QsQ0FDZixDQ0hnQixTQUFBTSxFQUFRQyxFQUFpQkMsR0FDdkNqQixFQUFTaUIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVVELEVBQU9FLFlBQVkxQyxLQUFNd0MsQ0FBekIsQ0FBbkIsQ0FDRixDQ0ZnQixTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUcsRUFBUUMsRUFBc0JDLEdBQzVDckIsRUFBU29CLEVBQU8sU0FBUUUsR0FDaEIsSUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidOLEdBQVdLLEdBQU9DLEdBQU9DLFdBRTFCUCxHQUNJQSxFQUFBUSxhQUFjRixFQUFNRCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBcEIsQ0FFVCxDQU5GLENBT0YsQ0NOZ0IsU0FBQUksR0FBU2pCLEVBQTRCa0IsR0FDNUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQUFsQyxFQUFlZ0IsQ0FBZixJQUEwQkEsRUFBQSxtQkFBOEJBLEVBQUlpQixTQUFVcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidELEtBQU1tQyxFQUFLa0IsQ0FBdkQsQ0FDbkMsQ0NEZ0IsU0FBQVQsRUFBaUNELEVBQXFCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1UsR0FDOURULEVBQVdELEVBQVNqRCxFQUFPaUQsRUFBT0MsUUFBZCxFQUFrQyxHQUNyRCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBQVMsRUFBV1QsRUFBU1UsT0FBUSxTQUFBQyxHQUFBLE9BQVNILEdBQVNHLEVBQU9GLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUF6QixDQUFqQlQsRUFBeURBLENBQzdFLENDSmdCLFNBQUFXLEdBQThCWixFQUFxQlUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ2pFLE9BQU9BLEVBQVdULEVBQWFELEVBQVFVLENBQVIsRUFBb0IsR0FBTVYsRUFBT2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGlCQUNsRSxDQ1ZPLElBQU1DLEVBQVVDLE9BQU9DLEtDU2QsU0FBQUMsRUFDZEMsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidoQyxFQUNBaUMsR0FFS0QsSUFDREMsRUFBUUwsRUFBU0ksQ0FBQSxFQUFTRSxRQUFsQixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBOEJOLEVBQVNJLENBQUEsR0FBV2xDLFFBQVMsU0FBT3FDLEdBQ2xFLGNBQVJBLEdBQXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQm5DLEVBQVVnQyxFQUFRRyxHQUFPQSxDQUF6QixDQUN2QixDQUZBLENBTU4sQ0NrQk8sUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVNDLEdBQTBCSixHQVFqQyxPQU5QbkUsRUFBT1UsVUFBVyxDQUFsQixFQUFzQnVCLFFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTLFNBQVV1QyxHQUMvQk4sRUFBQU0sRUFBUSxTQUFFeEMsRUFBT3NDLEdBQ3ZCSCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUcsR0FBUUUsRUFBUUYsRUFDeEIsQ0FGTSxDQUdSLENBSkYsRUFNT0gsQ0FDVCxDQ0NPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFTTSxFQUF5Qk4sR0FjaEMsT0FaUG5FLEVBQU9VLFVBQVcsQ0FBbEIsRUFBc0J1QixRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUyxTQUFVdUMsR0FDL0JOLEVBQUFNLEVBQVEsU0FBRXhDLEVBQU9zQyxHQUNsQmpELEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTVyxDQUFULEVBQ0ttQyxFQUFBRyxHQUFRdEMsRUFBTWhDLE1BQWQsRUFDRW1CLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidVYSxDQUFBLEVBQ3BCbUMsRUFBUUcsR0FBUUcsRUFBTyxHQUFJdEQsR0FBVWdELEVBQVFHJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFSLEVBQWtCSCxFQUFRRyxHQUFRLEdBQUl0QyxDQUEzRCxFQUVoQm1DLEVBQVFHLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRdEMsQ0FFbEIsQ0FSTSxDQVNSLENBVkYsRUFZT21DLENBQ1QsQ0N6RGdCLFNBQUFPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFNUCxFQUFnQkYsR0FDcENoQyxFQUFTZ0MsR0FBUUYsRUFBU0ksQ0FBVCxFQUFtQixTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT0csR0FDekMsT0FBT0gsRUFBUUcsRUFDZixDQUZGLENBR0YsQ0NMZ0IsU0FBQUssRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWlCQyxFQUEyQkMsR0FDMUQ1QyxFQUFTMkMsRUFBTSxTQUFPbkMsR0FDcEJSLEVBQVM0QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBTyxTQUFRQyxHQUNmckMsR0FBQUEsRUFBSWtDLGdCQUFpQkcsQ0FBckIsQ0FDUCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FGRixDQUdBLENBSkYsQ0FLRixDQ0VnQixTQUFBQyxFQUNkSCxFQUNBQyxFQUNBN0MsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUtiLEdBQVUwRCxDQUFWLEVBQ0tYLEVBQUFXLEVBQU8sU0FBRTdDLEVBQU9ZLEdBQ1JtQycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQUgsRUFBTWhDLEVBQU1aLENBQVosQ0FDZCxDQUZNLEVBSVJDLEVBQVMyQyxFQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFPbkMsR0FDcEJyQixFQUFRWSxDQUFSLEdBQTZCLEtBQVZBLEVBQWUyQyxFQUFpQmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxFQUFLb0MsQ0FBTCxFQUFlcEMsRUFBSXNDLGFBQWNGLEVBQU9HLE9BQVFoRCxDQUFSLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUF6QixDQUNsRSxDQUZGLENBSUosQ0NOZ0IsU0FBQWlELEVBQ2RDLEVBQ0FMLEVBQ0E1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsR0FFTVIsRUFBTTBDLFNBQVNDLGNBQWVGLENBQXhCLEVBUUwsT0FORkwsSUFDT3RELEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBc0QsQ0FBQSxFQUFVL0IsRUFBeUJpQyxHQUFmdEMsRUFBS29DLENBQUwsRUFHdEI1QicKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBQUQsRUFBUUMsRUFBUVIsQ0FBaEIsRUFFSEEsQ0FDVCxDQ1pnQixTQUFBNEMsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Q1QyxFQUNBNkMsRUFDQXRELEdBRUssR0FBQVIsR0FBYVEsQ0FBYixFQUNJLE9BQUF1RCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUJBQWtCOUMsQ0FBbEIsRUFBeUI2QyxHQUczQmxFLEVBQVFZLENBQUEsSUFDVFMsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYic0QyxNQUFPQyxNQUFhdEQsRUFFNUIsQ0M5QmdCLFNBQUF3RCxHQUFTL0MsRUFBa0IrQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDbENILEVBQUE1QyxFQUFLLFVBQVcrQyxDQUFoQixDQUNULENDTk8sU0FBU0MsR0FBT2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCxHQUNoQkEsRUFBQSxXQUFpQkEsWUFBakIsR0FBeUNBLEVBQUlnRCxNQUFPLENBQUVDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjQUFlLENBQUEsQ0FBakIsQ0FBWCxDQUNoRCxDQ0RnQixTQUFBQyxFQUFjbEQsRUFBY3FDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNuQyxPQUFBckMsRUFBSWtELGFBQWNiLENBQWxCLENBQ1QsQ0NBZ0IsU0FBQWMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVVuRCxFQUFjb0QsR0FDdEMsT0FBT3BELEdBQU9BLEVBQUlJLFVBQVVpRCxTQUFVRCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBeEIsQ0FDaEIsQ0NMTyxTQUFTRSxFQUFNQyxHQUNwQixPQUFPQSxFQUFPQyxzQkFBZCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRixDQ0NPLFNBQVNDLEVBQVE3QyxHQUN0QnBCLEVBQVNvQixFQUFPLFNBQVFFLEdBQ2onCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkEsR0FBUUEsRUFBS0MsWUFDWEQsRUFBQUMsV0FBVzJDLFlBQWE1QyxDQUF4QixDQUVQLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUpGLENBS0YsQ0NKTyxTQUFTNkMsR0FBa0NDLEdBQ3pDLE9BQUF4QyxJQUFVLElBQUl5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsV0FBWUMsZ0JBQWlCRixFQUFNLFdBQXZDLEVBQXFERyxJQUEvRCxDQUNULENDTmdCLFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQyxFQUFTM0UsRUFBVTRFLEdBQ2pDNUUsRUFBRTZFLGVBQUYsRUFFS0QsSUFDSDVFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFFNEUsZ0JBQUYsRUFDQTVFLEVBQUU4RSx5QkFBRixFQUVKLENDTGdCLFNBQUFDLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FvQzVELEVBQTRCVSxHQUN2RSxPQUFBVixHQUFVQSxFQUFPNkQsY0FBZW5ELENBQXRCLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNuQixDQ0NnQixTQUFBb0QsR0FBdUM5RCxFQUE0QlUsR0FDakYsT0FBT0EsRUFBVzNELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFVaUQsRUFBTytELGlCQUFrQnJELENBQXpCLENBQUEsRUFBd0MsRUFDdEUsQ0NKZ0IsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQUFzRCxFQUFheEUsRUFBY0MsR0FDNUJGLEVBQUFDLEVBQUtDLEVBQVMsQ0FBQSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCxDQUNmLENDTk8sU0FBU3dFLEdBQVFwRixHQUN0QixPQUFPQSxFQUFFcUYsU0FDWCxDQycKICAgICAgICAgICAgICAgICAgICAgICAgYidJTyxTQUFTQyxFQUFNcEYsR0FDcEIsT0FBT1QsRUFBVVMsR0FBVUEsRUFBUUEsRUFBWUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVosS0FBeUIsRUFDOUQsQ0NSTyxJQUFNcUYsR0FBZSxTQU9mQyxVQUEwQkQsR0NIdkInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQUFFLEdBQVFDLEVBQWdCQyxHQUN0QyxHQUFLLENBQUVELEVBQ0wsTUFBTSxJQUFJRScKICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBWUwsSUFBQUEsU0FBbUJJLEdBQVcsR0FBcEQsQ0FFSixDQ2JPLElBQVFFLEVBQStCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsS0FBL0JELElBQUtFLEdBQTBCRCxLQUExQkMsSUFBS0MsR0FBcUJGLEtBQXJCRSxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0MsR0FBY0gsS0FBZEcsS0FBTUMsRUFBUUosS0FBUkksSUNZdEIsU0FBQUMsR0FBb0JDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFXQyxFQUFXQyxHQUNqRCxPQUFBSixFQUFLRSxFQUFJQyxDQUFULEVBQWVDLENBQ3hCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQ0hPLFNBQVNDLEdBQVNDLEVBQWdCSixFQUFXQyxFQUFXSSxHQUN2RCxJQUFBQyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVWIsRUFBS08sRUFBR0MsQ0FBSCxFQUNmTSxFQUFVWixHQUFLSyxFQUFHQyxDQUFILEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidyQixPQUFPSSxFQUNIQyxFQUFVRixHQUFVQSxFQUFTRyxFQUM3QkQsR0FBV0YsR0FBVUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQVVHLENBQ3JDLENDTGdCLFNBQUFDLEVBQU9KLEVBQWdCSixFQUFXQyxHQUMxQyxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUssRUFBVWIsRUFBS08sRUFBR0MsQ0FBSCxFQUNmTSxFQUFVWixHQUFLSyxFQUFHQyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBSCxFQUNyQixPQUFPUixFQUFLRSxHQUFLVyxFQUFTRixDQUFkLEVBQXdCRyxDQUF4QixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDZCxDQ1RPLFNBQVNFLEdBQU1ULEdBQ3BCLE9BQWMsRUFBSkEsSUFBYUEsRUFBSSxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInN0IsQ0NFZ0IsU0FBQVUsR0FBUUMsRUFBZ0JDLEdBSy9CLE9BSlA3RyxFQUFTNkcsRUFBYycKICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBZUMsR0FDcENGLEVBQVNBLEVBQU9HLFFBQVMsS0FBaEIsR0FBMEJELENBQTFCLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NULENBRkYsRUFJT0YsQ0FDVCxDQ1ZPLFNBQVNJLEdBQUtYLEdBQ25CLE9BQU9BLEVBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVVBLElBQUFBLEtBQWdCQSxDQUM1QyxDQ0RBLElBQU1ZLEdBQThCLEdDdUI3QixTQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBU0MsS0FLZCxJQUFJQyxFQUFvRixHQXVGL0UsU0FBQUMsRUFDUEMsRUFDQUMsRUFDQXBIJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUVBRixFQUFTcUgsRUFBUyxTQUFVdEQsR0FDaEJBLEdBQUEvRCxFQUFTc0gsRUFBUSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBQUEsR0FDekJBLEVBQU94RyxNQUFPLEdBQWR3RyxFQUFvQnRILFFBQVMsU0FBV3VILCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUNoQ0MsRUFBV0QsRUFBUXpHLE1BQU8sR0FBZixFQUNqQlosRUFBVTZELEVBQVF5RCxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVSxHQUFLQSxFQUFVLEVBQTNDLENBQ0EsQ0FIRkYsQ0FJQSxDQUxRLENBTVYsQ0FQRiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FRRixDQVVPLE1BQUEsQ0FDTDlJLEtBaEdGLFNBQ0U2SSxFQUNBQyxFQUNBRyxFQUNBQycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FFQU4sRUFBY0MsRUFBU0MsRUFBUSxTQUFFdkQsRUFBUTRELEVBQU9DLEdBQzlDLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNQyxFQUFnQixxQkFBc0I5RCxFQUN0QytELEVBQVVELEVBQ1o5RCxFQUFPZ0Usb0JBQW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQnZKLEtBQU11RixFQUFRNEQsRUFBT0YsRUFBVUMsQ0FBMUQsRUFDQTNELEVBQUEsZUFBMicKICAgICAgICAgICAgICAgICAgICAgICAgYidCdkYsS0FBTXVGLEVBQVEwRCxDQUF6QyxFQUVZSSxFQUFBOUQsRUFBT2lFLGlCQUFrQkwsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU9GLEVBQVVDLENBQTFDLEVBQXNEM0QsRUFBQSxZQUF5QjBELENBQXpCLEVBQ3RFTiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBVTlHLEtBQU0sQ0FBRTBELEVBQVE0RCxFQUFPQyxFQUFXSCxFQUFVSyxFQUF0RCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDQSxDQVJGLENBU0YsRUFrRkVHLE9BekVPLFNBQVFaLEVBQXVCQyxFQUEyQkcsR0FDakVMJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFjQyxFQUFTQyxFQUFRLFNBQUV2RCxFQUFRNEQsRUFBT0MsR0FDbENULEVBQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFVeEYsT0FBUSxTQUFZdUcsR0FDeEMsTUFBS0EsQ0FBQUEsRUFBQUEsRUFBVSxLQUFRbicKICAgICAgICAgICAgICAgICAgICAgICAgYidFLEdBQ2xCbUUsRUFBVSxLQUFRUCxHQUNsQk8sRUFBVSxLQUFRTixHQUNkSCxHQUFZUyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVSxLQUFRVCxLQUVyQ1MsRUFBVSxHQUFWLEVBQ08sQ0FBQSxFQUlULENBWFUsQ0FZWiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FiRixDQWNGLEVBMkRFQyxTQWhETyxTQUFhcEUsRUFBcUIvRSxFQUFjb0osR0FDbkQsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUF2SSxFQVdHLE1BUnFCLFlBQXZCLE9BQU93SSxZQUNWeEksRUFBSSxJQUFJd0ksWUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FySixFQUFNLENBQUVzSixRQUhmLENBQUEsRUFHd0JGLE9BQUFBLENBQVgsQ0FBdkIsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUF2SSxFQUFBcUQsU0FBU3FGLFlBQWEsYUFBdEIsR0FDRkMsZ0JBQWlCeEosRUFOTCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxFQU1vQixDQUFBLEVBQU9vSixDQUF6QyxFQUdGckUsRUFBTzBFLGNBQWU1SSxDQUF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFDT0EsQ0FDVCxFQW9DRTZJLFFBVEYsV0FDRXZCLEVBQVVuSCxRQUFTLFNBQVEySSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBRUEsRUFBTSxHQUFOLENBQWMsQ0FBM0MsRUFDQS9LLEVBQU91SixDQUFQLENBQ0YsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBRU8sQ0FNVCxDQ3hKTyxJQUFNeUIsRUFBMkIsVUFFM0JDLEVBQTJCLE9BQzNCQyxHQUEyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsUUFDM0JDLEdBQTJCLFFBQzNCQyxHQUEyQixTQUMzQkMsR0FBMkIsV0FDM0JDLEdBQTInCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixVQUMzQkMsR0FBMkIsU0FDM0JDLEVBQTJCLFVBQzNCQyxFQUEyQixVQUMzQkMsR0FBMicKICAgICAgICAgICAgICAgICAgICAgICAgYidCLFNBQzNCQyxHQUEyQixVQUkzQkMsR0FBMkIsU0FDM0JDLEVBQTJCLFdBRTNCQyxFQUEyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsVUFLM0JDLEdBQTJCLHFCQUMzQkMsR0FBMkIsZ0JBRTNCQyxHQUEyQixpQkFDM0JDLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEyQixrQkFHM0JDLEdBQTBCLEtBQzFCQyxHQUEwQixLQ0NoQyxTQUFTQyxFQUFnQkMsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBSzlCLElBQU1DLEVBQU1ELEVBQVNBLEVBQU92QyxNQUFNd0MsSUFBTWpILFNBQVNrSCx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JBQWpELEVBS01DLEVBQVNuRCxHQUFmLEVBNkJBLE9BSktnRCxHQUNIQSxFQUFPdkMsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU0yQyxHQUFJWixFQUFlVyxFQUFPM0IsT0FBdkN3QixFQUdLNUgsR0FBUStILEVBQVEsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ3JCRixJQUFBQSxFQUNBRyxHQXZCTyxTQUFJaEQsRUFBMkJHLEdBQy9CNEMsRUFBQTdMJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUFNMkwsRUFBS3JLLEVBQVN3SCxDQUFBLEVBQVNpRCxLQUFNLEdBQXhCLEVBQStCLFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFLMUssR0FDM0M0SCxFQUFBbkosTUFBT21KLEVBQVVySSxFQUFTUyxFQUFFdUksTUFBRicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBYXZJLEVBQUV1SSxPQUFTLEVBQWxELENBQ1QsQ0FGSyxDQUdULEVBb0JFb0MsSUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tsTSxFQUFPK0wsRUFBT3BDLE9BQVFrQyxDQUF0QixFQUNMTSxLQWJGLFNBQWU5QyxHQUUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYjBDLEVBQU9sQyxTQUFVZ0MsRUFBS3hDLEVBQU81SixFQUFPVSxVQUFXLENBQVgsQ0FBcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDLENBQ0YsQ0FNdUIsRUFNekIsQ0NuRE8sU0FBU2lNLEdBQ2RDLEVBQ0FDLEVBQ0FDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQyxHQUVNLElBS0ZDLEVBVUFDLEVBZklDLEVBQVFDLEtBQVJELElBVUpFLEVBQU8sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVBDLEVBQVMsQ0FBQSxFQUtUQyxFQUFRLEVBS1osU0FBU0MsSUFDUCxHQUFLLENBQUVGLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFTLENBSWQsR0FIQUQsRUFBT1IsRUFBV2pGLEdBQU91RixFQUFRRixFQUFBQSxHQUFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0osRUFBVSxDQUFoQyxFQUFzQyxFQUMvREUsR0FBWUEsRUFBVU0sR0FFVCxHQUFSQSxJQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUVAsRUFBQSxFQUNYRyxFQUFZRSxFQUFaLEVBRUtILEdBQVMsRUFBRU8sR0FBU1AsR0FDdicKICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BQU9TLEVBQVAsRUFJSlAsRUFBS25NLEVBQUt5TSxFQUNaLENBQ0YsQ0FpQkEsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NDLElBQ0VILEVBQUEsQ0FBQSxDQUNYLENBaUJBLFNBQVNJLElBQ1BSLEdBQU1TLHFCQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0JULEdBR25CSSxFQUFBLEVBREFKLEVBREFHLEVBQUEsRUFHWCxDQW9CTyxNQUFBLENBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMbE4sTUF2REYsU0FBZ0J5TixHQUNkQSxHQUFVRixFQUFWLEVBQ0FULEVBQVlFLEVBQUksJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQU1TLEVBQVNQLEVBQU9SLEVBQVcsR0FDckNTLEVBQUEsQ0FBQSxFQUNaSixFQUFZbk0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUt5TSxFQUNuQixFQW1ERUssT0F2Q0YsV0FDRVosRUFBWUUsRUFBWixFQUNZRSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxFQUVQTixHQUNIQSxFQUFVTSxDQUFWLENBRUosRUFpQ0VJLE1BQUFBLEVBQ0FDLE9BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUNBSSxJQWxCRixTQUFjQyxHQUNEbEIsRUFBQWtCLENBQ2IsRUFpQkVDLFNBVkYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQ1MsT0FBQVYsQ0FDVCxDQUVPLENBUVQsQ0NsSU8sU0FBU1csRUFBT0MsR0FJckIsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUlDLEVBQVFELEVBc0JMLE1BQUEsQ0FBRUosSUFmVCxTQUFjN0wsR0FDSmtNLEVBQUFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ00sQ0FDVixFQWFjbU0sR0FKZCxTQUFhQyxHQUNYLE9BQU9oTSxFQUFVTCxFQUFTcU0sQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVQsRUFBbUJGLENBQW5CLENBQ25CLENBRU8sQ0FDVCxDQzdDQSxJQUFNRyxFQUFRLFFBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidEQyxHQUFrQkQsRUFBeEIsT0FDTUUsR0FBa0JGLEVBQXhCLFFBQ01HLEVBQWtCSCxFQUF4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsS0FDTUksRUFBa0JKLEVBQXhCLE9DU01LLEdBQU0sTUNRTkMsRUFBa0IsQ0FDN0JDLE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFZLENBQUUsVUFDZEMsS0FBWSxDQUFFLE1BQU8sU0FDckJ6SyxNQUFZLENBQUUsU0FBVScKICAgICAgICAgICAgICAgICAgICAgICAgYicsUUFDeEI4RCxFQUFZLENBQUUsS0FDZDRHLEVBQVksQ0FBRSxLQUNkQyxFQUFZLENBQUUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0tBQ2RDLFVBQVksQ0FBRVIsRUFBVUQsSUFDeEJVLFdBQVksQ0FBRVIsRUFBWUgsR0FSRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUNyQnhCLElBQU1ZLEVBQVksT0FDWkMsRUFBWSxXQUdaQyxFQUF1QixRQUN2QkMsR0FBMicKICAgICAgICAgICAgICAgICAgICAgICAgYidCRCxFQUFqQyxXQUNNRSxHQUEyQkYsRUFBakMsVUFDTUcsR0FBMkJILEVBQWpDLFdBQ01JJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUEyQkosRUFBakMsUUFDTUssR0FBMkJMLEVBQWpDLGFBQ01NLEdBQTJCTixFQUFqQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0FDTU8sR0FBMkJQLEVBQWpDLGNBQ01RLEdBQTJCUixFQUFqQyxrQkFDTVMsR0FBMkJULCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFqQyxPQUNNVSxHQUEyQlYsRUFBakMsT0FDTVcsR0FBMkJYLEVBQWpDLFNBU01ZLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQixDQUM1QmQsRUFDQUMsRUF4QnVCLFdBMEJ2QkUsR0FDQUMsR0FDQUUsR0FDQUMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDLEdBQ0FDLEdBQ0FDLElDM0JJSyxFQUFtQjVJLEdBQXpCLEtBWWE2SSxHQUF3QjdJLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUN4QjhJLEdBQTRCRixFQUFsQyxRQUNNRyxHQUE0QkgsRUFBbEMsT0FDTUksR0FBNEJKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFsQyxRQUNNSyxHQUE0QkQsR0FBbEMsVUFDTUUsR0FBNEJGLEdBQWxDLGNBQ01HLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUE0QlAsRUFBbEMsU0FDTVEsR0FBNEJSLEVBQWxDLFFBQ01TLEdBQTRCRCxHQUFsQyxTQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDTUUsR0FBNEJGLEdBQWxDLFNBQ01HLEdBQTRCWCxFQUFsQyxhQUNNWSxHQUE0QkQsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xDLFNBRU1FLEdBRDRCYixFQUFsQyxXQUNBLFFBQ01jLEdBQTRCZCxFQUFsQyxTQUlNZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBNEJmLEVBQWxDLEtBRU1nQixHQUE0QkMsWUFDNUJDLEdBQTRCRCxVQUM1QkUsR0FBNCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCRixVQUM1QkcsR0FBNEJILGFBQzVCSSxHQUE0QkosYUFDNUJLLEdBQTRCTCxjQUM1Qk0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQTRCTixjQU81Qk8sR0FBaUIsQ0FDNUJSLEdBQ0FJLEdBQ0FGLEdBQ0FDLEdBQ0FFLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBQyxHQUNBQyxJQ3RESyxJQWNNRSxHQUFzQix1QkFPdEJDLEdBQXNCLHNCQVF0QkMsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQW9CLHFDQzdCMUIsSUFBTUMsR0FBUSxRQU9SQyxHQUFPLE9BT1BDLEdBQU8sT0NtRWIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVNDLEdBQU83RixFQUFnQjhGLEVBQWVDLEVBQW9CQyxHQUNsRSxJQWFGQyxFQWJFeEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFzQyxFQUFnQkMsR0FDdEJJLEVBQW1CM0MsRUFBbkIyQyxHQUFJRyxFQUFlOUMsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWY4QyxLQUFNak0sRUFBU21KLEVBQVRuSixLQUNWNFIsRUFBOEJsRyxFQUE5QmtHLFdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FZQyxFQUFrQm5HLEVBQWxCbUcsS0FBTTNJLEVBQVl3QyxFQUFaeEMsUUFDbEI0SSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkQ1SSxFQUE3RDRJLGFBQWNDLEVBQStDN0ksRUFBL0M2SSxhQUFjQyxFQUFpQzlJLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidqQzhJLEtBQU1DLEVBQTJCL0ksRUFBM0IrSSxXQUFZQyxFQUFlaEosRUFBZmdKLFdBQzlDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsRUFBWVAsRUFBV1EsVUFBdkJELFFBQ0ZFLEVBQVluTixFQUFjd00sRUFBTyxPQUFQLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUMxQlksRUFBWXBOLEVBQWN3TSxFQUFPM0MsRUFBUCxFQUMxQndELEVBQXlCLENBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWJkLEVBQ1plLEVBQVlwUCxHQUFPc08sRUFBUCxJQUFtQjVCLEVBQW5CLEVBa0RsQixTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUzJDLElBQ1AsSUFBTUMsRUFBV2hILEVBQU9pSCxRQUFRQyxJQUFLLFNBQVVyTixHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndkNnTSxFQUFRaE0sRUFBT3NOLE9BQU9qQixXQUFXa0IsT0FBT0MsTUFBT3ZCLENBQXZDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNQRCxPQUFBQSxFQUFRQSxFQUFNRyxNQUFNbEYsR0FBSyxFQUNoQyxDQUhlZCxFQUdiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ssS0FBTSxHQUhPTCxFQUtIcEgsRUFBQW9OLEVBQU8zQyxHQUFZNUcsR0FBUTZKLEVBQUsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ0IsUUFBVVQsRUFBVWQsRUFBYUQsR0FBVSxDQUFoRCxDQUEzQixFQUNBbE4sRUFBQW9OLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPOUMsR0FBZThELENBQXRCLEVBQ2RwTyxFQUFjb04sRUFBT2pELEVBQU15RCxFQUFhJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFXLEVBQW5ELEVBQ2NBLEdBQUFoTyxFQUFpQndOLEVBQU92QyxFQUF4QixDQUNoQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FLQSxTQUFTOEQsSUFDQXRCLEdBQ0U3RSxFQUFBLENBRVgsQ0FLQSxTQUFTQSxJQUNQLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJQUNpQm9HLEVBNkJYQyxFQWhCQUMsRUFkQ3pCLElBQ1V1QixFQUFTeEgsRUFBaEI4RixPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FhSjRCLEVBQVNDLEVBQWYsS0FFZ0JsTyxHQUFVdU0sRUFBT2xCLEVBQWpCLElBQ0R6TywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBQTJQLEVBQU9sQixHQUFjNEMsQ0FBckIsRUFDYjlPLEVBQWNvTixFQUFPN0MsR0FBYycKICAgICAgICAgICAgICAgICAgICAgICAgYidpRCxHQUFnQnNCLEdBQVUsRUFBN0QsRUFDTW5ILEVBQUFtSCxFQUFTNUksR0FBZUMsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dCNkksQ0FBeEMsR0FVRkMsRUFnRFIsV0FDTzdILEdBQUFBLEVBQU9nQyxHQUFJNEQsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVg1RixFQUNILE9BQU8ySCxFQUFQLEVBR0YsSUFBTUcsRUFBWWxPLEVBQU1zTSxFQUFXNicKICAgICAgICAgICAgICAgICAgICAgICAgYidCLFNBQVNDLEtBQTFCLEVBQ1pDLEVBQVlyTyxFQUFNb00sR0FDbEJ0RCxFQUFZK0QsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MsT0FBUSxDQUFBLENBQVIsRUFDckJ4TyxFQUFZd08sRUFBUyxRQUFTLENBQUEsQ0FBVCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFFM0IsT0FBTzlLLEdBQU9tTSxFQUFXcEYsRUFBWCxHQUF1QjlHLEdBQU1xTSxFQUFXdicKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEtBQ2pEL0csR0FBT3NNLEVBQVdoUSxFQUFsQixHQUErQjJELEdBQU1rTSxFQUFXN1AsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWpCLENBQ3RDLEVBNURFLEVBQ013UCxFQUFTLENBQUVJLElBQWEsQ0FBRUYsS0FBY2QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBRXZDN0csRUFBTytCLE1BQU1DLEdBQUksQ0FBRTlPLEVBQVFDLEdBQTNCNk0sR0FDUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwSCxFQUFBb04sRUFBT3pDLEdBQWFrRSxHQUFVLEVBQTlCLEVBR0Y3TyxFQUFBZ0MsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VvTCxFQUFPeEksRUFBUTBLLGdCQUFrQixFQUEzQyxFQUFpRGxGLEVBQVd5RSxFQUFTLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLEVBQUssRUFBMUUsRUFFVGpCLEdBQ0g1TixFQUFjb04sRUFBT2hELEVBQVd5RSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUyxDQUFBLEVBQUssQ0FBOUMsRUFHR0ksSUFBWXBPLEdBQVV1TSxFQUFPZCxFQUFqQixJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRjdPLEVBQUEyUCxFQUFPZCxHQUFlMkMsQ0FBdEIsRUFDUHRILEVBQUFzSCxFQUFVN0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQWdCQyxHQUFjMkksQ0FBeEMsR0FHREMsR0FBVzdPLFNBQVNtUCxnQkFBa0JuQyxJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDckNILEVBQVFLLEVBQVdrQixPQUFPQyxNQUFPckgsRUFBTzhGLEtBQWhDLElBQ0x4TSxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT3VNLEVBQU1HLEtBQU5ILEVBNUNoQnhQLEVBQWEyUCxFQUFPaEIsR0FBWWMsSUFBVTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFPLENBQWpELEVBQ0FuUixFQUFhMlAsRUFBT2YsR0FBWWEsSUFBVTBCLEVBQU8sQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWpELEVBRUosQ0E2REEsU0FBU0csSUFDRCxJQUFTSCxFQUFTeEgsRUFBaEI4RixNQUNSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxPQUFPMEIsSUFBUzFCLEdBQVd0SSxFQUFRNEssYUFBZVosSUFBU3pCLENBQzdELENBc0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxJQUFNNkIsRUFBTyxDQUNYOUIsTUFBQUEsRUFDQUMsV0FBQUEsRUFDQUMsTUFBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0FjLFVBQUFBLEVBQ0FELFFBQUFBLEVBQ0F3QixNQXJMRixXQUNTeEIsSUFDTGIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01sRixHQUFTcUYsRUFBS3JGLEdBQWFoRSxTQUFBQSxHQUFLZ0osRUFBUSxDQUFiLEVBQ2onCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xOLEVBQWNvTixFQUFPakQsRUFBTXdELEVBQWEsV0FBYSxPQUFyRCxFQUNjM04sRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidvTixFQUFPdkMsR0FBc0I2QyxFQUFLTixLQUFsQyxFQUNkcE4sRUFBY29OLEVBQU8zQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBWXVELEdBQVNuSyxHQUFRNkosRUFBS2dDLFdBQVksQ0FBRXhDLEVBQVEsRUFBRzlGLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFPcE0sT0FBN0MsQ0FBMUMsR0FVRlUsRUFBTTBSLEVBQU8sUUFBUzVSLEVBQU9tTSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBTTFCLEdBQWErSSxDQUExQixDQUF0QixFQUNBdFQsRUFBTTBSLEVBQU8sVUFBVzVSLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPbU0sRUFBTVYsR0FBcUIrSCxDQUFsQyxDQUF4QixFQUNBeEgsRUFBSSxDQUFFeEIsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWFrQixHQUFlUCxHQUFrQjZCLENBQXBELEVBQ0FoQixFQUFJWCxHQUEwQnNILENBQTlCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUVLVixHQUNIakcsRUFBSXpCLEVBQVk0SSxDQUFoQixDQVpKLEVBNktFL0ksUUExSkYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dBQ2N5SCxFQUFBLENBQUEsRUFDWnhJLEVBQU1lLFFBQU4sRUFDQTFELEVBQWFrTCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1YsRUFBcEIsRUFDQTlNLEVBQWlCd04sRUFBT25DLEVBQXhCLEVBQ2NqTCxFQUFBb04sRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU8sUUFBU1csQ0FBaEIsRUFDQS9OLEVBQUFvTixFQUFPM0MsR0FBWXVELEdBQVMsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzVCLENBQ2hCLEVBb0pFeEYsT0FBQUEsRUFBQWxJLE1BMURPLFNBQU9DLEVBQWN0RCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInd0IwUyxHQUNwREMsRUFBVUQsR0FBZ0J6QixHQUFlZCxFQUFPN00sRUFBTXRELENBQXRELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUNGLEVBMERFNFMsU0FwQk8sU0FBVUMsRUFBY0MsR0FPL0IsT0FOSUMsRUFBTy9NLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FLNk0sRUFBTzVDLENBQVAsR0FHZDhDLEVBREsvQixHQUFhckosQ0FBQUEsRUFBUWlFLFEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFVekIsQ0FBQUEsRUFBT2dDLEdBQUkyRCxFQUFYM0YsRUFJL0I0SSxFQUhFcE4sRUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgYidvTixFQUFNNUksRUFBT3BNLE9BQVNnVixDQUF0QixJQUdDRCxDQUNqQixDQUVhLEVBYU4sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BQUFmLENBQ1QsQ0M5Uk8sSUFBTWlCLEdBQThCMU4sRUFBcEMsWUNIQSxJQUFNMk4sR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQTBCLENBQUVDLFFBQVMsQ0FBQSxFQUFPQyxRQUFTLENBQUEsQ0FBM0IsRUNJaEMsSUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEdBQW9CLENBQy9CQyxTQUFVLElBQ1ZDLE1BQVUvRyxHQUNWZ0gsS0FBVWpILEdBQ1ZrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0gsR0FBVWhILEVBQ1ZpSCxLQUFVaEgsQ0FMcUIsRUFlMUIsU0FBU2lILEdBQWNwUixHQUUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNUIsT0FEQUEsRUFBTS9DLEVBQVUrQyxDQUFBLEVBQVFBLEVBQU1BLEVBQUlBLElBQzNCOCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRLEdBQW1COVEsSUFBU0EsQ0FDckMsQ0NKQSxJQUFNcVIsR0FBaUIsVUNmaEIsSUFBTUMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQXlCdE8sRUFBL0IsUUFPTXVPLEdBQTRCRCxHQUFsQyxVQU9NRSxHQUFBLElBQXNCRiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBdEIsT0FBaURDLEdBQWpELElDV2IsSUFBTUUsR0FBZSxDQUFFLElBQUssb0RDRFosUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU81SixFQUFnQmtHLEVBQXdCMUksR0FDdkQsSUFBRXVFLEVBQVUvQixFQUFWK0IsTUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0Y4SCxFQUFnQnJNLEVBQVFxTSxhQUFlLEdBQ3ZDQyxFQUFnQnRNLEVBQVFzTSxlQUFpQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDekMzSixFQUFnQm5ELEdBQXRCLEVBS00rTSxFQUE4QyxHQXVCcEQsU0FBU3ZMLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTd0wsR0FDWEEsR0FDSDdKLEVBQU8zQixRQUFQLENBRUosQ0FRUyxTQUFBeUwsRUFBVXpNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFrQjlDLEdBQzdCd1AsRUFBWUMsV0FBWXpQLEdBQ3ZCeUYsRUFBQTdMLEtBQU00ViwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBVyxTQUFVOUksQ0FBM0IsRUFDUDJJLEVBQVE1VCxLQUFNLENBQUVxSCxFQUFTME0sRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXpCLENBQ0YsQ0FLQSxTQUFTOUksSUFDRCxJQUFBNkUsRUFBWWxFLEVBQU1DLEd0RXJEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0gsQ3NFcURILEVBQ1pvSSxFQUFZNU0sRUFBUTRNLFVBQ3BCQyxFQUFTTixFQUFRTyxPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUIsU0FBRUQsRUFBUUUsR0FDekMsT0FBQWpTLEVBQU8rUixFQUFRRSxFQUFPLEdBQUloVCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsUUFBVWdULEVBQU8sR0FBTSxFQUFqRCxDQUNULEVBQUcsRUFGWSxFQUlmaFMsR0FBTWlGJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFOLEVBQ0FrRSxFQUFLMkksQ0FBTCxFQUVLN00sRUFBUWdCLFFBQ1h3QixFQUFPeEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFFBQTZCLGVBQXBCaEIsRUFBUWdCLE9BQXhCd0IsRUFDVWlHLEdBQ1Z6SCxFQUFTLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBLENBQVQsRUFDQXdCLEVBQU9xSSxNQUFQckksR0FFY29LLElBQUE1TSxFQUFRNE0sV0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwSyxFQUFPd0ssUUFBNUIsQ0FFbEIsQ0EwQlMsU0FBQTlJLEVBQUsrSSxFQUFlQyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ0JDLEdBQzNDclMsRUFBT2tGLEVBQVNpTixDQUFoQixFQUNBQyxHQUFRcFMsRUFBT1QsTycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU8rUyxlQUFnQnBOLENBQXZCLEVBQWtDaU4sQ0FBbEMsRUFFVkUsQ0FBQUEsR0FBWTVJJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNQyxHdEVsSUosQ3NFa0lGLEdBQ2ZoQyxFQUFPTyxLQUFNcEIsRUFBZTNCLENBQTUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQndDLENBRUosQ0FFTyxNQUFBLENBQ0w2SyxNQTdGRixXQUNRLElBQUFDLEVBQStCLFFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYid2QnROLEVBQVF1TixXQUV0Qm5ULEVBQVNpUyxDQUFULEVBQ0dtQixLQUFNLFNBQUVDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHQyxHQUFMLE9BQVlKLEVBQVEsQ0FBQ0csRUFBSSxDQUFDQyxFQUFJLENBQUNBLEVBQUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUNELENBQXBDLENBRFQsRUFFR25WLFFBQVMsU0FBT3FDLEdBQ2Y4UixFQUFVSixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYTFSLEdBQXZCLEtBQW1DMlMsRUFBUSxNQUFRLE9BQW5ELFVBQW9FM1MsRUFBcEUsS0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsQ0FDQSxDQUpKLEVBTUE4UixFQUFVSCxFQUFlN1csQ0FBekIsRUFDT21PLEVBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1QsRUFtRkU1QyxRQUFBQSxFQUNBOEwsT0E1QkYsU0FBaUJhLEdBQ1ZoQixXQUFZbFgsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVosRUFBMkNzRSxVQUNyQzRULEVBQUE3UyxFQUFPa0YsRUFBU3NNLENBQWhCLEVBQWtDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZSLEdBQU1pRixFQUFTNUYsRUFBU2tTLENBQVQsR0FFOUQsRUF5QkVwSSxJQUFBQSxDQUonCiAgICAgICAgICAgICAgICAgICAgICAgIGInSyxDQU1ULFlackdnQixTQUFXMUIsRUFBZ0JrRyxFQUF3QjFJLEdBOEIxRCxNQUFBLENBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMaUosUUF2Qk8sU0FBU3ROLEVBQWNpUyxFQUFvQmhCLEdBRTVDLElBQUF0RSxFRDdDUyxTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0M0Q2ZzRSxFQUFZQSxHQUFhNU0sRUFBUTRNLFlBQ0lnQixFQUFlaEIsSUFBYzdILEdBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUksQ0FBQSxFQUE1QixFQUV6QyxPQUFBQyxFQUFpQnJKLElBQVVxSixFQUFpQnJKLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFRMk0sSUFDdEQzTSxFQUFLMEQsUUFBUyxvQkFBcUIsU0FBRXdPLEVBQU9DLEdBQ3ZDJwogICAgICAgICAgICAgICAgICAgICAgICBiJzFPLEVBQWM0RixFQUFpQjZJLEVBQU1FLFlBQU4sR0FBdUJ6RixJQUFXdUYsRUFDaEUsT0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVMsRUFBVEMsRUFBYTFPLEVBQVk0TyxPQUFRLENBQXBCLEVBQXdCQyxZQUF4QixFQUF3QycKICAgICAgICAgICAgICAgICAgICAgICAgYic3TyxFQUFZL0ksTUFBTyxDQUFuQixFQUF5QitJLENBQ3JGLENBSEMsQ0FJUCxFQWVFOE8sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BTkYsU0FBaUI3VixHQUNmLE9BQU9BLEdEOURRLFFDOERFMkgsRUFBUTRNLFVBQW9CLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFJLENBQUEsRUFDbkQsQ0FFTyxDQUlULFdhRWdCLFNBQVVwSyxFQUFnQmtHLEVBQXdCMScKICAgICAgICAgICAgICAgICAgICAgICAgYidJLEdBQ2hFLElBdUJJd0ssRUFLQTJELEVBS0FDLEVBakNpQjdMLEVBQUFBLEVBQWdCQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBN0JJLElBQUFBLEdBQUk5TCxJQUFBQSxLQUNKNlIsRUFBU25HLEVBQVRtRyxLQUNBRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUzlJLEVBQVQ4SSxLQUNGdUYsRUFBOEIsR0FLOUJDLEVBQXdCLEdBSzFCQyxFQUF3QicKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FLeEJDLEVBQXlCLEdBb0I3QixTQUFTbkIsSUEyREM3QyxFQUFBaUUsRUFBV2pJLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUFYLEVBQ0EySCxFQUFBalUsR0FBT3NRLEVBQVAsSUFBbUIvRCxFQUFuQixFQUUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQTdJLEdBQUE0TSxHQUFTMkQsRUFBTSxrQ0FBZixFQUNSeFYsRUFBTTJWLEVBQVEvVSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVTRVLEVBQUEsSUFBV3pILEdBQVgsU0FBaUNDLEdBQWpDLEdBQUEsQ0FBeEIsRUFFUXBNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFBLENBQ05tVSxPQUFZN0gsR0FDWmtDLFdBQVk5QixHQUNaMEgsS0FBWTVILEdBQ1onCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkgsS0FBWTVILEdBQ1o2SCxJQUFZMUgsR0FDWjJILE9BQVkxSCxFQU5OLEVBT0wsU0FBRScKICAgICAgICAgICAgICAgICAgICAgICAgYidsTCxFQUFXdkIsR0FDSjBULEVBQUExVCxHQUFROFQsRUFBTSxJQUFLdlMsQ0FBTCxDQUN4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsQ0FUTSxFQVdSdEIsR0FBUXlULEVBQVUsQ0FBRTFGLEtBQUFBLEVBQU02QixNQUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTzJELEtBQUFBLEVBQU1HLE9BQUFBLENBQXJCLENBQWxCLEVBU0EsSUFBTWhMLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidPcUYsRUFBS3JGLElyQjVMZixTQUFtQnlMLEdBQ2pCLE1BQUEsR0FBSUEsRUFBV3pQLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPQyxHQUFLd1AsSUFBYXhQLEdBQUt3UCxJQUFZLEdBQU0sQ0FBekMsQ0FDL0IsRXFCMEwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc0NyUixFQUFWLEVBQ2xCc1IsRUFBT2hQLEVBQVFnUCxLQUVyQnJHLEVBQUtyRixHQUFNQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFDTGtILEVBQUFsSCxHQUFLa0gsRUFBTWxILElBQVVBLEVBQXJCLFNBQ0Q2SyxFQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdLLEdBQU02SyxFQUFLN0ssSUFBVUEsRUFBckIsUUFFQSxDQUFFdEgsRUFBYzJNLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncEQsSUFBMkIsWUFBakJvRCxFQUFLc0csU0FBeUJELEdBQ25ENVQsRUFBQXVOLEVBQU1wRCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBTXlKLENBQVosRUFHRjVULEVBQUF1TixFQUFNMUMsR0FBc0I2QyxFQUFLb0csUUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2pDLEVBQ0E5VCxFQUFBK1MsRUFBTTVJLEVBQU0sY0FBWixFQTlGUDNCLEVBQUEsQ0FDVCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0F3QkEsU0FBUzVDLEVBQVN3TCxHQUNWLElBQUF0UixFQUFRbUwsR0FBZThJLE9BQVEsTycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXZCLEVBRWRqWixFQUFPb1ksQ0FBUCxFQUNBaFIsRUFBYXFMLEVBQU00RixDQUFuQixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDQWpSLEVBQWFrTixFQUFPZ0UsQ0FBcEIsRUFDQXhULEVBQWlCLENBQUV3UCxFQUFPMkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVFqVCxDQUFsQyxFQUNBRixFQUFpQjJOLEVBQU02RCxFQUFhdFIsRUFBUSxDQUFFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFTK0ssR0FBdkQsQ0FDRixDQUtBLFNBQVNyQyxJQUNQdEcsRUFBYXFMLEVBQU00RixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbkIsRUFDQWpSLEVBQWFrTixFQUFPZ0UsQ0FBcEIsRUFFQUQsRUFBZWEsRUFBWTdJLEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUMzQmlJLEVBQWVZLEVBQVk1SSxJQUUzQnJOLEVBQVV3UCxFQUFNNEYsQ0FBaEIsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidwVixFQUFVcVIsRUFBT2dFLENBQWpCLEVBRWNwVCxFQUFBdU4sRUFBTTlDLEdBQVk3RixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUW9KLEtBQTFCLEVBQ0FoTyxFQUFBdU4sRUFBTTdDLEdBQWlCOUYsRUFBUXFQLFVBQS8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixDQUNoQixDQW9EQSxTQUFTWixFQUFNelUsR0FDUGxCLEVBQU1vRSxHQUFvQnlMLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNM08sQ0FBTixFQUNoQyxPQUFPbEIsR0NyTkssU0FBU29TLEVBQW1CbFIsR0FDckMsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FyQyxFQUFZdVQsRUFBS29FLE9BQWpCLEVBQ0ksT0FBQXBFLEVBQUtvRSxRQUFTdFYsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWQsRUFLRCxJQUZSLElBQUlsQixFQUEwQm9TLEVBRXRCcFMsR0FBd0IsSUFBakJBLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidJeVcsVUFDWnhWLENBQUFBLEdBQVNqQixFQUFLa0IsQ0FBZCxHQUlMbEIsRUFBTUEsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0kwVyxjQUdMLE9BQUExVyxDQUNULEVEcU0yQkEsRUFBVXlOLElBQUFBLEVBQVYsSUFBOEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb0MsRUFBTzdQLEVBQU0sS0FBQSxDQUNwRSxDQVNBLFNBQVNzVyxFQUFZbEMsR0FDWixNQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxDQUNEQSxFQUFXbE4sS0FBQUEsRUFBUTFJLEtBQ25CNFYsRUFGQyxLQUVVbE4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1E0TSxVQUN2QjVNLEVBQVF5UCxNQUFZdkMsRUFIZixjQUlMbE4sRUFBUTRJLGNBQW9Cc0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBSnZCLFFBS0xBLElBQVMzRyxJQUFjZSxHQUUzQixDQUVBLE9BQU8xTSxHQUFReVQsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVUsQ0FDdkJoQixNQUFBQSxFQUNBeEMsTUF4SEYsV0FDRWpJLEVBQUlsQixFQUFlVixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbkIsRUFDQTRCLEVBQUlsQixFQUFlMkwsQ0FBbkIsRUFDQXpLLEVBQUlqQixFQUFlaUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQW5CLEVBRU05TSxFQUFBMEUsU0FBY3VNLEdBQWdDLFdBQUEsU0FBSzVQLEdBQ3ZEaScKICAgICAgICAgICAgICAgICAgICAgICAgYidXLEVBQXdCLFlBQVhqVyxFQUFFYixJQUNkLEVBQUEsQ0FBRWtVLFFBQVMsQ0FBQSxDQUFYJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUZHLEVBSUExVSxFQUFBNlIsRUFBTSxVQUFXLFdBQ3JCOVAsRUFBYThQLEVBQU1mLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFnQixDQUFDLENBQUV3RyxDQUF0QyxDQUNBLENBRkksQ0FHUixFQTZHRXBOLFFBQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUh1QixFQUszQixTRTdLZ0IsU0FBUXdCLEVBQWdCa0csRUFBd0IxSSxHQUM5RCxJQUEyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0J1QyxFQUFBQSxFQUFnQkMsR0FBbkNJLElBQUFBLEdBQUlHLElBQUFBLEtBQU1qTSxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsS0FDVndYLEtBQWlCNUYsRUFBVzZCLFVBQTVCK0QsT0FBUUgsSUFBQUEsS0FLVnZFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUEyQixHQWNqQyxTQUFTOEYsSUFDQXBCLEVBQUFoVyxRQUFTLFNBQUVrUSxFQUFPRixHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdUJtRSxFQUFBakUsRUFBT0YsRUFBTyxDQUFHLENBQWpCLENBQXFCLENBQTlELENBQ1QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBS0EsU0FBU3RILElBQ1AxSSxFQUFTLFNBQUErUCxHQUFXQSxFQUFNckgsUUFBTnFILCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFrQixDQUF0QyxFQUNBblMsRUFBTzBULENBQVAsQ0FDRixDQWlCUyxTQUFBNkMsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VqRSxFQUFvQkYsRUFBZUMsR0FDOUMvTixFQUFTNk4sR0FBTzdGLEVBQVE4RixFQUFPQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBWUMsQ0FBbEMsRUFDZmhPLEVBQU9xUSxNQUFQLEVBQ0FqQixFQUFPalIsS0FBTTZCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFib1AsRUFDQUEsRUFBTzRELEtBQU0sU0FBRW1DLEVBQVFDLEdBQVYsT0FBc0JELEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPckgsTUFBUXNILEVBQU90SCxLQUE1QyxDQUFic0IsQ0FDRixDQVNBLFNBQVNpRyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0MsR0FDWixPQUFPQSxFQUFnQjdWLEVBQVEsU0FBQW9PLEdBQUEsTUFBUyxDQUFFQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBTWdCLE9BQWpCLENBQUEsRUFBNkJPLENBQzlELENBbUVTLFNBQUF0UixFQUFTRSxFQUEwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JzWCxHQUNyQ0QsRUFBQUMsQ0FBQSxFQUFnQnhYLFFBQVNFLENBQXpCLENBQ1AsQ0FVQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBU3lCLEVBQVE4VixHQUNmLE9BQU9uRyxFQUFPM1AsT0FBUXRDLEVBQVlvWSxHQUM5QicKICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBQ0EsU0FBQTFILEdBQUEsT0FBU3pRLEVBQVVtWSxHQUNqQmhXLEdBQVNzTyxFQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0csTUFBT3VILEdBQ3RCdFgsRUFBVUwsRUFBUzJYLEdBQVcxSCxFQUFNQyxLQUFwQyxDQUYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixDQUZHc0IsQ0FNVCxDQXdETyxNQUFBLENBQ0xpQixNQW5NRixXQUNPNkUsRUFBQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDTDlNLEVBQUlsQixFQUFlVixDQUFuQixFQUNBNEIsRUFBSWxCLEVBQWVnTyxDQUFuQixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRixFQWdNRTFPLFFBQUFBLEVBQ0E0QyxPQTdLRixXQUNFdEwsRUFBUyxTQUFBK1AsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVdBLEVBQU16RSxPQUFOeUUsQ0FBaUIsQ0FBckMsQ0FDRixFQTRLRW9FLFNBQUFBLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBb0QsSUFBQUEsRUFDQUcsTUEzSUYsU0FBZ0JDLEdBQ1IsSUFBRUMsRUFBZXhILEVBQWZ3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0gsV0FDRjVILEVBQVE0SCxFQUFXQyxRQUFTRixDQUFwQixFQUNSL1IsRUFBUWdTLEVBQVcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxXQUFhLEVBQUlwUSxFQUFRcVEsUUFDM0MsT0FBQXBXLEVBQVEsU0FBQW9PLEdBQUEsTycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMzSixHQUFTMkosRUFBTUMsTUFBT0EsRUFBT0EsRUFBUXBLLEVBQU0sQ0FBbENtSyxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbEIsQ0FBUixDQUNULEVBdUlFd0IsTUE5SEYsU0FBZ0J2QixHQUNQLE9BQUFyTyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUXFPLENBQVIsRUFBaUIsRUFDMUIsRUE2SEV0UCxJQXJITyxTQUFLSixFQUFtRDBQLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYicvRGdJLEVBQWExWCxFQUFPLFNBQVM0UCxHQUt0QixJQWtFZTFQLEVBQWNpSCxFQUU5QjNKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQXBFQzBCLEVBSEgwUSxFQURHNVEsRUFBVTRRLENBQVYsRUFDSy9MLEdBQVcrTCxHQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInREEsQ0FBZixLQUNHN08sRUFBTTJVLEVBQVFoRyxJQUNkN08sRUFBUStPLEVBQU83TyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUU4sRUFBUThVLEVBQU0zRixDQUFkLEVBQ25CclAsRUFBQXFQLEVBQU94SSxFQUFRakgsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1FBQVF5UCxLQUF2QixFQStEUTFQLEVBOURIMFAsRUE4RGlCekksRUE5RFZuSixFQUFPbU0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU1uQixFQUFiLEVBK0RwQjJPLEVBQVNuVCxHQUFVdEUsRUFBSyxLQUFMLEdBQ25CMScKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBQVdtYSxFQUFYbmEsUUFHSm1hLEVBQU9qWSxRQUFTLFNBQU9rWSxHQUNmMVosRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EwWixFQUFLLGFBQWMsV0FDZHBhLEVBQUFBLEdBQ0UySixFQUFBLENBRVgsQ0FKSSxDQUsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTixDQU5GLEVBUVNBLEVBQUEsRUF6RVQsQ0FYRixFQWFBZ0QsRUFBTXJCLENBQU4sQ0FDRicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFzR0VuRixPQTlGRixTQUFpQndULEdBQ0hVLEVBQUF4VyxFQUFROFYsQ0FBUixFQUFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JyRyxJQUFLLFNBQUFyQixHQUFBLE9BQVNBLEVBQU1HLEtBQWYsQ0FBdkIsQ0FBQSxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWnpGLEVBQU1yQixDQUFOLENBQ0YsRUE0RkVwSixRQUNBQSxFQUNBMkIsT0FBQUEsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYid5QixNQTNETyxTQUFPQyxFQUFjdEQsRUFBd0IwUyxHQUNwRHpTLEVBQVMsU0FBQStQLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FXQSxFQUFNM00sTUFBT0MsRUFBTXRELEVBQU8wUyxDQUExQjFDLENBQTJDLENBQS9ELEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNGLEVBMERFcUksVUExQkYsU0FBb0JaLEdBQ1gsT0FBQUEsRUFBZ0J4QixFQUFnQjFFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFUeFQsTUFDaEMsRUF5QkV1YSxTQWxCRixXQUNTL0csT0FBQUEsRUFBT3hULE9BQVM0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0osRUFBUXFRLE9BQ2pDLENBRU8sQ0FnQlQsU0NyUWdCLFNBQVE3TixFQUFnQmtHLEVBQXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQjFJLEdBQzlELElBU0k0USxFQUtBQyxFQUtBQyxFQW5CSWxPLEtBQW1CTCxFQUFnQkMsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQW5DSSxHQUFJOUwsSUFBQUEsS0FBTWlNLElBQUFBLEtBQ1Y2RyxFQUFXbEIsRUFBWGtCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxPQUNBWCxFQUFZUCxFQUFXUSxVQUF2QkQsUUFDQU4sS0FBc0JELEVBQVc2QixVQUFqQzUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixLQUFNNkIsSUFBQUEsTUFBTzJELElBQUFBLEtBQ2J0RSxFQUE4QkQsRUFBOUJDLE1BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidja0gsRUFBZ0JuSCxFQUF2QmxPLE1BK0JmLFNBQVNnVSxJQUNQa0IsRUFBVzVRLEVBQVE0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ00sWUFBYzdILEdBRWpDckosRUFBT2lOLEVBQU0sV0FBWWxMLEVBQU11QyxFQUFRaUYsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVIsQ0FBL0IsRUFDQXZKLEVBQU84TyxFQUFPdkIsRUFBUyxhQUFBLEVBQWlCK0gsRUFBWScKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBQSxDQUFaLENBQXhDLEVBQ0F0VixFQUFPOE8sRUFBT3ZCLEVBQVMsY0FBQSxFQUFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IrSCxFQUFZLENBQUEsQ0FBWixDQUF6QyxFQUVBQyxFQUFRLENBQUEsQ0FBUixDQUNGLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVFBLFNBQVNBLEVBQVFDLEdBQ1QsSUFBQUMsRUFBVS9VLEVBQU11TSxHQUVqQnVJLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxHQUFTTCxFQUFTNUwsUUFBVWtNLEVBQVFsTSxPQUFTNEwsRUFBU08sU0FBV0QsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1FDLFNBQ3JFMVYsRUFBQThPLEVBQU8sU0FxQ2xCLFdBQ0UsSUFBSTRHLEVBQVMsR0FFUlInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBRUhoVCxHQURBd1QsRUFBU0MsRUFBVCxFQUNnQixtQ0FBaEIsRUFDQUQsRUFBa0JBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFBQSxFQUFjSixNQUFBQSxFQUFZLENBQUEsQ0FBWixFQUFoQyxNQUEyREEsRUFBWSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxHQUF2RSxLQUdLLE9BQUFJLENBQ1QsR0EvQ1csRUFFUEwsRUFBYTlILEVBQVMsZUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWlCeEwsRUFBTXVDLEVBQVFzUixHQUFSLENBQTdDLEVBQ2FQLEVBQUEsUUE2RFIvUSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUXVSLFVBQ1gsS0FDQTlULEVBQU11QyxFQUFRd1IsVUFBZCxJQUFnQ1osRUFBVyxHQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2EsSUEvRHJDLEVBQ0FWLEVBQUEsU0F1RVJ0VCxFQUFNdUMsRUFBUTBSLFdBQWQsSUFDQWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWE1USxFQUFRMlIsV0FBYSxLQUFPRixJQUFtQkosS0F4RXhCLENBQUEsQ0FBNUIsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBRUZSLEVBQUFNLEVBQ1hwTyxFQUFNbEIsRUFBTixFQUVLaVAsS0FBZUEsRUFBV2MsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsS0FDaEIvWSxFQUFBOFAsRUFBTWQsR0FBZ0JpSixDQUF0QixFQUNiL04sRXRCdkZnQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInV3NCdUZWK04sQ0FBdEIsR0FHTixDQVVBLFNBQVNFLEVBQVl2VyxHQUNiLElBQUVvWCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWTdSLEVBQVo2UixRQUNGbFcsRUFBT3NOLEVBQVN4TyxFQUFRLFFBQVUsTUFBM0IsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ04sT0FBQW9YLEdBQ0ZwVSxFQUFNb1UsRUFBU2xXLEtBQVluRSxHQUFVcWEsR0FBWSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUEsS0FDckQsS0FDUCxDQXdCQSxTQUFTUixJQUNBLE9BQUE1VCxFQUFNdUMsRUFBUW9SLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFVaFYsRUFBTStSLENBQU4sRUFBYWxKLE1BQVFqRixFQUFROFIsV0FBckQsQ0FDVCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0E0QkEsU0FBU0wsSUFDRCxJQUFBSCxFQUFNN1QsRUFBTXVDLEVBQVFzUixHQUFSLEVBQ1gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQUEsY0FBY0EsU0FBY0EsR0FBNUIsTUFBeUN0UixFQUFRcVEsU0FBVyxJQUFNaUIsUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWNBLEdBQWhGLEdBQ1QsQ0FPQSxTQUFTUyxJQUNQLE9BQU8zVixFQUFNK1IsQ0FBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUWxGLEVBQVMsT0FBVCxFQUN2QixDQVVTLFNBQUErSSxFQUFXMUosRUFBZ0IySixHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInNUI1SixFQUFRd0IsRUFBT3ZCLEdBQVMsQ0FBVCxFQUNkLE9BQUFELEVBQ0hqTSxFQUFNaScKICAgICAgICAgICAgICAgICAgICAgICAgYidNLEVBQU1HLEtBQU4sRUFBZVMsRUFBUyxPQUFBLElBQWdCZ0osRUFBYSxFQUFJQyxFQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUMvRCxDQUNOLENBV1MsU0FBQUMsRUFBVzdKLEVBQWUySixHQUMzQixJQUlFL00sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSkZtRCxFQUFRd0IsRUFBT3ZCLEdBRXJCLE9BQUtELEdBQ0c1TixFQUFRMkIsRUFBTWlNLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFNRyxLQUFOLEVBQWVTLEVBQVMsVUFDdEMvRCxFQUFROUksRUFBTStSLENBQU4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsRixFQUFTLFNBQzlCNUssRUFBSzVELEVBQVF5SyxJQUFXK00sRUFBYSxFQUFJQyxNQUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInM0MsQ0FDVCxDQVVBLFNBQVNFLEVBQVlILEdBQ1osT0FBQUUsRUFBVzNQLEVBQU9wTSxPQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBUyxDQUEzQixFQUFpQytiLEVBQVcsR0FBTUgsRUFBVyxFQUFHQyxDQUFILENBQ3RFLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09BLFNBQVNDLElBQ0QsSUFBQTdKLEVBQVF3QixFQUFPLEdBQ2QsT0FBQXhCLEdBQVNnSywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInV0FBWTNXLEVBQU8yTSxFQUFNRyxNQUFPUyxFQUFTLGFBQUEsQ0FBdEIsSUFBNkMsQ0FDbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidGLENBb0JBLFNBQVMySSxJQUNQLE9BQU9wUCxFQUFPZ0MsR0FBSTRELEVBQVg1RixHQUFxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0I0UCxFQUFZLENBQUEsQ0FBQSxFQUFTTCxFQUFqRCxDQUNGLENBRU8sTUFBQSxDQUNMbEgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BbE5GLFdDMUNjLElBQ2RoVSxFQUNBeWIsRUFFTXJQLEVEdUNDeU0sRUFBQSxFQUNMNScKICAgICAgICAgICAgICAgICAgICAgICAgYidZLEVBQU1tQixPQUFRLGVDM0NoQnBCLEVEMkN5Q0QsRUFBT21NLEVBQU1uQixJQ3hDaERxJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBV0QsR0FBaUJzUCxHQUFZLEVBQUd6YixFQUFNLEtBQU0sQ0FBM0IsRUFFM0IsV0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0lvTSxFQUFBbUIsU0FBQSxHQUFjbkIsRUFBUzFNLE1BQXZCLENBQ1gsRURvQ0UsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidxTSxFQUFJLENBQUVqQixFQUFlRCxHQUFpQmdPLENBQXRDLEVBQ0E5TSxFQUFJaEIsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NxUCxDQUFsQixDQUNGLEVBOE1FQSxPQUFBQSxFQUNBYyxTQUFBQSxFQUNBQyxVQUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQUksV0FBQUEsRUFDQUQsVUFBQUEsRUFDQUksV0FyQkYsU0FBcUI5WCxHQUNaLE9BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBNFgsV0FBWTNXLEVBQU84TyxFQUFPdkIsRUFBUyxXQUFXeE8sRUFBUSxRQUFVLFFBQTdDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFuQixHQUFtRixDQUM1RixFQW9CRW1YLFdBQUFBLENBUkssQ0FVVCxTRXhQZ0IsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVFwUCxFQUFnQmtHLEVBQXdCMUksR0FDeEQsSUFhRndTLEVBYkV2UyxFQUFRc0MsRUFBZycKICAgICAgICAgICAgICAgICAgICAgICAgYidCQyxHQUN0QkksRUFBTzNDLEVBQVAyQyxHQUNBMkgsRUFBcUI3QixFQUFyQjZCLFNBQVVYJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFXbEIsRUFBWGtCLE9BQ1ZYLEVBQVlQLEVBQVdRLFVBQXZCRCxRQUtGd0osRUFBd0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBVzlCLFNBQVM1SCxJQUlBLEdBSFBqSSxFQUFJbEIsRUFBZWdSLENBQW5CLEVBQ0E5UCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBSSxDQUFFakIsRUFBZUMsSUFBZ0IrUSxDQUFyQyxFQUVPSCxFQUFhSSxJQUF3QixDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDMUNDLElBd0NlbFAsRUF4Q0w2TyxFQXlDTmxFLEVBQVMxRSxFQUFPaUcsSUFBUCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXhaLE1BQTVCLEVBQ1FELEVBQVdrWSxFQUFYbFksT0FFUixHQUFLQSxFQUFTLENBQ0osSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFrWSxFQUFPbFksT0FBU3VOLEdBQ3RCaEwsRUFBTTJWLEVBQVFBLENBQWQsRUFHRjNWJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNMlYsRUFBT2pZLE1BQU8sQ0FBQ3NOLENBQWYsRUFBd0IySyxFQUFPalksTUFBTywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBR3NOLENBQWpCLENBQTlCLEVBQXlEckwsUUFBUyxTQUFFK1AsRUFBT0MsR0FDekUsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU13SyxFQUFTeEssRUFBUTNFLEVBQ2pCb1AsRUFnQkgsU0FBV2phLEVBQWtCd1AsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICBiJzlCeUssRUFBUWphLEVBQUlrYSxVQUFXLENBQUEsQ0FBZixFQUdQLE9BRkc3WixFQUFBNFonCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU8vUyxFQUFRakgsUUFBUWdhLEtBQXZCLEVBQ1ZBLEVBQU16UCxHQUFTZCxFQUFPbScKICAgICAgICAgICAgICAgICAgICAgICAgYidHLEtBQUtyRixHQUEzQixTQUF3Q2hFLEdBQUtnSixFQUFRLENBQWIsRUFDakN5SyxDQUNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQXJCZ0MxSyxFQUFNRyxNQUFPRixDQUF4QixFQUNOd0ssRUFBQXJaLEVBQVFzWixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT3pFLEVBQVEsR0FBSTlGLEtBQTNCLEVBQXFDblAsRUFBUWtSLEVBQVM0RCxLQUFNNEUsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXZCLEVBQzlDcGEsRUFBTThaLEVBQVFNLENBQWQsRUFDT25KLEVBQUE2QyxTQUFVc0csJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU96SyxFQUFRM0UsR0FBVW1QLEVBQVMsRUFBSTFjLEdBQVVpUyxFQUFNQyxLQUFoRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDUCxDQU5GLENBT0YsQ0F2REVJLEVBQVd1SyxPQUFPaEMsT0FBUSxDQUFBLENBQTFCdicKICAgICAgICAgICAgICAgICAgICAgICAgYidJLENBQ0YsQ0FDRixDQUtBLFNBQVNnSyxJQUNDMVIsRUFBQSxFQUNGNkosRUFBQSxDQUNSJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUtBLFNBQVM3SixJQUNQekUsRUFBUWtXLENBQVIsRUFDQXZjLEVBQU91YyxDQUFQLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBeFMsRUFBTWUsUUFBTixDQUNGLENBS0EsU0FBUzJSLElBQ1AsSUFBTWhQLEVBQVFpUCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBZCxFQUVLSixJQUFlN08sSUFDYjZPLEVBQWE3TyxHQUFTLENBQUVBLElBQzNCMUQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU04QyxLQUFNckIsQ0FBWixDQUdOLENBK0NBLFNBQVNrUixJQUNILElBS0lNLEVBTEYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCxFQUFXelMsRUFBWHlTLE9BVUNBLE9BUkFqUSxFQUFPZ0MsR0FBSTJELEVBQVgzRixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFSzNLLEdBQWE0YSxDQUFBQSxJQUd2QkEsR0FGTVMsRUFBYWxULEVBQVNpSixFQUFTLFlBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLElBQW9CUCxFQUFXdUssT0FBT2pCLFVBQVcsQ0FBN0J0SixJQUN6QnRLLEdBQU1oQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTW1PLEVBQVNDLEtBQVQsRUFBa0J2QixFQUFTLE9BQVQsR0FBdUJpSyxDQUFyRCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDUGxULEVBQVNpSixFQUFTLFdBQVQsSUFBNEJ6RyxFQUFPcE0sUUE5SGpELEVBOEg2RDRKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRcVEsU0FKekZvQyxFQUFTLEVBT0pBLENBQ1QsQ0FFTyxNQUFBLENBQ0w1SCxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDQTdKLFFBQUFBLENBRkssQ0FJVCxPQzVHZ0IsU0FBTXdCLEVBQWdCa0csRUFBdycKICAgICAgICAgICAgICAgICAgICAgICAgYidCMUksR0FDNUQsSUFTSW1ULEVBVGlCNVEsRUFBQUEsRUFBZ0JDLEdBQTdCSSxJQUFBQSxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSUcsSUFBQUEsS0FDSm1CLEVBQVExQixFQUFPK0IsTUFBZkwsSUFDQThOLEtBQTJEdEonCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVd1SyxRQUF0RWpCLFVBQVdPLElBQUFBLFdBQVlKLElBQUFBLFVBQVdKLElBQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFVSyxJQUFBQSxXQUM1Q25KLEtBQW9CUCxFQUFXUSxXQUEvQkQsUUFBU2lGLElBQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxPQUNUQyxLQUFnQnpGLEVBQVc2QixVQUEzQjRELEtBQU0zRCxJQUFBQSxNQW9CZCxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUzRJLElBQ0ExSyxFQUFXd0gsV0FBV21ELFdBQzNCM0ssRUFBVzRLLE9BQU94UCxPQUFsQicKICAgICAgICAgICAgICAgICAgICAgICAgYic0RSxFQUNBNkssRUFBTS9RLEVBQU84RixLQUFiLEVBQ0FJLEVBQVdrQixPQUFPaEcsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xCOEUsRUFFSixDQStCQSxTQUFTNkssRUFBTWpMLEdBQ0ZrTCxFQUFBQyxFQUFZbkwsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU8sQ0FBQSxDQUFuQixDQUFBLENBQ2IsQ0FRUyxTQUFBa0wsRUFBV0UsRUFBa0JDLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYic3Qm5SLEVBQU9nQyxHQUFJNEQsRUFBWDVGLElBQ0NvUixFQUFjRCxFQUFjRCxFQVd0QyxTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZUEsR0FDUmxSLENBQUFBLElBQ0c4RixFQUNBdUwsRUFGSHJSLEVBQU9nQyxHQUFJMkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVgzRixJQUNHOEYsRUFBYzZILEVBQVN1RCxHQUN2QkcsRUFBY3ZMLEVBQVFJLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidXd0gsV0FBVzRELE9BQWxELEdBQ29CeEwsRUFBUSxHQUVSdUwsS0FDUEgsRUFBQUssRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09MLEVBQVVHLENBQWpCLEdBRWYsQ0FFTyxPQUFBSCxDQUNULEVBdkJ1REEsQ0FBTixFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInN0NoWSxFQUFPeVMsRUFBTSxZQUFiLFlBQXVDbEYsRUFBUyxHQUFBLEVBQVcySyxJQUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBM0QsS0FBQSxFQUNhRixJQUFBRSxHQUFlN1EsRUFBTVQsSUFFdEMsQ0E2QlMsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F5UixFQUFPTCxFQUFrQk0sR0FDMUIsSUFBQUMsRUFBU1AsRUFBV1EsRUFBVUYsQ0FBViwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDcEJHLEVBQVMvQixFQUFmLEVBRU8sT0FES3NCLEdBQUF4RixFQUFRaUcsR0FBUy9WLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFNQyxFQUFLNFYsQ0FBQSxFQUFXRSxDQUF0QixHQUFnQyxFQUFqRCxHQUEyREgsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ksRUFBSSxDQUFBLEVBRXpGLENBS0EsU0FBU2xRLElBQ0kwUCxFQUFBWSxFQUFBLEVBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsQ0FBZixFQUNYakIsRUFBV3JQLE9BQVgsQ0FDRixDQVNBLFNBQVNxTSxFQUFTdScKICAgICAgICAgICAgICAgICAgICAgICAgYidELEdBTWhCLElBTE0sSUFBQTlKLEVBQVNsQixFQUFXa0IsT0FBT2lHLElBQTNCLEVBRUZ2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0gsRUFBYyxFQUNkK0wsRUFBY0MsRUFBQUEsRUFFUkMsRUFBSSxFQUFHQSxFQUFJM0ssRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU94VCxPQUFRbWUsQ0FBTSxHQUFBLENBQ2xDLElBQUFoTSxFQUFhcUIsRUFBUTJLLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidJak0sTUFDekI2QyxFQUFhOU0sRUFBS29WLEVBQVlsTCxFQUFZLENBQUEsQ0FBeEIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lDbUwsQ0FBakMsRUFFeEIsR0FBS3ZJLEVBQUFBLEdBQVlrSixHQUlmLE1BSGNBLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbEosRUFDQTdDLEVBQUFDLENBSWxCLENBRU8sT0FBQUQsQ0FDVCxDQVVTLFNBQUFtTCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWW5MLEVBQWVrTSxHQUM1QixJQUFBZCxFQUFXeEYsRUFBUWlFLEVBQVc3SixFQUFRLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FSLEdBa0NyQkEsRUFsQzJDQSxFQW9DekMsWUFEVHhNLEVBQVVrRSxFQUFWbEUsUUFDc0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInaVcsRUFBYUMsRUFBQUEsRUFBVzFKLEVBQU8sQ0FBQSxDQUFQLEdBQWtCLEVBQUksQ0FBQycKICAgICAgICAgICAgICAgICAgICAgICAgYid4TSxFQUFRa1csRUFBVzFKLENBQVgsR0FBc0IsSUFuQ3BHa00sT0FBQUEsR0FvQk1kLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BCV0EsRUFzQlhBLEVBRFIxVCxFQUFReVUsV0FBYWpTLEVBQU9nQyxHQUFJMEQsRUFBWDEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRixFQUNiekQsRUFBTzJVLEVBQVUsRUFBR3hGLEVBQVFrRSxFQUFZLENBQUEsR0FBU0wsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMsQ0FBdEMsQ0FBcEIsRUFHTjJCLEdBekI4QkEsQ0FDdkMsQ0FPQSxTQUFTVSxJQUNEJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFBbFAsRUFBTytELEVBQVMsUUFDZixPQUFBN00sRUFBTStSLENBQU4sRUFBY2pKLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTOUksRUFBTW9PLENBQU4sRUFBZXRGLEdBQVNnSixFQUFRcUUsRUFBWSxDQUFBLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBLENBQXBCLENBQ3hELENBa0NBLFNBQVMyQixFQUFVaFcsR0FDVixPQUFBdVYsRUFBWXZWJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNd0ssRUFBV3dILFdBQVc0RCxPQUF0QnBMLEVBQWlDLEVBQUcsQ0FBQyxDQUFFMUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVF5VSxTQUFqRSxDQUNULENBK0JPLE1BQUEsQ0FDTDVKLE1BaE9GLFdBQ0VzSSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYXpLLEVBQVd5SyxXQUN4QnZRLEVBQUksQ0FBRTFCLEVBQWVXLEdBQWVGLEVBQWVELEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQjBSLENBQXBFLENBQ0YsRUE4TkVzQixLQXZNRixTQUFlQyxFQUFjck0sRUFBZXFHLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFjNU8sR0ErSzFELElBQW1CaVUsRUFDWFksRUEvS0RELElBQVNyTSxJQThLRzBMLEVBOScKICAgICAgICAgICAgICAgICAgICAgICAgYidLdUJyRixFQUFQZ0csRUErSzNCQyxFQUFVMUcsRUFBUTZGLEVBQU9LLEVBQVAsRUFBc0JKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUF0QixDQUFBLEVBQ2pCQSxFQUNRLEdBQVhZLEVBQ0FBLEdBQVd6RyxFQUFNbEYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVMsYUFBVCxHQUE2QjdNLEVBQU1vTyxDQUFBLEVBQVN2QixFQUFTLE9BQVQsTUFqTHhEbicKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEVBQUEsRUFDUDBQLEVBQVdPLEVBQU9LLElBQXNCekYsRUFBUGdHLEdBQWUsQ0FBQSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBaEQsR0FHRnpRLEVBQUt4TyxDQUFMLEVBQ01xTixFQUFBNUIsRUFBWW1ILEVBQU9xRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTWdHLENBQXpCLEVBRUt4QixFQUFBNWMsTUFBTytSLEVBQU8sV0FDdkJwRSxFN0V2RicKICAgICAgICAgICAgICAgICAgICAgICAgYidjLEM2RXVGZCxFQUNNbkIsRUFBQTNCLEdBQWFrSCxFQUFPcUcsRUFBTWdHLENBQTFCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NONVUsR0FBWUEsRUFBWixDQUNBLENBSlMsQ0FLYixFQTBMRXdULEtBQUFBLEVBQ0FDLFUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQSxFQUNBTyxNQUFBQSxFQUNBalEsT0FBQUEsRUFDQXFNLFFBQUFBLEVBQ0FzRCxXQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFDQVcsWUFBQUEsRUFDQUYsU0FBQUEsRUFDQVcsY0FsQk8sU0FBZTNXLEVBQTJCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dWLEdBQ2pEQSxFQUFXN2IsR0FBYTZiLENBQUEsRUFBYVUsRUFBMUIsRUFBMENWLEVBQy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxJQUFBb0IsRUFBc0IsQ0FBQSxJQUFSNVcsR0FBZ0JnUSxFQUFRd0YsQ0FBUixFQUFxQicKICAgICAgICAgICAgICAgICAgICAgICAgYid4RixFQUFRZ0csRUFBVSxDQUFBLENBQUEsQ0FBbEIsRUFDbkRMLEVBQXNCLENBQUEsSUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1IzVixHQUFpQmdRLEVBQVF3RixDQUFSLEVBQXFCeEYsRUFBUWdHLEVBQVUsQ0FBQSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxDQUFsQixFQUMxRCxPQUFPWSxHQUFlakIsQ0FDeEIsRUFjRVQsV0FBQUEsQ0FaSyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidjVCxhQ2xRZ0IsU0FBWTVRLEVBQWdCa0csRUFBd0IxSSxHQUNsRSxJQWtCSStVLEVBVUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUtBQyxFQUtBNUUsRUF0Q2lCOU4sRUFBQUEsRUFBZ0JDLEdBQTdCSSxJQUFBQSxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUcsSUFBQUEsS0FDSm1TLEVBQVN4TSxFQUFUd00sS0FDQWQsRUFBc0NjLEVBQXRDZCxZQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYUYsRUFBeUJnQixFQUF6QmhCLFNBQVVULEVBQWV5QixFQUFmekIsV0FDdkI5QyxLQUF3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JqSSxFQUFXa0IsUUFBbkMrRyxTQUFVRCxJQUFBQSxVQUNWeUUsRUFBWW5WLEVBQVptViwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUFDRkMsRUFBVTVTLEVBQU9nQyxHQUFJMkQsRUFBWDNGLEVBQ1Y2UyxFQUFVN1MsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgYidnQyxHQUFJMEQsRUFBWDFGLEVBQ1Y4UyxFQUFVMWUsRUFBTzJlLEVBQWEsQ0FBQSxDQUFiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNqQkMsRUFBVTVlLEVBQU8yZSxFQUFhLENBQUEsQ0FBYixFQUtuQkUsRUFBWXpWLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRekosT0FBUyxFQVU3Qm1mLEVBQVlELEVBK0JoQixTQUFTL0YsSUFDUHNGLEVBQWF0RScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBVyxDQUFBLEdBQ3hCdUUsRUFBYWpWLEVBQVFpVixRQUNyQjVFLEVBQWFyUSxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3FRLFFBQ3JCMEUsRUFBYWpCLEVBQWIsRUFFQSxJQUFNeEwsRUFBUXZKLEVBQU8wVyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVyxFQUFHTixFQUFVSixFQUFXQyxFQUFhLENBQWhELEVBRWhCMU0sSUFBVW1OLElBQ0RBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFBbk4sRUFDWjRNLEVBQUs5QixXQUFMLEVBRUosQ0FNQSxTQUFTdUMsSUFDRlosSUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FqQixLQUNoQi9RLEUxQnJGaUMsSTBCcUZqQyxDQUVKLENBNEVTLFNBQUF3UyxFQUFhNUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWVpRixHQUNuQyxJQUFNalYsRUFBU3NXLElBQWE3RSxFQUFhLEVBQUEsRUFBSUMsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ3ZDc0UsRUFBU2lCLEVBQWtCSCxFQUFZOVcsR0FBV2dRLEVBQU8sQ0FBSyxFQUFBLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FLOEcsRUFBVyxFQUFJUixHQUFXN0UsRUFBZixFQUFuRCxFQUU1QixNQUFTLEtBQVR1RSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBZVUsR0FDYixDQUFFL1csR0FBb0I4VixJQUFlRixFQUFVLENBQUV2RixHQUFRLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidyREEsRUFBTyxFQUFJb0csRUFJZm5CLEVBQWNlLEVBQU9rQixFQUFNbEIsQ0FBTixDQUM5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsQ0FnQlMsU0FBQWlCLEVBQWtCakIsRUFBY3pKLEVBQWM0SyxHQUNoRCxJQUNHeE4sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInK0JELE9BaENGcUksRUFBQSxHQUFjUCxFQUFBLElBQ1g5SCxFQTBDVixTQUFrQ3FNLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidoQyxHQUFLVSxHQUFpQyxTQUF0QnJWLEVBQVF5VSxXQUF3QkUsSUFBU2MsRUFHdkQsSUFGJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsSUFBTS9CLEVBQVdVLEVBQWpCLEVBRVFWLElBQWFELEVBQVlrQixFQUFNLENBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWxCLEdBQTRCalcsR0FBU2lXLEVBQU0sRUFBR25TLEVBQU9wTSxPQUFTLEVBQUcsQ0FBRScKICAgICAgICAgICAgICAgICAgICAgICAgYic0SixFQUFRaUUsTUFBdEMsR0FDakQwUSxFQUFBYyxFQUFZLEVBQUVkLEVBQU8sRUFBRUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBSTNCLE9BQUFBLENBQ1QsRUFwRDJDQSxNQUV4QkEsSUFDRnpKLEVBQUF5SixFQUNBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBQXJNLEVBQ0F3TixFQUFBLENBQUEsR0FHUm5CLEVBQU8sR0FBWUksRUFBUEosRUFLWCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBSkdNLEdBQWF2VyxDQUFBQSxHQUFTLEVBQUdpVyxFQUFNekosRUFBTSxDQUFBLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FmLEdBQXlCeE0sQ0FBQUEsR0FBU3FXLEVBQVU3SixFQUFNeUosRUFBTSxDQUFBLENBQXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUd4RFMsRUFDSVUsRUFDSG5CLEVBQU8sRUFBSSxFQUFJSyxFQUFhM0UsR0FBV0EsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVkyRSxFQUNuREwsRUFDTTNVLEVBQVFpRSxPQUNYMFEsRUFBTyxFQUFJSSxFQUFXLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V0QixDQUFBLEVBVEY1RSxFQUFTNEYsRUFBUXBCLENBQUEsQ0FBakIsRUFhSm1CLEdBQVknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkIsSUFBU3pKLElBQ3hCeUosRUFBT3hFLEVBQVM0RixFQUFRN0ssQ0FBQSxHQUFXeUosRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU96SixFQUFPLEdBQUssTUFJbkR5SixFQUFBLENBQUEsRUFHRkEsQ0FDVCxDQTZCQSxTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBU2tCLEVBQU12TixHQUNiLE9BQU84TSxHQUFXOU0sRUFBUTBNLEdBQWVBLEdBQWMsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUkxTSxDQUM3RCxDQVVBLFNBQVN3TCxJQUdDLElBRlIsSUFBSXRkLEVBQU13ZSxHQUFlNScKICAgICAgICAgICAgICAgICAgICAgICAgYidFLEVBQUEsR0FBZ0JnRixHQUFVSCxFQUFZLEVBQUk1RSxHQUUzRDhFLEdBQW1CLEVBQVIzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsS0FDWixHQUFBaWQsRUFBWXVCLEVBQWEsRUFBRyxDQUFBLENBQTVCLElBQXVDdkIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVlqZCxFQUFLLENBQUEsQ0FBTCxFQUFjLENBQ3BFQSxDQUFBLEdBQ0EsS0FDRixDQUdGLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidPQUFPdUksRUFBT3ZJLEVBQUssRUFBR3dlLEVBQWEsQ0FBckIsQ0FDaEIsQ0FTQSxTQUFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJzdFLEVBQVNGLEdBQ2hCLE9BQU9sUixFQUFPcVIsRUFBUyxFQUFJSCxFQUFPSSxFQUFVSiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTSxFQUFHOEUsRUFDdkQsQ0FTQSxTQUFTZ0IsRUFBUXpOLEdBQ2YsT0FBTzhILElBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidIcFMsRUFBS3NLLEVBQU95TSxDQUFQLEVBQ0w1VyxJQUFrQjRXLEdBQVR6TSxFQUFvQjBNJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFhLEVBQUkxTSxHQUFVK0gsQ0FBL0MsQ0FDZixDQW1CQSxTQUFTMkYsRUFBVTFOLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNaQSxJQUFVbU4sSUFDREMsRUFBQUQsRUFDQUEsRUFBQW5OLEVBRWhCLENBZ0JBLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTOEgsSUFDUCxNQUFPLENBQUV2WSxHQUFhbUksRUFBUWxFLEtBQXJCLEdBQWdDa0UsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1E0SSxZQUNuRCxDQU9BLFNBQVN5SyxJQUNBN1EsT0FBQUEsRUFBTytCLE1BQU1DLEdBQUknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUU5TyxFQUFRQyxHQUEzQjZNLEdBQTRDLENBQUMsQ0FBRXhDLEVBQVFpVyxpQkFDaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFLENBRU8sTUFBQSxDQUNMcEwsTUE1U0YsV0FDTzZFLEVBQUEsRUFDTDlNLEVBQUksQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VqQixFQUFlRCxFMUJ4RGMsTTBCd0Q0QmdPLENBQS9ELEVBQ0E5TSxFQUFJZixHQUFlOFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQW5CLENBQ0YsRUF5U0VPLEdBalFPLFNBQUlDLEVBQTBCQyxFQUEwQnJXLEdBQzFELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJQUVHdUksRUFGRCtLLEtBSVEsQ0FBQSxHQUZQL0ssRUFBUXVOLEVBRFJsQixFQWlDVixTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZ0J3QixHQUNkLElBQUk3TixFQUFRbU4sRUFFUCxDQUFBLElBQ09ZLEVBQVcxWCxFQUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbEIvRyxFQUFVdWUsQ0FBVixHQUNHRyxFQUEwQkgsRUFBUXRJLE1BQU8saUJBQWYsR0FBcycKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEdBQTVEd0ksRUFBSkMsRUFBQSxHQUFlM1gsRUFBZjJYLEVBQUEsR0FFYSxNQUFkRCxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbUMsTUFBZEEsRUFDaEIvTixFQUFBc04sRUFBa0JILEdBQVksRUFBS1ksR0FBQUEsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWMsQ0FBQzFYLEdBQVUsSUFBTThXLENBQWxFLEVBQ2dCLE1BQWRZLEVBQ1YvTixFQUFRMycKICAgICAgICAgICAgICAgICAgICAgICAgYidKLEVBQVN3UixFQUFTLENBQUN4UixDQUFELEVBQVkyVyxFQUFTLENBQUEsR0FDdkIsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLElBQ1YvTixFQUFRa04sRUFBUyxDQUFBLEtBR25CbE4sRUFBUThNLEVBQVNlLEVBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncFgsRUFBT29YLEVBQVMsRUFBR3BCLENBQVosQ0FDcEMsQ0FFTyxPQUFBek0sQ0FDVCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYiduRHlCNk4sT0FHQUMsR0FBa0I5TixJQUFVbU4sS0FDL0NPLEVBQVUxTixDQUFWLEVBQ0E0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ00sRUFBS1IsS0FBTUMsRUFBTXJNLEVBQU9vTixFQUFXM1YsQ0FBbkMsRUFHTixFQXdQRXcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVyxPQTlPRixTQUFpQjNDLEVBQXFCdEIsRUFBbUJrRSxFQUFnQnpXLEdBQ3ZFMkksRUFBVycKICAgICAgICAgICAgICAgICAgICAgICAgYic0SyxPQUFPaUQsT0FBUTNDLEVBQWF0QixFQUFVa0UsRUFBTSxXQUNyRCxJQUFNbE8sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1F1TixFQUFNWCxFQUFLL0UsUUFBU2lFLEVBQWQsQ0FBQSxDQUFBLEVBQ3BCNEIsRUFBVWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVVuWCxFQUFLc0ssRUFBT3lNLENBQVosRUFBeUJ6TSxDQUE3QyxFQUNBdkksR0FBWScKICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBQVosQ0FDQSxDQUpGMkksQ0FLRixFQXlPRTRNLFFBQUFBLEVBQ0FFLFFBQUFBLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBRCxZQUFBQSxFQUNBekIsT0FBQUEsRUFDQWtDLFNBQUFBLEVBQ0FTLFNBL0JGLFNBQW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQjlILEdBQ2pCLE9BQU9BLEVBQU8rRyxFQUFZRCxDQUM1QixFQThCRXRGLFFBQUFBLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBNEYsT0FBQUEsRUFDQVcsT0F4REYsU0FBaUI5QyxHQUVmLE9BRE10RSxFQUFVNEYsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0svRSxRQUFTeUQsQ0FBZCxFQUNUeUIsRUFBVXRXLEVBQU91USxFQUFTLEVBQUd5RixDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkIsRUFBZ0N6RixDQUNuRCxFQXNERWMsU0FBQUEsRUFDQWlELE9BQUFBLENBZEssQ0FnQicKICAgICAgICAgICAgICAgICAgICAgICAgYidULFNDM1ZnQixTQUFRN1EsRUFBZ0JrRyxFQUF3QjFJLEdBQ3hELElBd0JGMlcsRUFLQUMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBN0JFM1csRUFBUXNDLEVBQWdCQyxHQUN0QkksRUFBbUIzQyxFQUFuQjJDLEdBQUk5TCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZW1KLEVBQWZuSixLQUFNaU0sRUFBUzlDLEVBQVQ4QyxLQUNWaEssRUFBa0JpSCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBbEJqSCxRQUFTK1AsRUFBUzlJLEVBQVQ4SSxLQUNUeUIsRUFBeUI3QixFQUF6QjZCLFNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FVMkYsRUFBZXhILEVBQWZ3SCxXQUNGMkcsRUFBdUJ0TSxFQUEvQm1FLE9BQXFCbEUsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVVELEVBQVZDLE1BS3pCc00sRUFBVUQsRUFLVmxJLEVBQU9wRSxFQUFTb0UsS0FLaEJDLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPckUsRUFBU3FFLEtBZWRGLEVBQXNDLEdBSzVDLFNBQVM3RCxJQWlCUCxJQUFNa00sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVUvVyxFQUFRME8sT0FFbkJxSSxDQUFBQSxHQUFlcEksR0FBUUMsSUF1RDVCa0ksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVVELEdBQWV2YixFQUFRLE1BQU92QyxFQUFRMlYsTUFBdkIsRUFDekJDLEVBQVVxSSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYSxDQUFBLEdBQ3ZCcEksRUFBVW9JLEVBQWEsQ0FBQSxHQUNiTCxFQUFBLENBQUEsRUFFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1Z0ZCxFQUFReWQsRUFBUyxDQUFFbkksRUFBTUMsRUFBekIsRUFDRWlJLEdBQWVwZCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUXFkLEVBQVN0TSxDQUFULEdBekRwQm1FLEdBQVFDLElBQ1hoVSxHQUFROFQsRUFBUSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBRUMsS0FBQUEsRUFBTUMsS0FBQUEsQ0FBUixDQUFoQixFQUNTL1MsR0FBQWliLEVBQVNDJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFVLEdBQUssTUFBeEIsRUFDVDVkLEVBQVUyZCxFQUFXRixFQUFxQi9QLEdBQW1CN0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQUFBLEVBQVE0TSxTQUFyRSxFQUVLbUssSUE0QlBuVSxFQUFJLENBQUUxQixFQUFlRScKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBYU0sRUFBZUssRTNCdEhkLE0yQnNIeUQ2QixDQUE1RixFQUNBOU0sRUFBTThYLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNLFFBQVNoWSxFQUFPc2YsRUFBSSxHQUFKLENBQTVCLEVBQ0FwZixFQUFNNlgsRUFBTSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUUFBUy9YLEVBQU9zZixFQUFJLEdBQUosQ0FBNUIsRUE1Qld0UyxFQUFBLEVBQ1B4SSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBYyxDQUFFdVQsRUFBTUMsR0FBUWxKLEdBQWU4RSxFQUFNbEgsRUFBbkQsRUFDTVAsRTNCJwogICAgICAgICAgICAgICAgICAgICAgICBiJzNHMEIsaUIyQjJHSjRMLEVBQU1DLENBQTVCLElBOUJWaE0sRUFBSWpCLEVBQWUrUSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbkIsQ0FDRixDQUtBLFNBQVNBLElBQ0MxUixFQUFBLEVBQ0Y2SixFQUFBLENBQ1IsQ0E2QicKICAgICAgICAgICAgICAgICAgICAgICAgYidBLFNBQVM3SixJQUNQZixFQUFNZSxRQUFOLEVBQ0ExRCxFQUFhd1osRUFBU0YsQ0FBdEIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBRUtELEdBQ0hwYSxFQUFRc2EsRUFBYyxDQUFFbEksRUFBTUMsR0FBU2tJLENBQXZDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBbkksRUFBT0MsRUFBTyxNQUVkNVQsRUFBaUIsQ0FBRTJULEVBQU1DLEdBQVF2SSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBakMsQ0FFSixDQWdCQSxTQUFTNlAsRUFBSUMsR0FDQWpHLEVBQUFnRyxHQUFJQyxFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFBLENBQWIsQ0FDYixDQXVCQSxTQUFTYSxFQUFhckksR0FLcEIsT0FBT2xTLEdBSk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLGtCQUFtQjFELEVBQVFrZSxNQUEzQixLQUFzQ3RJLEVBQU81VixFQUFRNFYsS0FBTzVWLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRNlYsTUFBcEUsa0lBRUc1TyxFQUFRa1gsV0NyTFQseUZEbUxoQixPQUtGLENBS0EsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVN0VCxJQUNQLElBRVE4UixFQUNBeUIsRUFDQUMsRUFDQUMsRUFMSDFJLEdBQVFDLEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNMdEcsRUFBWTlGLEVBQU84RixNQUNuQm9OLEVBQVl4RixFQUFXc0YsUUFBdkIsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgYicyQixFQUFZakgsRUFBV29GLFFBQXZCLEVBQ0E4QixFQUF3QixDQUFBLEVBQVoxQixHQUFrJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JwTixFQUFRb04sRUFBWTVNLEVBQUt3TyxLQUFPeE8sRUFBSzZGLEtBQ25FMEksRUFBd0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsRUFBWkYsR0FBMEJBLEVBQVI3TyxFQUFvQlEsRUFBS3lPLE1BQVF6TyxFQUFLOCcKICAgICAgICAgICAgICAgICAgICAgICAgYidGLEtBRTFFRCxFQUFLNkksU0FBVzlCLEVBQVksRUFDNUI5RyxFQUFLNEksU0FBV0wsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ksRUFFZC9iLEVBQUF1VCxFQUFNOUksR0FBWXVSLENBQWxCLEVBQ0FoYyxFQUFBd1QsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU0vSSxHQUFZd1IsQ0FBbEIsRUFFZHRVLEUzQjlMa0MsaUIyQjhMTjRMLEVBQU1DLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNOEcsRUFBV3lCLENBQW5ELEVBRUosQ0FFTyxNQUFBLENBQ0x6SSxPQUFBQSxFQUNBN0QsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01BQUFBLEVBQ0E3SixRQUFBQSxFQUNBNEMsT0FBQUEsQ0FKSyxDQU1ULFdFdExnQixTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVXBCLEVBQWdCa0csRUFBd0IxSSxHQUNoRSxJQVNJeVgsRUFLQUMsRUFkdUJuVixFQUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBZ0JDLEdBQW5DSSxJQUFBQSxHQUFJOUwsSUFBQUEsS0FBTWlNLElBQUFBLEtBQ1pFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFXRCxHQUFpQmhELEVBQVFpRCxTQUFVVCxFQUFPMFQsR0FBR3BmLEtBQU0wTCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUSxHQUF4QkEsRUFpSHBELFNBQTJCaUIsR0FDbkIsSUFBRW9MLEVBQVF0RSxFQUFSc0UsSScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1JBLEdBQU9uVCxFQUFPbVQsRUFBSyxRQUFvQixJQUFQcEwsRUFBaEMsR0FBQSxFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsRTdCbklvQyxtQjZCbUlOVSxDQUE5QixDQUNGLENBckhrQyxFQUMxQlcsRUFBYW5CLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFibUIsU0FDQW1HLEVBQXlDN0IsRUFBekM2QixTQUFzQjVCLEtBQW1CRCxFQUEvQjZCLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidVQUFZNUIsS0FBTW1HLElBQUFBLE9BQzVCNkksRUFBYTNYLEVBQWIyWCxTQWdCSkMsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VCLFVBQWJELEVBNkNkLFNBQVNFLElBQ0Z6VCxLQUFjc0UsRUFBV2tCLE9BQU8rRyxhQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMUIxTixFQUFBMU0sTUFBTyxDQUFFeUosRUFBUThYLGFBQWpCLEVBQ1RKLEVBQVVELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidVRyxFQUFVLENBQUEsRUFDdkJoVSxFQUFBLEVBQ1BiLEVBQU1iLEVBQU4sRUFFSixDQU9TJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFBMkIsRUFBT2tVLEdBQ2RILEVBQVUsQ0FBQyxFQURHRyxFQUFvQixLQUFBLElBQXAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkEsRUFBTyxDQUFBLEVBQ1JBLEdBQ05uVSxFQUFBLEVBRUFRLE1BQ0xuQixFQUFTWSxNQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVCxFQUNBZCxFQUFNWixFQUFOLEVBRUosQ0FNQSxTQUFTNlYsSUFDQUosSUFDTEgsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dDLEVBQVU3VCxFQUFPLENBQUEsQ0FBUCxFQUFpQmdVLEVBQXRDLEVBRUosQ0FLQSxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU2pVLElBQ0ZrTCxJQUNValcsRUFBQWlXLEVBQVF4SCxHQUFjLENBQUVzUSxDQUF4QixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDYnhjLEVBQWMwVCxFQUFRakosR0FBWTdGLEVBQVE4SSxLQUFNOE8sRUFBVSxPQUFTLFFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FuRSxFQUVKLENBa0JBLFNBQVM3TixFQUFRekIsR0FDVEQsRUFBUUssRUFBV2tCLE9BQU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxNQUFPdkIsQ0FBekJJLEVBQ0x6RixFQUFBaUIsSUFBS21FLEdBQVMsQ0FBQ3JNLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidjcU0sRUFBTUcsTUFBTzZDLEVBQTNCLEdBQXdEckwsRUFBUWlELFFBQS9FLENBQ1gsQ0FFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ08sTUFBQSxDQUNMNEgsTUExR0YsV0FDTzhNLElBWUEzWCxFQUFRaVksY0FDTG5oQixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQTZSLEVBQU0sd0JBQXlCLFNBQUt4USxHQUN4Q3NmLEVBQXFCLGVBQVh0ZixFQUFFYixLQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDRDBnQixFQUFBLENBQ1gsQ0FISSxFQU1IaFksRUFBUWtZLGNBQ0xwaEIsRUFBQTZSLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNLG1CQUFvQixTQUFLeFEsR0FDbkN1ZixFQUFxQixZQUFYdmYsRUFBRWIsS0FDRDBnQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBQSxDQUNYLENBSEksRUFNSGxKLEdBQ0doWSxFQUFBZ1ksRUFBUSxRQUFTLFdBQ1g4SScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQUMsRUFBQSxFQUFTaFUsRUFBTyxDQUFBLENBQVAsQ0FDbkIsQ0FGSSxFQUtSakIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUksQ0FBRXpCLEVBQVlXLEdBQWNKLEdBQWlCdUIsRUFBU2dCLE1BQTFELEVBQ0FyQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBSXpCLEVBQVk0SSxDQUFoQixFQS9CRStFLEdBQVUxVCxFQUFjMFQsRUFBUXBKLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidlNkUsRUFBU0MsTUFBTWxILEVBQXRDLEVBQ3hCc1UsR0FBV0MsRUFBWCxFQUNPalUsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFFWCxFQW9HRTVDLFFBQVNpQyxFQUFTYSxPQUNsQitULEtBQUFBLEVBQ0FoVSxNQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDQU8sU0FBQUEsQ0FMSyxDQU9ULFFDdEpnQixTQUFPNUIsRUFBZ0JrRyxFQUF3QicKICAgICAgICAgICAgICAgICAgICAgICAgYicxSSxHQUM3RCxJQUFRNEMsRUFBT0wsRUFBZ0JDLENBQWhCLEVBQVBJLEdBaUJSLFNBQVN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsRUFBT0EsR0FDZHpQLEVBQVdrQixPQUFPdFIsUUFBUyxTQUFTK1AsR0FDbEMsSUFBTW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInSSxFQUFNdFcsR0FBeUJtTyxFQUFNaUIsV0FBYWpCLEVBQU1HLE1BQU8sS0FBaEMsRUFFaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDZ0ksR0FBT0EsRUFBSTRILEtBQ05ELEVBQUFBLEVBQU8zSCxFQUFLbkksQ0FBWjhQLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWLENBTkZ6UCxDQU9GLENBU1MsU0FBQW9HLEVBQVFxSixFQUFnQjNILEVBQXVCbkksR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ3REQSxFQUFNM00sTUFBTyxhQUFjeWMsRUFBd0MzSCwrQkFBQUEsRUFBSTRILElBQVcsSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsR0FBSSxDQUFBLENBQXRGLEVBQ1N2YyxHQUFBMlUsRUFBSzJILEVBQVEsT0FBUyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdEIsQ0FDWCxDQUVPLE1BQUEsQ0FDTHROLE1BbkNGLFdBQ083SyxFQUFRbVksUUFDWHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVixFQUFJUixHQUF1QnhMLEVBQU9rWSxFQUFRLENBQUEsQ0FBZixDQUEzQixFQUNJbE0sRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsQ0FBRTFCLEVBQWVTLEVBQWVELEdBQWlCOUssRUFBT3VoQixFQUFPLENBQUEsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1AsQ0FBeEQsRUFFUixFQStCRW5YLFFBQVNwSyxFQUFPdWhCLEVBQU8sQ0FBQSxDQUFQLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUZYLENBSVQsU0N4Q2dCLFNBQVEzVixFQUFnQmtHLEVBQXdCMUksR0FDOUQsSUFTSWlELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUtBbEQsRUFkaUJ3QyxFQUFBQSxFQUFnQkMsR0FBN0JJLElBQUFBLEdBQUlHLElBQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUNLbUIsRUFBVTFCLEVBQW5CK0IsTUFBU0wsSUFDVGdSLEVBQVN4TSxFQUFUd00sS0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FkLEVBQW9EYyxFQUFwRGQsWUFBYUYsRUFBdUNnQixFQUF2Q2hCLFNBQVVXLEVBQTZCSycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBN0JMLGNBQWVyQixFQUFjMEIsRUFBZDFCLFVBQ3hDNkIsRUFBVTdTLEVBQU9nQyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSTBELEVBQVgxRixFQWVaNlYsRUFBVyxFQW1CZixTQUFTOUIsRUFDUDNDLEVBQ0F0QiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQWtFLEVBQ0E4QixFQUNBQyxHQUVBLElBTVF6SyxFQU5GNUMsRUFBT2tKLEVBQWIsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVU1vRSxHQVJBQyxFQUFBLEVBRURqQyxDQUFBQSxHQUFZbkIsR0FBYVIsRUFBZixJQUNQJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsRUFBU3pMLEVBQVd1SyxPQUFPYixXQUEzQixFQUNBdEUsRUFBUzlPLEdBQU00VSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQUFnQk8sRUFBT2hXLEdBQU9FLEVBQUt1VixDQUFBLEVBQWdCTyxJQUFVLEVBQ3BFUCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQXNCLEVBQUt6QixXQUFZL0ssRUFBV3dILFdBQVd3RyxPQUFROUMsRUFBY08sQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzVDekwsQ0FBakIsRUFBd0VvRixHQUdyRXhQLEdBQW9CNE0sRUFBTTBJLEVBQWEsQ0FBdkMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBRVJ5RSxFQUFBLEVBQ0EvRixFQUFBa0csRUFBYSxFQUFJbEcsR0FBWXBVLEdBQUtHLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFLdVYsRUFBYzFJLEdDaEV2QyxJQU9ELEdEeURnQixFQUM3Qm5MLEVBQUF1WSxFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JWLEVBQUFELEdBQWlCc1AsRUFBVW9HLEVBQU85aEIsRUFBT2dOLEVBQVFzSCxFQUFNMEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWEyRSxDQUFsQyxFQUFpRCxDQUFuRixFQUVYclUsRUFBS3ZPLEVBQUwsRUFDQW9OLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFNakIsRUFBTixFQUNBbUIsRUFBUzFNLE1BQVQsQ0FDRixDQUtBLFNBQVNtaUIsSUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1B4VSxFbkYxRmdCLENtRjBGaEIsRUFDQW5FLEdBQVlBLEVBQVosRUFDQWdELEVBQU1oQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBTixDQUNGLENBVUEsU0FBUzZCLEVBQVFzSCxFQUFjeU4sRUFBWUosRUFBa0M5VSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDM0UsSUFBTWlRLEVBQVdVLEVBQWpCLEVBRU1oSixHQURXRixHQUFTeU4sRUFBS3pOLElBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3dDaEIwTixFQXhDaUNuVixHQXlDeENvVixFQUFlN1ksRUFBZjZZLFlBQ1lBLEVBQVlELEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFNLEVBQUkzYSxLQUFLNmEsSUFBSyxFQUFJRixFQUFHLENBQWpCLEdBekNkbEYsR0FBYScKICAgICAgICAgICAgICAgICAgICAgICAgYicyRSxFQUV6QzdFLEVBQVdFLEVBQVd0SSxDQUF0QixFQUVLaUssR0FBVyxDQUFFa0QsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UxRCxNQUNuQndELEdDekdhLEdEMkdwQmhhLEVBQUsrTSxDQUFMLEVDekgwQixJRDBIckInCiAgICAgICAgICAgICAgICAgICAgICAgIGInbUwsRUFBQXJDLEVBQVVXLEVBQWUsQ0FBQSxFQUF6QixFQ25IZSxJRG1IcUMsQ0FBQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBTzlVLEVBQVUsQ0FBQSxDQUFyRSxFQUdkLENBS0EsU0FBUzBZLElBQ0Z4VixHQUNIQSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBU2EsT0FBVCxDQUVKLENBS0EsU0FBU0EsSUFDRmIsR0FBWSxDQUFFQSxFQUFTbUIsYUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ3BCcVUsRUFBQSxFQUNBQyxFQUFBLEVBRVYsQ0FjTyxNQUFBLENBQ0w3TixNQTVHRixXQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDRWpJLEVBQUl6QixFQUFZc1gsQ0FBaEIsRUFDQTdWLEVBQUksQ0FBRWpCLEVBQWVELEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQm9DLENBQXRDLENBQ0YsRUEwR0U5QyxRQUFTeVgsRUFDVGxDLE9BQUFBLEVBQ0F6UywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBQUEsQ0FKSyxDQU1ULE9FeElnQixTQUFNdEIsRUFBZ0JrRyxFQUF3QjFJLEdBQzVELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJQVNJK1ksRUFLQUMsRUFLQUMsRUFLQUMsRUFLQUMsRUFXQUMsRUFLQTVCLEVBS0FuYixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FsRCtCa0csRUFBQUEsRUFBZ0JDLEdBQTNDSSxJQUFBQSxHQUFJRyxJQUFBQSxLQUFNak0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQUFBLEtBQU15SixJQUFBQSxPQUNoQmdFLEVBQVUvQixFQUFWK0IsTUFDQTJRLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidxRXhNLEVBQXJFd00sS0FBTTVCLEVBQStENUssRUFBL0Q0SyxPQUFRcEQsRUFBdUR4SCxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdkR3SCxXQUF3QjFGLEVBQStCOUIsRUFBM0M2QixTQUFZQyxNQUFrQnNDLEVBQWFwRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBdEIyUSxNQUFTdk0sT0FDeEQ3RCxLQUFvQlAsRUFBV1EsV0FBL0JELFFBQVNpRixJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsT0FDVGtHLEVBQStCYyxFQUEvQmQsWUFBYVMsRUFBa0JLLEVBQWxCTCxjQStCakJ5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsRUFBVyxDQUFBLEVBZ0NmLFNBQVM1SixJQUNELElBQUVELEVBQVN6UCxFQUFUeVAsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ1I4SixFQUFTLENBQUU5SixDQUFYLEVBQ0F5SixFQUFrQixTQUFUekosQ0FDWCxDQVVBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFTK0osRUFBZXJoQixHQUd0QixJQUNRc2hCLEVBNFBZcGQsRUFDWnFkLEVBaFFTTixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxDQUFBLEVBRVY1QixJQUNDaUMsRUFBVUUsRUFBY3hoQixHQTRQWmtFLEVBMVBBbEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUVrRSxPQTJQZHFkLEVBQVcxWixFQUFYMFosT0FFQzNmLEdBQVNzQyxNQUFhNkssRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXRCLE1BQW1ESixFQUFuRCxHQUNBNFMsR0FBWTNmLEdBQVNzQyxFQUFRcWQsQ0FBUnJkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQTlQTW9kLENBQUFBLEdBQWF0aEIsRUFBRXloQixTQUN4QzFKLEVBQVdtRCxTQVdoQnYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVyxFQUFTM0UsRUFBRyxDQUFBLENBQVosR0FWQWtFLEVBQWdCb2QsRUFBVWpQLEVBQVF2UycKICAgICAgICAgICAgICAgICAgICAgICAgYicsT0FDbENraEIsRUFBZ0I1VSxFQUFNQyxHQUFJLENBQUU5TyxFQUFRQyxHQUFwQixFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NqQixFQUFBLEtBRVZuaUIsRUFBQXVGLEVBQVEyTCxHQUFxQjZSLEVBQWV2TyxFQUE1QywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQXhVLEVBQUF1RixFQUFRNEwsR0FBbUI2UixFQUFheE8sRUFBeEMsRUFDTjRKLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidLcFIsT0FBTCxFQUNBd1AsRUFBT3hQLE9BQVAsRUFDQWlXLEVBQU01aEIsQ0FBTixJQU1SJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQU9BLFNBQVMwaEIsRUFBZTFoQixHQU10QixJQXNHb0JBLEVBQ002aEIsRUFDcEJDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBQyxFQVlvQi9oQixFQTFIbkJvTSxFQUFNQyxHckZySE8sQ3FGcUhiLElBQ0xELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNTCxJckZ0SFksQ3FGc0hsQixFQUNBbkIsRWpDdElrQyxNaUNzSWxDLEdBR0c1SyxFQUFFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dpQixhQUNBaEIsR0FDSGpFLEVBQUsxQixVQUFXdUYsRUFBMEJxQixFQUFXamlCLENBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBaU56Q21oQixHQUFZOVcsRUFBT2dDLEdBQUkwRCxFQUFYMUYsRXhCcFdSLEV3Qm9XdycKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBak54RCxFQUVNNlgsRXhCOUljLEl3QjhJQUMsRUFBVW5pQixDQUFBLEVBQ3hCb2lCJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFjakIsS0FBZUEsRUFBV3pFLE1BRXpDd0YsR0FBV0UsSUFDZFIsRUFBTTVoQixDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTixFQUdlaWhCLEVBQUEsQ0FBQSxFQUNqQnJXLEVqQ3BKZ0MsVWlDb0poQyxFQUNBakcsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMzRSxDQUFULEdBeUdHa0csRUFBSytiLEVBRGNqaUIsRUF2R09BLEVBd0cxQixFQUF3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JrRyxFQUFLK2IsRUFBV2ppQixFQUFHLENBQUEsQ0FBZCxDQUFBLElBaEJoQkEsRUF2RlEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQXdGRjZoQixFQUFlaGEsRUFBakN3YSxpQkFDRlAsRUFBUXppQixHQUFVd2lCLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsQkUsRUFBUUQsR0FBU0QsRUFBV0UsT0FBUyxFQUNyQ08sR0FBVVIsRUFBUUQsRUFBV1MsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01BQVEsQ0FBQ1QsSUFBZ0IsR0EzRnhEYixFQTRGRzlhLEVBQUsrYixFQUFXamlCLEVBQWgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixHQUEwQndoQixFQUFjeGhCLENBQUEsRUFBTXNpQixFQUFRUCxHQTNGekRwZCxFQUFTMycKICAgICAgICAgICAgICAgICAgICAgICAgYidFLENBQVQsR0FHTixDQVVBLFNBQVMyaEIsRUFBYTNoQixHQU1wQixJQXlDTXVpQixFQUNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJzlHLEVBQ0EzUCxFQWhERE0sRUFBTUMsR3JGeEpTLENxRndKZixJQUNIRCxFQUFNTCxJckYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneEtRLENxRndLZCxFQUNBbkIsRWpDdktrQyxTaUN1S2xDLEdBR0dvVyxJQTBDQ3ZGLEVBcycKICAgICAgICAgICAgICAgICAgICAgICAgYidFUixTQUE2QjhHLEdBQzNCLE9BQU90RyxFQUFnQnBWLEVBQUFBLEdBQU0wYixDQUFBLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FhMWMsRUFDeENLLEVBQUtxYyxDQUFBLEdBQWUxYSxFQUFRMmEsWUFBYyxLQUMxQ3pCLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTNUUsRUFBQUEsRUFBVzVMLEVBQVd1SyxPQUFPbEIsWUFBZS9SLEVBQVE0YSxlQUFpQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFGdEMsQ0FJNUMsRUEzRTBDRixFQW1EMUMsU0FBMEJ2aUIsR0FDeEIsR0FBS3FLLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPZ0MsR0FBSTJELEVBQVgzRixHQUFxQixDQUFFOFcsRUFBVyxDQUMvQixJQUFBblYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU9tVyxFQUFVbmlCLEdBRWxCLEdBQUFnTSxHQUFRQSxFeEI5UVMsSXdCK1FiLE9BQUFpVycKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBV2ppQixDQUFYLEVBQWlCZ00sQ0FFNUIsQ0FFTyxPQUFBLENBQ1QsRUEvRGVoTSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F2Q0xBLElBMENGOEwsRUFBY2pFLEVBQVFpRSxRQUFVakUsRUFBUTZhLGFBRTlDL04sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVEsQ0FBQSxDQUFSLEVBRUtvTSxFQUNIaEosRUFBV3FHLE9BQVEzQyxFQUFhLEVBQUc1VCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUXdXLElBQTNDLEVBQ1VoVSxFQUFPZ0MsR0FBSTRELEVBQVg1RixFQUNWME4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dnRyxHQUFJaEksRUFBUWxQLEdBQU0wYixDQUFBLENBQWQsRUFBNkIsRUFBTXpXLEVBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQU0sSUFBVUEsRUFBUyxJQUFNLEdBQTFGLEVBQ1V6QixFQUFPZ0MsR0FBSTBELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidYMUYsR0FBc0I4VyxHQUFZclYsRUFDNUNpTSxFQUFXZ0csR0FBSXJCLEVBQWUsQ0FBQSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZixFQUF3QixJQUFNLEdBQTdDLEVBRUEzRSxFQUFXZ0csR0FBSWhHLEVBQVd3RyxPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUTlDLENBQW5CLEVBQWtDLENBQUEsQ0FBakQsRUFHRjlHLEVBQVEsQ0FBQSxDQUFSLEVBdicKICAgICAgICAgICAgICAgICAgICAgICAgYidERWhRLEVBQVMzRSxDQUFULEdBR01vSSxFQUFBbEUsRUFBUTJMLEdBQXFCNlIsQ0FBN0IsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ0F0WixFQUFBbEUsRUFBUTRMLEdBQW1CNlIsQ0FBM0IsRUFDR1gsRUFBQSxDQUFBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNiLENBUUEsU0FBUzJCLEVBQVMzaUIsR0FDWCxDQUFFcWYsR0FBWTRCLEdBQ2pCdGMsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMzRSxFQUFHLENBQUEsQ0FBWixDQUVKLENBT0EsU0FBUzRoQixFQUFNNWhCLEdBQ0c4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dCLEVBQUFELEVBQ0FBLEVBQUE3Z0IsRUFDaEI0Z0IsRUFBZ0IzRSxFQUFoQixDQUNGLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWdHUyxTQUFBZ0csRUFBV2ppQixFQUE0QjRpQixHQUN2QyxPQUFBQyxFQUFTN2lCLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidHNGlCLENBQVosRUFBMkJDLEVBQVNDLEVBQWM5aUIsQ0FBQSxFQUFLNGlCLEVBQ2hFLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NBLFNBQVNULEVBQVVuaUIsR0FDakIsT0FBT29GLEdBQVFwRixHQUFNb0YsR0FBUTBkLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFjOWlCLENBQWQsQ0FBQSxDQUMvQixDQVVBLFNBQVM4aUIsRUFBYzlpQixHQUNkLE9BQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBNmdCLElBQWM3Z0IsR0FBSzhnQixHQUFpQkQsQ0FDN0MsQ0FXUyxTQUFBZ0MsRUFBUzdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBNEI0aUIsR0FDbkMsT0FBQXBCLEVBQWN4aEIsQ0FBZCxFQUFvQkEsRUFBRStpQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUFBZ0IsR0FBTS9pQixHQUFhOFEsT0FBQUEsRUFBUzhSLEVBQWEsSUFBTSxHQUE1QixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidDcEUsQ0FtQ0EsU0FBU3BCLEVBQWN4aEIsR0FDZCxNQUFzQixhQUF0QixPQUFPZ2pCLFlBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0E4QmhqQixhQUFhZ2pCLFVBQzNELENBZ0JBLFNBQVM1QixFQUFTbGhCLEdBQ0xtZixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQW5mLENBQ2IsQ0FFTyxNQUFBLENBQ0x3UyxNQS9URixXQUNRL1QsRUFBQTBULEVBQU94QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBcUJoUixHQUFNc1UsRUFBbEMsRUFDQXhVLEVBQUEwVCxFQUFPdkMsR0FBbUJqUixHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTXNVLEVBQWhDLEVBQ0F4VSxFQUFBMFQsRUFBT3pDLEdBQXFCeVIsRUFBZWxPLEVBQTMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQyxFQUNOeFUsRUFBTTBULEVBQU8sUUFBU3NRLEVBQVMsQ0FBRXRQLFFBQVMsQ0FBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWCxDQUEvQixFQUNNMVUsRUFBQTBULEVBQU8sWUFBYTFOLENBQXBCLEVBQ044RixFQUFJJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFFMUIsRUFBZVMsR0FBaUIrTixDQUF0QyxDQUNGLEVBeVRFNkosUUFBQUEsRUFDQTYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQixXQWhCRixXQUNTLE9BQUFqQyxDQUNULENBV08sQ0FLVCxXbEJ4WGdCLFNBQVUzVyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0JrRyxFQUF3QjFJLEdBQ2hFLElBT0kzRCxFQUtBbWIsRUFaeUJqVixFQUFBQSxFQUFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JDLEdBQXJDSSxJQUFBQSxHQUFJOUwsSUFBQUEsS0FBTXlKLElBQUFBLE9BQ1ZvSSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU25HLEVBQVRtRyxLQUNBTSxFQUFZUCxFQUFXUSxVQUF2QkQsUUF5QlIsU0FBU3lHLElBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidELElBQUUyTCxFQUFhcmIsRUFBYnFiLFNBRUhBLElBQ01oZixFQUFhLFdBQWJnZixFQUF3JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JwakIsT0FBUzBRLEVBQ3BDN1IsRUFBQXVGLEVBQVEyUCxHQUFnQnNQLENBQXhCLEVBRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBS0EsU0FBU3RhLElBQ1BULEVBQVFsRSxFQUFRMlAsRUFBaEIsQ0FDRixDQWVBLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTakMsSUFDUCxJQUFNd1IsRUFBWS9ELEVBQ1BBLEVBQUEsQ0FBQSxFQUNYdmdCLEVBQVUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1dBQW1CdWdCLEVBQUErRCxDQUFZLENBQXpDLENBQ0YsQ0FPQSxTQUFTRCxFQUFXbmpCLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNYcWYsS0FDQzdjLEVBQU1vUixHQUFjNVQsTUFFYjhRLEVBQVN0RSxFQUFBLEVBQ3BCbicKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBQU8wVCxHQUFJLEdBQVgxVCxFQUNVN0gsSUFBUXNPLEVBQVNyRSxFQUFBLEdBQzNCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BDLEVBQU8wVCxHQUFJLEdBQVgxVCxFQUdOLENBRU8sTUFBQSxDQUNMcUksTUEvREYsV0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ082RSxFQUFBLEVBQ0w5TSxFQUFJakIsRUFBZVgsQ0FBbkIsRUFDQTRCLEVBQUlqQixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBZStOLENBQW5CLEVBQ0E5TSxFQUFJekIsRUFBWTRJLENBQWhCLENBQ0YsRUEyREUvSSxRJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQUEsRUFDQXVZLFFBbENGLFNBQWtCbGhCLEdBQ0xtZixFQUFBbmYsQ0FDYixDQTZCTywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FLVCxXbUIvRGdCLFNBQVVtSyxFQUFnQmtHLEVBQXdCMUksR0FDaEUsSUFBZ0N1QyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFBZ0JDLEdBQXhDSSxJQUFBQSxHQUFJRSxJQUFBQSxJQUFLaE0sSUFBQUEsS0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01pTSxJQUFBQSxLQUNqQnlZLEVBQW9DLGVBQXJCeGIsRUFBUXliLFNBQ3ZCN2IsRUFBZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBRXdCLEdBQWFXLEdBS2hDMlosRUFBMkIsR0FnQi9CLFNBQVNoTSxJQUNQeFosRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgYid3bEIsQ0FBUCxFQWlCQWhULEVBQVdrQixPQUFPdFIsUUFBUyxTQUFTK1AsR0FDbENqTCxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBNEJpTCxFQUFNRyxNQUFPMkQsRUFBekMsRUFBMEQ3VCxRQUFTLFNBQU9rWSxHQUNsRSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBQTRILEVBQVNwYyxFQUFjd1UsRUFBS3ZFLEVBQUwsRUFDdkIwUCxFQUFTM2YsRUFBYycKICAgICAgICAgICAgICAgICAgICAgICAgYid3VSxFQUFLdEUsRUFBTCxFQUV4QmtNLElBQVE1SCxFQUFJNEgsS0FBT3VELElBQVduTCxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSW1MLFNBQy9CemYsRUFBWThELEVBQVFqSCxRQUFRNmlCLFFBRTVCQSxFQUFZMWhCLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQURaWixFQUFZa1gsRUFBSWhCLGtCQUNnQnRULElBQWtCWixFQUFRLE9BQVFZLEVBQVc1QycKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBM0IsRUFFeERvaUIsRUFBUS9pQixLQUFNLENBQUU2WCxFQUFLbkksRUFBT3VULEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0E1QixFQUNJcEwsRUFBQTRILEtBQU92YyxHQUFTMlUsRUFBSyxNQUFMLEVBRXRCLENBWkYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLENBYUEsQ0FkRjlILEdBZEs4UyxFQUNNSyxHQUVUL1ksRUFBS2xELENBQUwsRUFDQWdELCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFJaEQsRUFBUWtjLENBQVosRUFDTUEsSUFKRyxDQU1iLENBNEJBLFNBQVNBLEtBQ0dKJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFBQSxFQUFRemhCLE9BQVEsU0FBUWdILEdBQ2hDLElBQU1rSyxFQUFXbkwsRUFBUXEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUSxVQUFjclEsRUFBUStiLGNBQWdCLEdBQU0sR0FBTSxFQUNwRSxNQUFBOWEsQ0FBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU0sR0FBSWdLLFNBQVV6SSxFQUFPOEYsTUFBTzZDLENBQWxDLEdBQStDNlEsRUFBTS9hJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFBLENBQzVELENBSFEsR0FLRjdLLFFBQVUwTSxFQUFLbEQsRUFDekIsQ0FPQSxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU29jLEVBQU0vYSxHQUNQLElBQUV1UCxFQUFRdlAsRUFBVixHQUVJOUgsRUFBQThILEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidNLEdBQUl1SCxNQUFPYixFQUFqQixFQUNWN1EsRUFBTTBaLEVBQUssYUFBYzVaLEVBQU9xJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xCLEVBQVFoYixDQUFSLENBQWhDLEVBRUE3RixFQUFjb1YsRUFBSyxNQUFPeFUsRUFBY3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVSxFQUFLdkUsRUFBTCxDQUF4QyxFQUNBN1EsRUFBY29WLEVBQUssU0FBVXhVLEVBQWN3VScKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBS3RFLEVBQUwsQ0FBM0MsRUFDQWxSLEVBQWlCd1YsRUFBS3ZFLEVBQXRCLEVBQ0FqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1IsRUFBaUJ3VixFQUFLdEUsRUFBdEIsQ0FDRixDQVFTLFNBQUErUCxFQUFRaGIsRUFBcUInCiAgICAgICAgICAgICAgICAgICAgICAgIGInOUksR0FDOUIsSUFBRXFZLEVBQWV2UCxFQUFqQixHQUFPb0gsRUFBVXBILEVBQWpCLEdBRScKICAgICAgICAgICAgICAgICAgICAgICAgYidPM0QsRUFBQStLLEVBQU1HLE1BQU9iLEVBQWIsRUFFRyxVQUFYeFAsRUFBRWIsT0FDTGlGJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRMEUsRUFBTSxFQUFkLEVBQ0FwRixHQUFTMlUsRUFBSyxFQUFkLEVBQ016TixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVgsR0FBdUJvTyxFQUFLbkksQ0FBNUIsRUFDTnRGLEVBQU1uQixFQUFOLEdBR0Y0WixHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0JLLEVBQWhCLENBQ0YsQ0FLQSxTQUFTQSxJQUNQSCxFQUFRdGxCLFFBQVU0bEIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01OLEVBQVEzSCxNQUFSLENBQU4sQ0FDcEIsQ0FFTyxNQUFBLENBQ0xsSixNQXpHRixXQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTzdLLEVBQVF5YixXQUNOL0wsRUFBQSxFQUNMOU0sRUFBSWxCLEVBQWVnTyxDQUFuQixFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFSixFQXFHRTFPLFFBQVNwSyxFQUFPVixFQUFPd2xCLENBQVAsRUFDaEJJLE1BQUFBLENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0hLLENBS1QsYUM3RmdCLFNBQVl0WixFQUFnQmtHLEVBQXdCMUksR0FDNUQsSUFlRm1PLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUtBK04sRUFwQkVqYyxFQUFRc0MsRUFBZ0JDLEdBQ3RCSSxFQUFtQjNDLEVBQW5CMkMsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUlHLEVBQWU5QyxFQUFmOEMsS0FBTWpNLEVBQVNtSixFQUFUbkosS0FDVjhTLEVBQWlDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xCLEVBQWpDa0IsT0FBUVcsRUFBeUI3QixFQUF6QjZCLFNBQVUyRixFQUFleEgsRUFBZncnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSCxXQUNsQkUsRUFBMkJGLEVBQTNCRSxTQUFVcUcsRUFBaUJ2RyxFQUFqQnVHLFNBQVVQLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPaEcsRUFBUGdHLEdBQ3BCak4sRUFBWVAsRUFBV1EsVUFBdkJELFFBQ1k0TixFQUFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0J0TSxFQUE1QnhCLFdBS0ZuUSxFQUEwQixHQWlDaEMsU0FBU29JLElBQ0ZtTixJQUNINVInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFzYSxFQUFjeGdCLEVBQU84WCxFQUFLNVUsUUFBWixFQUF5QjRVLENBQS9DLEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBN1EsRUFBYTZRLEVBQU0rTixDQUFuQixFQUNBaG1CLEVBQU8wQyxDQUFQLEVBQ091VixFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxNQUdUbE8sRUFBTWUsUUFBTixDQUNGLENBK0NBLFNBQVM4WixFQUFTN0ssR0FDWmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQUFLakcsSUFBQUEsRUFBUyxDQUFBLENBQWQsQ0FDTixDQVVTLFNBQUFxTCxFQUFXcicKICAgICAgICAgICAgICAgICAgICAgICAgYidMLEVBQWM5WCxHQUMxQixJQUFFL0IsRUFBV3dDLEVBQVh4QyxPQUNGdUUsRUFBTW9SLEdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FjNVQsR0FDcEJna0IsRUFBTUMsRUFBWixFQUVJQyxFQUFXLENBQUEsRUFZVEMsR0FWRDMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaEIsSUFBUXNPLEVBQVNyRSxHQUFhLENBQUEsRUFBT3VYLENBQTdCLEVBQ1hFLEVBQVcsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUVwTSxFQUFPN1osRUFDVnVFLElBQVFzTyxFQUFTdEUsR0FBWSxDQUFBLEVBQU93WCxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBNUIsRUFDTEUsR0FBQSxFQUFFcE0sRUFBTzdaLEdBQVdBLEVBQ2YsU0FBUnVFLEVBQ0MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMGhCLEVBQUEsRUFDTyxRQUFSMWhCLElBQ1YwaEIsRUFBV2ptQixFQUFTLEdBR1R3QyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBT3lqQixJQUVmQyxJQUNIeGdCLEdBQU93Z0IsRUFBSzFDLE1BQVosRUFDQTFELEVBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQVNtRyxDQUFULEVBQ0F2ZixFQUFTM0UsRUFBRyxDQUFBLENBQVosRUFFSixDQUtBLFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTaWtCLElBQ0EsT0FBQXBjLEVBQVF1YyxxQkFBdUJ2YyxFQUFRNE0sU0FDaEQsQ0FTQScKICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBUy9DLEVBQU92QixHQUNQLE9BQUExUCxFQUFPc1gsRUFBVzZGLE9BQVF6TixDQUFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFDaEIsQ0FLQSxTQUFTMUUsSUFDUCxJQVdVZ1csRUFYSmpMLEVBQU85RSxFQUFPNE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVUsQ0FBQSxDQUFBLENBQWpCLEVBQ1B6TSxFQUFPSCxFQUFPNE0sR0FBQSxFQUVmOScKICAgICAgICAgICAgICAgICAgICAgICAgYidILElBRUhyUixFQURRc2MsRUFBV2pMLEVBQVhpTCxPQUNhdFMsRUFBckIsRUFDQXRNLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQjRlLEVBQVFoVSxFQUF6QixFQUNjeEssRUFBQXdlLEVBQVFwVSxFQUFXLENBQUcsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXRCLEdBR1h3RSxJQUVIN1EsRUFEUXlnQixFQUFXNVAsRUFBWDRQLE9BQ1V0UyxFQUFsQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFDY2xNLEVBQUF3ZSxFQUFRaFUsR0FBZSxDQUFBLENBQXZCLEVBQ0F4SyxFQUFBd2UsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVFwVSxFQUFXLEVBQW5CLEdBR2hCekMsRW5DalBvQyxxQm1DaVBKLENBQUVvTCxLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFBTXZWLE1BQUFBLENBQVIsRUFBaUIrVixFQUFNM0UsQ0FBdkQsQ0FDRixDQUVPLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFBLENBQ0xwUixNQUFBQSxFQUNBaVMsTUE1SkYsU0FBU0EsSUFDQzdKLEVBQUEsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1I0QixFQUFJLENBQUVqQixFQUFlRCxFbkNsRmMsTW1Da0Y0Qm1KLENBQS9ELEVBRUEsSUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU1rTSxFQUFVL1csRUFBUStJLFdBR3hCLEdBRkE4TixHQUFlaGIsR0FBU2diLEVBQWFFLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFVLEdBQUssTUFBNUIsRUFFbkJBLEVBQVUsQ0FDYm5VLEVBQUksQ0FBRXpCLEVBQVlXJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFjQyxHQUFrQjZCLENBQWxELEVBeUJJLElBQUV4TixFQUFXb00sRUFBWHBNLE9BQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMkMsRUFBMkJpSCxFQUEzQmpILFFBQVMrUCxFQUFrQjlJLEVBQWxCOEksS0FBTXVILEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidZclEsRUFBWnFRLFFBQ2pCblMsRUFBTWtTLElBQWFGLEVBQVc0RCxPQUFXLEVBQUEsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0kxVixHQUFNaEksRUFBU2lhLENBQVQsRUFJekRsWCxFQUZBZ1YsRUFBTzBJLEdBQWV2YiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUSxLQUFNdkMsRUFBUWdRLFdBQVl3QixFQUFTQyxNQUFNZ0YsYUFBekMsRUFFWjBNLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUF3QmpWLEdBQXhCLEtBQStDbVYsR0FBakUsRUFDY2hoQixFQUFBK1MsRUFBTTVJLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FNLFNBQVosRUFDQW5LLEVBQUErUyxFQUFNdEksR0FBWWlELEVBQUswVCxNQUF2QixFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZHBoQixFQUFjK1MsRUFBTW5JLEdBQWtCb1csRUFBbUJyWCxJQUFBQSxHQUFNLFdBQWEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQTVFLEVBRUEsSUFBQSxJQUFVd1AsRUFBSSxFQUFHQSxFQUFJclcsRUFBS3FXLENBQU0sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQUEsQ0FDOUIsSUFBTWtJLEVBQVduaEIsRUFBUSxLQUFNLEtBQU02UyxDQUFwQixFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWHlMLEVBQVd0ZSxFQUFRLFNBQVUsQ0FBRW9oQixNQUFPM2pCLEVBQVFrWCxLQUFNM1ksSycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU0sUUFBN0IsRUFBeUNtbEIsQ0FBbkQsRUFDbkJqVCxFQUFXSSxFQUFPb0csTUFBT3VFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFkLEVBQWtCN0ssSUFBSyxTQUFBckIsR0FBQSxPQUFTQSxFQUFNRyxNQUFNbEYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXJCLENBQXZCLEVBQ1hxWixFQUFXLENBQUV2TSxFQUFTLEdBQWUsRUFBVkMsRUFBY3ZILCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFLOFQsTUFBUTlULEVBQUtnQixPQUVqRWhULEVBQU04aUIsRUFBUSxRQUFTaGpCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FPa2tCLEVBQVN2RyxDQUFULENBQTlCLEVBRUt2VSxFQUFRNmMsb0JBQ1gvbEIsRUFBTTgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUIsRUFBUSxVQUFXaGpCLEVBQU8wa0IsRUFBVy9HLENBQVgsQ0FBaEMsRUFHWW5aLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBcWhCLEVBQUlsWCxFQUFNLGNBQVYsRUFDQW5LLEVBQUF3ZSxFQUFRclUsRUFBTSxLQUFkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNkbkssRUFBY3dlLEVBQVFsVSxHQUFlOEQsRUFBUzNHLEtBQU0sR0FBZixDQUFyQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQXpILEVBQWN3ZSxFQUFRL1QsR0FBWTVHLEdBQVEwZCxFQUFNcEksRUFBSSxDQUFsQicKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBbEMsRUFDY25aLEVBQUF3ZSxFQUFRcFUsRUFBVyxDQUFHLENBQXRCLEVBRWQ1TSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTUQsS0FBTSxDQUFFOGpCLEdBQUFBLEVBQUk3QyxPQUFBQSxFQUFRM0osS0FBTXNFLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFwQixDQUFaLENBQ0YsQ0FyRFMzUSxFQUFBLEVBQ0RiLEVuQ3RHNEIscUJtQ3NHRixDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBRW9MLEtBQUFBLEVBQU12VixNQUFBQSxDQUFSLEVBQWlCaVIsRUFBT3JILEVBQU84RixLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUDlGLENBQWxELENBQ1IsQ0FDRixFQWdKRXhCLFFBQUFBLEVBQ0E2SSxNQUFBQSxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWpHLE9BQUFBLENBTEssQ0FPVCxPbEJwT2dCLFNBQU1wQixFQUFnQmtHLEVBQXdCMUksRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ3RELElBQUU0SSxFQUE2QjVJLEVBQTdCNEksYUFBY0ksRUFBZWhKLEVBQWZnSixXQUtoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0JwSixFQUFpQyxHQUt2QyxTQUFTaUwsSUFtRFQsSUFDUTVLLEVBQ0UyQyxFQXBEUkosRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU9pSCxRQUFRblIsUUFBUyxTQUFVK0QsR0FDekJBLEVBQU95Z0IsV0FDTnRhLEVBQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRbkcsRUFBT3NOLE1BQWZuSCxFQUNBdWEsRUFBQTFnQixFQUFPc04sT0FBUW5ILENBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FmLEVBRVIsQ0FMRkEsRUFPS29HLElBNENDM0ksRUFBUXNDLEVBQWdCQyxJQUN0QkksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU8zQyxFQUFQMkMsSUFFSnZCLEdBQWF5WixDQUFqQixFQUNBbFksRUFBSVAsR0FBcUJpWicKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBekIsRUFDQTFZLEVBQUksQ0FBRTFCLEVBQWVTLEdBQWlCaUMsQ0FBdEMsRUFFQWhFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFPakgsS0FBTXNILENBQWIsRUFDTUEsRUFBQThDLEtBQU1kLEdBQTBCTyxFQUFPaUgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQXZDLEVBakRSLENBS0EsU0FBU3pJLElBQ1BwQixFQUFPdEgsUUFBUyxTQUFTMkgsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQUVBLEVBQU1lLFFBQU4sQ0FBa0IsQ0FBN0MsRUFDQTlLLEVBQU8wSixDQUFQLENBQ0YsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBa0JTLFNBQUFtZCxFQUFNcFQsRUFBZ0J0TixHQUN2QjRELEVBQVFzQyxFQUFnQm9ILEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUU5QjFKLEVBQU0yQyxHQUFJekIsRUFBWSxTQUFFbUgsRUFBT3FHLEVBQU1nRyxHQUNuQycKICAgICAgICAgICAgICAgICAgICAgICAgYid0WSxFQUFPNlosR0FBSTdaLEVBQU9tSSxHQUFJMkQsRUFBWCxFQUFvQndNLEVBQU9yTSxDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdEMsQ0FDQSxDQUZGLEVBSUExSSxFQUFPakgsS0FBTXNILENBQWIsQ0FDRixDQXFCQSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBUzJELElBQ084RSxFQUFBQSxFQUFXNkIsU0FBUzRELEtBQU1uSSxHQUFrQmhHLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidRNE0sWUFBYzdILEdBQU0sV0FBYSxFQUFyRjJELENBQ2hCLENBT0EsU0FBU29TLEVBQVN6JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1MsR0FDaEI3RixFQUFPMFQsR0FBSTdOLEVBQU1DLEtBQWpCOUYsQ0FDRixDQVFTLFNBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOFksRUFBV2pULEVBQXVCbFEsR0FDcENNLEVBQVUyVCxHQUFjTCxHQUFjNVQsQ0FBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBNUIsSUFDYjJpQixFQUFTelMsQ0FBVCxFQUNBdkwsRUFBUzNFLENBQVQsRUFFSixDQUVPJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFBLENBQ0xrVixNQUFPelcsRUFDTDhSLEVBQVcyUSxNQUFNblYsSUFDakIsQ0FBRTgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxXQUFZblIsR0FBYW1SLENBQWIsRUFBNEJKLEVBQWVJLENBQXpELEVBQ0EsQ0FBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidISyxFQUtQNkIsTUFBQUEsRUFDQTdKLFFBQUFBLEVBQ0EwUixRQTFFRixXQUNVMVIsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFDRjZKLEVBQUEsQ0FDUixDQStETyxDQVVULFFtQnBJZ0IsU0FBT3JJLEVBQWdCa0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQXdCMUksR0FDN0QsSUFBUWxKLEVBQVN5TCxFQUFnQkMsQ0FBaEIsRUFBVDFMLEtBSycKICAgICAgICAgICAgICAgICAgICAgICAgYidKa21CLEVBQVcsRUFnQmYsU0FBU0MsRUFBUzlrQixHQUNoQixJQUVRNmIsRUFDQXhXLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NBUSxFQUNBa2YsRUFrQmNsSixFQXZCakI3YixFQUFFZ2lCLGFBRUNuRyxHQURFbUosRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVdobEIsRUFBWGdsQixRQUNtQixFQUNyQjNmLEVBQVlELEdBQVFwRixHQUNwQjZGLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidZZ0MsRUFBUW9kLG1CQUFxQixFQUN6Q0YsRUFBWWxkLEVBQVFxZCxZQUFjLEVBRW5DaGYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUs4ZSxHQUFXbmYsR0FBOEJrZixFQUF2QjFmLEVBQVl3ZixJQUN0Q3hhLEVBQU8wVCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBSWxDLEVBQVksSUFBTSxHQUE3QnhSLEVBQ1d3YSxFQUFBeGYsR0FjT3dXLEVBWExBLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFQVlSaFUsRUFBUXNkLGNBQ1o5YSxDQUFBQSxFQUFPK0IsTUFBTUMsR0FBSTlPLENBQWpCJwogICAgICAgICAgICAgICAgICAgICAgICBiJzhNLEdBQ21ELENBQUEsSUFBbkRrRyxFQUFXd0gsV0FBV3FGLFlBQWF2QixDQUFuQ3RMLEcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWQyQjVMLEVBQVMzRSxDQUFULEVBRWxDLENBZU8sTUFBQSxDQUNMMFMsTUExQ0YsV0FDTycKICAgICAgICAgICAgICAgICAgICAgICAgYic3SyxFQUFRdWQsT0FDWHptQixFQUFNNFIsRUFBVzZCLFNBQVNDLE1BQU8sUUFBU3lTLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTM1IsRUFBbkQsQ0FFSixDQXFDTyxDQUdULE9DOUNnQixTQUFNOUksRUFBZ0JrRyxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInd0IxSSxHQUM1RCxJQUFRNEMsRUFBT0wsRUFBZ0JDLENBQWhCLEVBQVBJLEdBQ0E0SCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBVTlCLEVBQVc2QixTQUFyQkMsTUFLRnVNLEVBQVUvVyxFQUFRd2QsTUFBUSxDQUFFeGQsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVE0SSxhQUtwQzZVLEVBQUtuaUIsRUFBUSxPQUFRK0wsRUFBUixFQUticEUsRUFBV0QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBaENNLEdBZ0M2QnBNLEVBQU9rWSxFQUFRLENBQUEsQ0FBUixDQUF6QixFQXdCbEMsUycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVNBLEVBQVE1RSxHQUNEOU8sRUFBQW9QLEVBQU9yRSxHQUFXK0QsQ0FBbEIsRUFFVEEsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ0g3USxFQUFRbVIsRUFBT2lULENBQWYsRUFDQXhhLEVBQVMxTSxNQUFULElBRUFnRywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBUWtoQixDQUFSLEVBQ0F4YSxFQUFTYSxPQUFULEVBRUosQ0FnQkEsU0FBU3lWLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTL0IsR0FDWFQsR0FDSDNiLEVBQWNvUCxFQUFPdEUsR0FBV3NSLEVBQVcsTUFBUSxRQUFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QsQ0FFSixDQUVPLE1BQUEsQ0FDTDNNLE1BbERGLFdBQ09rTSxJQUNId0MsRUFBUyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRTdRLEVBQVdnVixTQUFTdFosVUFBL0IsRUFDY2hKLEVBQUFvUCxFQUFPcEUsR0FBYSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxDQUFwQixFQUNkcVgsRUFBR0UsWUFBYyxJQUVqQi9hLEVBQUlWLEdBQXFCdEwsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ08yaUIsRUFBUyxDQUFBLENBQWhCLENBQXpCLEVBQ0EzVyxFQUFJVCxHQUFzQnZMLEVBQU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInMmlCLEVBQVMsQ0FBQSxDQUFoQixDQUExQixFQUNBM1csRUFBSSxDQUFFeEIsR0FBYVcsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWtCbkwsRUFBT2tZLEVBQVEsQ0FBQSxDQUFSLENBQTVDLEVBRUosRUF5Q0V5SyxRQUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFDQXZZLFFBcEJGLFdBQ0VoRyxFQUFpQndQLEVBQU8sQ0FBRXRFLEdBQVdFLEdBQWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCxHQUFsRCxFQUNBNUosRUFBUWtoQixDQUFSLENBQ0YsQ0FjTyxDQUtULElDdkdhRyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBb0IsQ0FDL0J0bUIsS0FBb0IsUUFDcEIwWCxLQUFvQixTQUNwQjZPLE1BQW9CLElBQ3BCJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hOLFFBQW9CLEVBQ3BCekYsWUFBb0IsQ0FBQSxFQUNwQjhELE9BQW9CLENBQUEsRUFDcEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInM0YsV0FBb0IsQ0FBQSxFQUNwQjhULG1CQUFvQixDQUFBLEVBQ3BCNVosU0FBb0IsSUFDcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCZ1YsYUFBb0IsQ0FBQSxFQUNwQkMsYUFBb0IsQ0FBQSxFQUNwQkosY0FBb0IsQ0FBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDcEJnRyxPQUFvQixnQ0FDcEJyTyxLQUFvQixDQUFBLEVBQ3BCN0MsVUFBb0IsTUFDcEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInNkgsVUFBb0IsQ0FBQSxFQUNwQi9KLGVBQW9CLDZDQUNwQjhTLEtBQW9CLENBQUEsRUFDcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCemtCLFE5QnFDcUIsQ0FDckJ5UCxNQUFZOUIsR0FDWnFNLE1BQVlwTSxHQUNaK0gsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1k3SCxHQUNab1EsTUFBWW5RLEdBQ1o2SCxLQUFZNUgsR0FDWjZILEtBQVk1SCxHQUNaK0InCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQVk5QixHQUNaZ0osS0FBWS9JLEdBQ1owVSxRQXhDdUN0VixFQUFsQyxTQStCZ0IsRScKICAgICAgICAgICAgICAgICAgICAgICAgYic4QnBDckJ3QyxLQzFCa0IsQ0FDbEI2RixLQUFZLGlCQUNaQyxLQUFZLGFBQ1oySSxNQUFZJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxvQkFDWkQsS0FBWSxtQkFDWnhOLE9BQVksaUJBQ1o4UyxNQUFZLGdCQUNaL0UsS0FBWSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaUJBQ1poVSxNQUFZLGlCQUNacUwsU0FBWSxXQUNaMUcsTUFBWSxRQUNaZ1UsT0FBWSx5QicKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1oxUixXQUFZLFVBWk0sRUQyQmxCd0IsY0FBZSxDQUNidVIsTUFBYSxFQUNiRSxZQUFhJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNicEcsU0FBYSxPQUhBLENBckJnQixFRU9qQixTQUFBcUcsR0FBTXhiLEVBQWdCa0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQXdCMUksR0FDdEQsSUFBRTRKLEVBQVdsQixFQUFYa0IsT0FjUixTQUFTOEYsSUFDUCcKICAgICAgICAgICAgICAgICAgICAgICAgYic5RixFQUFPdFIsUUFBUyxTQUFTK1AsR0FDdkJBLEVBQU0zTSxNQUFPLDJCQUE2QixJQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJzJNLEVBQU1DLE1BQXRELElBQUEsQ0FDQSxDQUZGLENBR0YsQ0FhTyxNQUFBLENBQ0x1QywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTUEzQkYsV0FDRXRJLEVBQWdCQyxDQUFoQixFQUF5QkksR0FBSSxDQUFFMUIsRUFBZVEsRycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQWlCZ08sQ0FBL0QsQ0FDRixFQTBCRW5aLE1BUE8sU0FBTytSLEVBQWUyVixHQUM3QnJVJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFPbE8sTUFBTyxhQUFkLFdBQXdDc0UsRUFBUTZkLE1BQWhELE1BQTZEN2QsRUFBUTgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCxNQUFyRSxFQUNBN21CLEVBQVVnbkIsQ0FBVixDQUNGLEVBS0VuYSxPQUFROU0sRUFISCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FLVCxDQ3JDZ0IsU0FBQXFSLEdBQU83RixFQUFnQmtHLEVBQXdCMUksR0FDN0QsSUFPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lrZSxFQVBJaEosRUFBNkJ4TSxFQUE3QndNLEtBQU1oRixFQUF1QnhILEVBQXZCd0gsV0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVlvRCxFQUFXNUssRUFBWDRLLE9BQ2xCbkYsRUFBU3pGLEVBQVc2QixTQUFwQjRELEtBQycKICAgICAgICAgICAgICAgICAgICAgICAgYidGZ1EsRUFBYXZuQixFQUFPOEUsRUFBT3lTLEVBQU0sWUFBcEIsRUFnRG5CLFNBQVNySyxJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDUHFhLEVBQVksRUFBWixFQUNBN0ssRUFBT3hQLE9BQVAsQ0FDRixDQXNCTyxNQUFBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUNMK0csTUFoRUYsV0FDRXRJLEVBQWdCQyxDQUFoQixFQUF5QjFMLEtBQU1xWCxFQUFNLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidnQkFBaUIsU0FBS2hXLEdBQ3BEQSxFQUFFa0UsU0FBVzhSLEdBQVErUCxJQUNqQnBhLEVBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBQ0tvYSxFQUFBLEVBRWQsQ0FMRixDQU1GLEVBMERFM25CLE1BakRPLFNBQU8rUiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZTJWLEdBQzdCLElBQU1ySyxFQUFjc0IsRUFBS3pCLFdBQVluTCxFQUFPLENBQUEsQycKICAgICAgICAgICAgICAgICAgICAgICAgYidBQXhCLEVBQ2RvTCxFQUFjd0IsRUFBS2QsWUFBbkIsRUFDQXlKLEVBNkJSLFNBQW1CdlYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ1gsSUFBRXlWLEVBQWdCL2QsRUFBaEIrZCxZQUVSLEdBQUt2YixFQUFPZ0MsR0FBSTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRCxFQUFYMUYsR0FBc0J1YixFQUFjLENBQ2pDLElBQUFwUCxFQUFPdUIsRUFBV3VHLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgYidVLENBQUEsQ0FBckIsRUFDUGpnQixFQUFPMFosRUFBVzRELE9BQWxCLEVBRU4sR0FBZ0IsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQVRuRixHQUF1Qm5ZLEdBQVQ4UixHQUE0QjlSLEdBQVJtWSxHQUF5QixJQUFWckcsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQy9DLE9BQUF5VixDQUVYLENBRUEsT0FBTy9kLEVBQVE2ZCxLQUNqQixFQTFDZ0N2VixHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidFUSxHQUFqQ2pLLEVBQUt1VixFQUFjRixJQUE0QixHQUFUbUssRUFDcEM3ZCxFQUFRb2UsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VBQ1g5SyxFQUFPaUQsT0FBUTNDLEVBQWFpSyxFQUFPLENBQUEsRUFBT0ksQ0FBMUMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVlFLGVBQWNOLEVBQWQsTUFBMkI3ZCxFQUFROGQsTUFBbkMsRUFDUDVJLEVBQUExQixVQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBV0ksRUFBYSxDQUFBLENBQXhCLEVBQ1NzSyxFQUFBRCxJQUdoQi9JLEVBQUszQixLQUFNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2pMLENBQVgsRUFDSzJWLEVBQUEsRUFFVCxFQWlDRW5hLE9BQUFBLENBSEssQ0FLVCxDQy8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWF0QixhQThEWCxTQUFhbkcsRUFBQUEsRUFBOEIyRCxHQTNDM0NxZSxLQUFTcGUsTUFBOCcKICAgICAgICAgICAgICAgICAgICAgICAgYidCc0MsRUFBdkMsRUFLQThiLEtBQVMzVixXQUF5QixHQUt6QjJWLEtBQUE5WixNQUFxQkYsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0U5RjlDVCxHOEZtRHJCZ2EsS0FBUzVVLFFBQXdCLEdBS2pDNFUsS0FBaUJDLEVBQWMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVS9CRCxLQUFRRSxFQUEyQyxHQWMzQzVWLEVBQU8vUSxFQUFVeUUsQ0FBQSxFQUFXYSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBb0IxQixTQUFVYSxDQUFWLEVBQXFCQSxFQUNuRXVCLEdBQUErSyxFQUFVQSxFQUFWLGNBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBSVIzSSxFQUFVbEYsRUFBTyxDQUNmc08sTUFBWXBOLEVBSGRxaUIsS0FBSzFWLEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFPQSxFQUdzQjlDLEVBQXBCLEdBQW9DLEdBQ2hEd0osV0FBWXJULEVBQWMyTSxFQUFNNycKICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBQXBCLEdBQXlDLEVBRnRDLEVBR2Q4WCxHQUFVWSxFQUFPQyxTQUFVemUsR0FBVyxFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FIeEIsRUFLYixJQUNGbEYsRUFBT2tGLEVBQVMwZSxLQUFLQyxNQUFPM2lCLEVBQWMyTSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTWhMLEVBQWhDLENBQWhCLENBR0YsT0FGVXhGLEdBQ1J5RixHQUFRLENBQUEsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgYicsY0FBZixDQUNGLENBRUF5Z0IsS0FBS0MsRUFBS2prQixPQUFPaUIsT0FBUVIsRUFBTyxHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSWtGLEVBQTFCLENBQ1osNEJBVUE2SyxNQUFBLFNBQU8rVCxFQUFtRHpMLEdBQTBDLEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBMEwsRUFBQVIsS0FDMUY5WixFQUFzQjhaLEtBQXRCOVosTUFBT21FLEVBQWUyVixLQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBZjNWLFdBNEJSLE9BM0JQOUssR0FBUTJHLEVBQU1DLEdBQUksQzlGN0dDLEVBOEJFLEU4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0YrRWIsRUFBb0Msa0JBQTVDLEVBRUFELEVBQU1MLEk5Ri9HYSxDOEYrR25CLEVBRUFtYSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBS1MsRUFBS3BXLEVBQ0wyVixLQUFBVSxFQUFLNUwsR0FBY2tMLEtBQUtVLElBQVFWLCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFLN1osR0FBSTRELEVBQVQsRUFBa0I0VixHQUFPM1YsSUFDekRnVyxLQUFBRSxFQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0ssR0FBY1AsS0FBS0UsRUFJckJoa0IsRUFGYUssR0FBUSxHQUFJb2tCLEdBQXVCWCxLQUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInS0UsRUFBSSxDQUFFcEwsV0FBWWtMLEtBQUtVLENBQW5CLENBQXBDLEVBRVAsU0FBRUUsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQVd0a0IsR0FDM0J1a0IsRUFBWUQsRUFBV0osRUFBTW5XLEVBQVltVyxFQUFLUCxDQUFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsR0FDbEI1VixFQUFZL04sR0FBUXVrQixHQUNWN1IsT0FBUzZSLEVBQVU3UixNQUFuQiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDVixDQUpNLEVBTVI5UyxFQUFRbU8sRUFBWSxTQUFhd1csR0FDckJBLEVBQUFyVSxPQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBU3FVLEVBQVVyVSxNQUFuQixDQUNWLENBRkYsRUFJQXdULEtBQUt0YixLQUFNN0IsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1gsRUFFVS9ILEVBQUFrbEIsS0FBSzFWLEtsQ2hHc0JwQixnQmtDZ0czQixFQUVWaEQsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQU1MLEk5RjNIVSxDOEYySGhCLEVBQ0FtYSxLQUFLdGIsSzFDeEkrQixPMEN3SXBDLEVBRScKICAgICAgICAgICAgICAgICAgICAgICAgYidPc2IsSUFDVCxJQW9CQXRCLEtBQUEsU0FBTXBULEdBU0csT0FSUDBVLEtBQUs1VSxRQUFRJwogICAgICAgICAgICAgICAgICAgICAgICBiJzlRLEtBQU0sQ0FBRWdSLE9BQUFBLENBQUYsQ0FBbkIsRUFDQUEsRUFBT0YsUUFBUTlRLEsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFNLENBQUVnUixPQUFRMFUsS0FBTXZCLFNBQVUsQ0FBQSxDQUExQixDQUFyQixFQUVLdScKICAgICAgICAgICAgICAgICAgICAgICAgYidCLEtBQUs5WixNQUFNQyxHOUZ2SkEsQzhGdUpYLElBQ0U2WixLQUFBUyxFQUFHSyxLQUFLJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3pNLFFBQVIsRUFDRS9JLEVBQUFqQixXQUFXeVcsS0FBS3pNLFFBQWhCLEdBR0YyTCxJQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCxJQXNDQW5JLEdBQUEsU0FBSUMsR0FFSyxPQURGa0ksS0FBQVMsRUFBRzVPLFdBQVdnRycKICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBSUMsQ0FBbEIsRUFDRWtJLElBQ1QsSUEwQkF6YixHQUFBLFNBQUloRCxFQUEyQkcsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dBRXRCLE9BREZzZSxLQUFBcGUsTUFBTTJDLEdBQUloRCxFQUFRRyxDQUFsQixFQUNFc2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQ1QsSUFxQkF2YixJQUFBLFNBQStCbEQsR0FFdEIsT0FERnllLEtBQUFwZSxNQUFNNicKICAgICAgICAgICAgICAgICAgICAgICAgYidDLElBQUtsRCxDQUFYLEVBQ0V5ZSxJQUNULElBWUF0YixLQUFBLFNBQU05QyxHQUFzQixJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQW1mLEVBR25CLE9BREZuZixFQUFBQSxLQUFBQSxPQUFNOEMsS0FBTTlDLE1BQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQSxDQUFBQSxHQUFVNUosT0FBQUEsRUFBT1UsVUFBVyxDQUFYLENBQWxDLENBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQ09zbkIsSUFDVCxJQXNCQXJsQixJQUFBLFNBQUtzVixFQUE0RGhHLEdBRXhELE9BRFArJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1YsS0FBS1MsRUFBR2xWLE9BQU81USxJQUFLc1YsRUFBUWhHLENBQTVCLEVBQ08rVixJQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCxJQVFBOWhCLE9BQUEsU0FBUXdULEdBRUMsT0FERnNPLEtBQUFTLEVBQUdsVixPQUFPcicKICAgICAgICAgICAgICAgICAgICAgICAgYidOLE9BQVF3VCxDQUFsQixFQUNFc08sSUFDVCxJQVNBN1osR0FBQSxTQUFJbE4sR0FDSyxPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSttQixLQUFLQyxFQUFHaG5CLE9BQVNBLENBQzFCLElBT0EwVixRQUFBLFdBRVMsT0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRFBxUixLQUFLdGIsS0FBTXJCLENBQVgsRUFDTzJjLElBQ1QsSUFTQXJkLFFBQUEsU0FBUycKICAgICAgICAgICAgICAgICAgICAgICAgYid3TCxHQUEwQixLQUFBLElBQTFCQSxJQUFBQSxFQUFhLENBQUEsR0FDZCxJQUFFdk0sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lCb2UsS0FBakJwZSxNQUFPc0UsRUFBVThaLEtBQVY5WixNQWdCUixPQWRGQSxFQUFNQywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRzlGMVZRLEM4RjBWZCxFQUVhakMsRUFBQThiLElBQUEsRUFBT3piLEcxQzlWVyxRMEM4VicKICAgICAgICAgICAgICAgICAgICAgICAgYidNeWIsS0FBS3JkLFFBQVFsSyxLQUFNdW5CLEtBQU03UixDQUF6QixDQUF4QixHQUVSalMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUE4akIsS0FBS1MsRUFBSSxTQUFhSSxHQUNsQkEsRUFBQWxlLFNBQVdrZSxFQUFVbGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFFBQVN3TCxDQUFuQixHQUNwQixDQUFBLENBRkssRUFJUnZNLEVBQU04QyxLQUFNZixDQScKICAgICAgICAgICAgICAgICAgICAgICAgYidBWixFQUNBL0IsRUFBTWUsUUFBTixFQUNjd0wsR0FBQXRXLEVBQU9tb0IsS0FBSzVVLE9BJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FaLEVBQ2RsRixFQUFNTCxJOUZ2VWEsQzhGdVVuQixHQUdLbWEsSUFDVCwyQkFPQSxXQUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRSxPQUFPQSxLQUFLQyxDQUNkLE1BT0EsU0FBYXRlLEdBQ1hxZSxLQUFLUyxFQUFHekYsTScKICAgICAgICAgICAgICAgICAgICAgICAgYidBQU1uVixJQUFLbEUsRUFBUyxDQUFBLEVBQU0sQ0FBQSxDQUFsQyxDQUNGLHFCQU9BLFdBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NFLE9BQU9xZSxLQUFLUyxFQUFHbFYsT0FBTzhHLFVBQVcsQ0FBQSxDQUExQixDQUNULG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQkFPQSxXQUNTLE9BQUEyTixLQUFLUyxFQUFHNU8sV0FBV3VHLFNBQW5CLENBQ1QsUUE1WCcKICAgICAgICAgICAgICAgICAgICAgICAgYidLLFNBQU1qVSxFQUlKaWMsU0FBb0IsR0FKaEJqYyxFQVNLNU0sT0FBU0EifScsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUubWluLmpzLm1hcCcsCiAgICAgICAgICAgICAnSXNUZXh0JzogMSwKICAgICAgICAgICAgICdOZWVkQ29weSc6IDEsCiAgICAgICAgICAgICAnUmVtb3ZlQWZ0ZXJDb3B5JzogMCwKICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSW5jbHVkZSd9LAogICAgICAnZW4tVVMnOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ3sidmVyc2lvbiI6MywiZmlsZSI6InNwbGlkZS5taW4uanMiLCJzb3VyY2VzIjpbIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi8uLi9zcmMvanMvY29uc3RhbnRzL21lZGlhLnRzIiwiLi4vLi4vc3JjL2pzL2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdGFudHMvc3RhdGVzLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2FycmF5L2VtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0eS9lbXB0eS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9hcnJheUxpa2Uvc2xpYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlL3NsaWNlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2Z1bmN0aW9uL2FwcGx5L2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBseS50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9mdW5jdGlvbi9ub29wL25vb3AuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2Z1bmN0aW9uL25leHRUaWNrL25leHRUaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjay50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9mdW5jdGlvbi9yYWYvcmFmLnRzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIi4uLy4uL3NyYy9qcy91dGlscy90eXBlL3R5cGUudHMiLCIuLi8uLi9zcmMvanMvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0aWxzL2FycmF5L3RvQXJyYXkvdG9BcnJheS50cyIsIi4uLy4uL3NyYy9qcy91dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbHMvYXJyYXkvZm9yRWFjaC9mb3JFYWNoLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy9hcnJheS9pbmNsdWRlcy9pbmNsdWRlcy50cyIsIi4uLy4uL3NyYy9qcy91dGlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MvYXJyYXkvcHVzaC9wdXNoLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS90bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2xlQ2xhc3MvdG9nZ2xlQ2xhc3MudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbS9hZGRDbGFzcy9hZGRDbGFzcy50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FwcGVuZC9hcHBlbmQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2JlZm9yZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvYmVmb3JlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9tYXRjaGVzL21hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVzLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9jaGlsZHJlbi9jaGlsZHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24udHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2NoaWxkL2NoaWxkLnRzIiwiLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLy4uL3NyYy9qcy91dGlscy9vYmplY3Qvb3duS2V5cy9vd25LZXlzLnRzIiwiLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLy4uL3NyYy9qcy91dGlscy9vYmplY3QvZm9yT3duL2Zvck93bi50cyIsIi4uLy4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9zcmMvanMvdXRpbHMvb2JqZWN0L2Fzc2lnbi9hc3NpZ24udHMiLCIuLi8uLi9zcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjL2pzL3V0aWxzL29iamVjdC9tZXJnZS9tZXJnZS50cyIsIi4uLy4uL3NyYy9qcy8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXRpbHMvb2JqZWN0L29taXQvb21pdC50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tL3JlbW92ZUF0dHJpYnV0ZS9yZW1vdmVBdHRyaWJ1dGUudHMiLCIuLi8uLi9zcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjL2pzL3V0aWxzL2RvbS9zZXRBdHRyaWJ1dGUvc2V0QXR0cmlidXRlLnRzIiwiLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLy4uL3NyYy9qcy91dGlscy9kb20vY3JlYXRlL2NyZWF0ZS50cyIsIi4uLy4uL3NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MvanMvdXRpbHMvZG9tL3N0eWxlL3N0eWxlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidscy9kb20vZGlzcGxheS9kaXNwbGF5LnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb20vZm9jdXMvZm9jdXMudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL2dldEF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUvZ2V0QXR0cmlidXRlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvaGFzQ2xhc3MvaGFzQ2xhc3MudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0L3JlY3QudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tL3JlbW92ZS9yZW1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL2RvbS9wYXJzZUh0bWwvcGFyc2VIdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtbC50cyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vcHJldmVudC9wcmV2ZW50LnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsIi4uLy4uL3NyYy9qcy91dGlscy9kb20vcXVlcnkvcXVlcnkudHMiLCIuLi8uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4vc3JjL2pzL3V0aWxzL2RvbS9xdWVyeUFsbC9xdWVyeUFsbC50cyIsIi4uLy4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcmMvanMvdXRpbHMvZG9tL3JlbW92ZUNsYXNzL3JlbW92ZUNsYXNzLnRzIiwiLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLy4uL3NyYy9qcy91dGlscy9kb20vdGltZU9mL3RpbWVPZi50cyIsIi4uLy4uL3NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2MvanMvdXRpbHMvZG9tL3VuaXQvdW5pdC50cyIsIi4uLy4uL3NyYy9qcy9jb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbnRzL3Byb2plY3QudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZXJyb3IvYXNzZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC9hc3NlcnQudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvbWF0aC9tYXRoL21hdGguJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvYXBwcm94aW1hdGVseUVxdWFsLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcHByb3hpbWF0ZWx5RXF1YWwudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvbWF0aC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmV0d2Vlbi9iZXR3ZWVuLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wL2NsYW1wLnRzIiwiLi4vLi4vc3JjL2pzL3V0aWxzL21hdGgvc2lnbi9zaWduLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyIsIi4uLy4uL3NyYy9qcy91dGlscy9zdHJpbmcvZm9ybWF0L2Zvcm1hdC50cyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCIuLi8uLi9zcmMvanMvdXRpbHMvc3RyaW5nL3BhZC9wYWQudHMiLCIuLi8uLi9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JjL2pzL3V0aWxzL3N0cmluZy91bmlxdWVJZC91bmlxdWVJZC50cyIsIi4uLy4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcmMvanMvY29uc3RydWN0b3JzL0V2ZW50QmluZGVyL0V2ZW50QmluZGVyLnRzIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvZXZlbnRzLnRzIiwiLi4vLi4vc3JjL2pzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9jb25zdHJ1Y3RvcnMvRXZlbnRJbnRlcmZhY2UvRXZlbnRJbnRlcmZhY2UudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLi4vLi4vc3JjL2pzL2NvbnN0cnVjdG9ycy9SZXF1ZXN0SW50ZXJ2YWwvUmVxdWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RJbnRlcnZhbC50cyIsIi4uLy4uL3NyYy9qcy9jb25zdHJ1Y3RvcnMvU3RhdGUvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N0YXRlLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YW50cy9hcnJvd3MudHMiLCIuLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvLi4vc3JjL2pzL2NvbnN0YW50cy9kaXJlY3Rpb25zLnRzIiwiLi4vLi4vc3JjL2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy9jb21wb25lbnRzL0RpcmVjdGlvbi9EaXJlY3Rpb24udHMiLCIuLi8uLi9zcmMvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pzL2NvbnN0YW50cy9hdHRyaWJ1dGVzLnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMvY2xhc3Nlcy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0RyYWcvY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0YW50cy50cyIsIi4uLy4uL3NyYy9qcy9jb25zdGFudHMvdHlwZXMudHMiLCIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4vLi4vc3JjL2pzL2NvbXBvbmVudHMvU2xpZGVzL1NsaWRlLnRzIiwiLi4vLi4vcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYy9qcy9jb21wb25lbnRzL0F1dG9wbGF5L2NvbnN0YW50cy50cyIsIi4uLy4uL3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmMvanMvY29uc3RhbnRzL2xpc3RlbmVyLW9wdGlvbnMudHMiLCIuLi8uLi9zcmMvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pzL3V0aWxzL2RvbS9ub3JtYWxpemVLZXkvbm9ybWFsaXplS2V5LnRzIiwiLi4vLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuL3NyYy9qcy9jb21wb25lbnRzL0tleWJvYXJkL0tleWJvYXJkLnRzIiwiLi4vLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL3NyYy9qcy9jb21wb25lbnRzL0xhenlMb2FkL2NvbnN0YW50cy50cyIsIi4uLy4uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9zcmMvanMvY29tcG9uZW50cy9TeW5jL1N5bmMudHMiLCIuLi8uLi9zcmMvanMvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMvTWVkaWEvTWVkaWEudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMvRWxlbWVudHMvRWxlbWVudHMudHMiLCIuLi8uLi9zcmMvanMvdXRpbHMvZG9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9jbG9zZXN0L2Nsb3Nlc3QudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9TbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVzL1NsaWRlcy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0xheW91dC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGF5b3V0LnRzIiwiLi4vLi4vc3JjL2pzL2NvbnN0cnVjdG9ycy9UaHJvdHRsZS9UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hyb3R0bGUudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9DbG9uZXMvQ2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcy50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL01vdmUvTW92ZS50cyIsIi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLi8uLi9zcmMvanMvY29tcG9uZW50cy9Db250cm9sbGVyL0NvbnRyb2xsZXIudHMiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvQXJyb3dzL0Fycm93cy50cyIsIi4uLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi9zcmMvanMvY29tcG9uZW50cy9BcnJvd3MvcGF0aC50cyIsIi4uLy4uL3NyYy8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInanMvY29tcG9uZW50cy9BdXRvcGxheS9BdXRvcGxheS50cyIsIi4uLy4uL3NyYy9qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MvY29tcG9uZW50cy9Db3Zlci9Db3Zlci50cyIsIi4uLy4uL3NyYy9qcy9jb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cy9TY3JvbGwvU2Nyb2xsLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1Njcm9sbC9jb25zdGFudHMudHMiLCIuLi8uLi9zcmMvanMvY29tcG9uZW50cy9EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZy9EcmFnLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvTGF6eUxvYWQvTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhenlMb2FkLnRzIiwiLi4vLi4vc3JjL2pzL2NvbXBvbmVudHMvUGFnaW5hdGlvbi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGFnaW5hdGlvbi50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL1doZWVsL1doJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VlbC50cyIsIi4uLy4uL3NyYy9qcy9jb21wb25lbnRzL0xpdmUvTGl2ZS50cyIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuLi8uLi9zcmMvanMvY29uc3RhbnRzL2RlZmF1bHRzLnRzIiwiLi4vLi4vc3JjL2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy9jb25zdGFudHMvaTE4bi50cyIsIi4uLy4uL3NyYy9qcy90cmFuc2l0aW9ucy9GJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZS9GYWRlLnRzIiwiLi4vLi4vc3JjL2pzL3RyYW5zaXRpb25zL1NsaWRlL1NsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZS50cyIsIi4uLy4uL3NyYy9qcy9jb3JlL1NwbGlkZS9TcGxpZGUudHMiXSwic28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJjZXNDb250ZW50IjpbIi8qKlxcclxcbiAqIE1hdGNoZXMgd2hlbiB1c2VycyByZXEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzdCByZWR1Y2luZyBub24tZXNzZW50aWFsIGFuaW1hdGlvbnMuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTL2RvY3MvV2ViL0NTUy9AbWVkaWEvcHJlZmVycy1yZWR1Y2VkLW1vdGlvblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG5leHBvcnQgY29uc3QgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBcJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpXCc7IiwiLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFNwbGlkZSBoYXMgYmVlbiBqdXN0IGNyZWF0ZWQuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBDUkVBVEVEID0gMTtcXHJcXG5cXHJcXG4vKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogU3BsaWRlIGhhcyBtb3VudGVkIGNvbXBvbmVudHMuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBNT1VOVEVEID0gMjtcXHJcXG5cXHJcXG4vKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogU3BsaWRlIGlzIHJlYWR5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgSURMRSA9IDM7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogU3BsaWRlIGlzIG1vdmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IE1PVklORyA9IDQ7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbi8qKlxcclxcbiAqIFNwbGlkZSBpcyBtb3ZpbmcuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBTQ1JPTExJTkcgPSA1O1xcclxcblxcclxcbi8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBUaGUgdXNlciBpcyBkcmFnZ2luZyB0aGUgc2xpZGVyLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG5leHBvcnQgY29uc3QgRFJBR0dJTkcgPSA2O1xcclxcblxcclxcbi8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBTcGxpZGUgaGFzIGJlZW4gZGVzdHJveWVkLlxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgY29uc3QgREVTVFJPWUVEID0gNztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGNvbGxlY3Rpb24gb2YgYWxsIHN0YXRlcy5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgU1RBVEVTID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gIENSRUFURUQsXFxyXFxuICBNT1VOVEVELFxcclxcbiAgSURMRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBNT1ZJTkcsXFxyXFxuICBTQ1JPTExJTkcsXFxyXFxuICBEUkFHR0lORywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBERVNUUk9ZRUQsXFxyXFxufTtcXHJcXG4iLCIvKipcXHJcXG4gKiBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wdGllcyB0aGUgYXJyYXkuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gYXJyYXkgLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBhcnJheSB0byBlbXB0eS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVtcHR5KCBhcnJheTogYW55W10gKTogdm9pZCB7XFxyXFxuICBhcnJheS5sZW5ndGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gMDtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuICogVGhlIHNsaWNlIG1ldGhvZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yIGFuIGFycmF5LWxpa2Ugb2JqZWN0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhcnJheUxpa2UgLSBBbiBhcnJheS1saWtlIG9iamVjdC5cXHJcXG4gKiBAcGFyYW0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXJ0ICAgICAtIE9wdGlvbmFsLiBBIHN0YXJ0IGluZGV4LlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gZW5kICAgICAgIC0gT3B0aW9uYWwuIEEgZW5kIGluZGV4LlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEByZXR1cm4gQW4gYXJyYXkgd2l0aCBzbGljZWQgZWxlbWVudHMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBzbGljZTxUPiggYXJyYXlMaWsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogQXJyYXlMaWtlPFQ+LCBzdGFydD86IG51bWJlciwgZW5kPzogbnVtYmVyICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUW10ge1xcclxcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JyYXlMaWtlLCBzdGFydCwgZW5kICk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBbnlGdW5jdGlvbiwgU2hpZnROIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpbXBvcnQgeyBzbGljZSB9IGZyb20gJy4uLy4uL2FycmF5TGlrZSc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbi8qKlxcclxcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHdoZXJlIHByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292aWRlZCBhcmd1bWVudHMgYXJlIGJvdW5kLlxcclxcbiAqIGB0aGlzYCBwYXJhbWV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIHdpbGwgYmUgYWx3YXlzIG51bGwuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmMgLSBBIGZ1bmN0aW9uLlxcclxcbiAqIEBwYXJhbSBhcmdzIC0gQXJndW1lbnRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBiaW5kIHRvIHRoZSBmdW5jdGlvbi5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgZnVuY3Rpb24gd2hlcmUgYXJndW1lbnRzIGFyZSBib3VuZC5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5PEYgZXh0ZW5kcyBBbnlGdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIEEgZXh0ZW5kcyBhbnlbXSA9IGFueVtdPihcXHJcXG4gIGZ1bmM6IEYsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLi4uYXJnczogQVxcclxcbik6ICggLi4uYXJnczogU2hpZnROPFBhcmFtZXRlcnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPEY+LCBBW1xcImxlbmd0aFxcIl0+ICkgPT4gUmV0dXJuVHlwZTxGPjtcXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuLyoqXFxyXFxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hlcmUgcHJvdmlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIGFyZ3VtZW50cyBhcmUgYm91bmQuXFxyXFxuICogYHRoaXNgIHBhcmFtZXRlciB3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbCBiZSBhbHdheXMgbnVsbC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBmdW5jIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggZnVuYzogQW55RnVuY3Rpb24gKTogYW55IHtcXHJcXG4gIC8vIGVzbGludC1kaXNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zLCBwcmVmZXItc3ByZWFkXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcmV0dXJuIGZ1bmMuYmluZCggbnVsbCwgLi4uc2xpY2UoIGFyZ3VtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIDEgKSApO1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBObyBvcGVyYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBub29wID0gKCk6IHZvaWQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXFxyXFxuIiwiaW1wb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IEFueUZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJbnZva2VzIHRoZSBjYWxsYmFjayBvbiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIG5leHQgdGljay5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBjYWxsYmFjayAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dFRpY2s6ICggY2FsbGJhY2s6IEFueUZ1bmN0aW9uICkgPT4gUmV0dXJuVHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8dHlwZW9mIHNldFRpbWVvdXQ+ID0gc2V0VGltZW91dDtcXHJcXG4iLCIvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICogVGhlIGFsaWFzIG9mIGB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcmFmKCBmdW5jOiBGcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbWVSZXF1ZXN0Q2FsbGJhY2sgKTogbnVtYmVyIHtcXHJcXG4gIHJldHVybiByZXF1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdEFuaW1hdGlvbkZyYW1lKCBmdW5jICk7XFxyXFxufVxcclxcbiIsImltcG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieyBBbnlGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYXBwbHkgfSBmcm9tICcuLi9mdW5jdGlvbic7XFxyXFxuXFxyXFxuXFxyXFxuLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAqIFRoZSBhbGlhcyBvZiB0aGUgdHlwZSBjaGVjayBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdHlwZSAgICAtIEEgdHlwZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaXMgdGhlIHNwZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWZpZWQgdHlwZS5cXHJcXG4gKi9cXHJcXG5mdW5jdGlvbiB0eXBlT2YoIHR5cGU6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzdHJpbmcsIHN1YmplY3Q6IHVua25vd24gKTogYm9vbGVhbiB7XFxyXFxuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHR5cGVvZiBzdWJqZWN0ID09PSB0eXBlO1xcclxcbn1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGFuIG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Qgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIHRoZSBzdWJqZWN0IGlzIGFuIG9iamVjdCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCggc3ViamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IHVua25vd24gKTogc3ViamVjdCBpcyBvYmplY3Qge1xcclxcbiAgcmV0dXJuICEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlzTnVsbCggc3ViamVjdCApICYmIHR5cGVPZiggJ29iamVjdCcsIHN1YmplY3QgKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVuIHN1YmplY3QgaXMgYW4gYXJyYXkgb3Igbm90LlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGFuIGFycmF5LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0FycmF5OiA8VD4oIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqZWN0IGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUW10gPSBBcnJheS5pc0FycmF5O1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYSBmdW5jdGlvbiBvciBub3QuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHBhcmFtIHN1YmplY3QgLSBBIHN1YmplY3QgdG8gY2hlY2suJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHN1YmplY3QgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIGEgZnVuY3Rpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgY29uc3QgaXNGdW5jdGlvbiA9IDwoIHN1YmplY3Q6IHVua25vd24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIikgPT4gc3ViamVjdCBpcyBBbnlGdW5jdGlvbj5hcHBseSggdHlwZU9mLCAnZnVuYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0aW9uJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHN1YmplY3QgaXMgYSBzdHJpbmcgb3Igbm90LlxcclxcbiAqXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBzdWJqZWN0IC0gQSBzdWJqZWN0IHRvIGNoZWNrLlxcclxcbiAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzdWJqZWN0IGlzIGEgc3RyaW5nLCBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1N0cmluZyA9IDwoIHN1YmplY3Q6IHVua25vd24gKSA9PiBzdWJqZWN0IGlzIHN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJpbmc+YXBwbHkoIHR5cGVPZiwgJ3N0cmluZycgKTtcXHJcXG5cXHJcXG4vKipcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBzdWJqZWN0IGlzIGB1bmRlZmluZWRgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QgdG8gY2hlY2suXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHN1YmplY3QgaXMgYHVuZGVmaW5lZGAsIG9yIG90aGVyd2lzZSBgZmFsc2VgLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgaXNVbmRlZmluZWQgPSA8KCBzdWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdDogdW5rbm93biApID0+IHN1YmplY3QgaXMgdW5kZWZpbmVkPmFwcGx5KCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInlwZU9mLCAndW5kZWZpbmVkJyApO1xcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgaWYgdGhlIGdpdmVuIHN1YmplY3QgaXMgYG51bGxgIG9yIG5vdC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gKiBAcGFyYW0gc3ViamVjdCAtIEEgc3ViamVjdCB0byBjaGVjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgc3ViamVjdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgYG51bGxgLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGZ1bmN0aW9uIGlzTnVsbCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCBpcyBudWxsIHtcXHJcXG4gIHJldHVybiBzdWJqZWN0ID09PSBudWxsO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YW5jZSBvciBub3QuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIFRoaXMgbWV0aG9kIHRha2VzIGludG8gYWNjb3VudCB3aGljaCBgd2luZG93YCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIG5vZGUgYmVsb25ncyB0by5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBzdWJqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCAtIEEgc3ViamVjdCB0byBjaGVjay5cXHJcXG4gKlxcclxcbiAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGB0cnVlYCBpZiB0aGUgc3ViamVjdCBpcyBhbiBIVE1MRWxlbWVudCBpbnN0YW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UsIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaXNIVE1MRWxlbWVudCggc3ViamVjdDogdW5rbm93biApOiBzdWJqZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdCBpcyBIVE1MRWxlbWVudCB7XFxyXFxuICB0cnkge1xcclxcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YmplY3QgaW5zdGFuY2VvZiAoICggc3ViamVjdCBhcyBOb2RlICkub3duZXJEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93ICkuSFRNTEVsZW1lbnQ7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSBjYXRjaCAoIGUgKSB7XFxyXFxuICAgIHJldHVybiBmYWxzZTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxufSIsImltcG9ydCB7IGlzQXJyYXkgfSBmcm9tIFwnLi4vLi4vdHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvdHlwZSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUHVzaCB0aGUgcHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZpZGVkIHZhbHVlIHRvIGFuIGFycmF5IGlmIHRoZSB2YWx1ZSBpcyBub3QgYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FycmF5LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlIC0gQSB2YWx1ZSB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHVzaC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgY29udGFpbmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgdGhlIHZhbHVlLCBvciB0aGUgdmFsdWUgaXRzZWxmIGlmIGl0IGlzIGFscmVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2R5IGFuIGFycmF5LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB0b0FycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheTxUPiggdmFsdWU6IFQgfCBUW10gKTogVFtdIHtcXHJcXG4gIHJldHVybiBpc0FycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidheSggdmFsdWUgKSA/IHZhbHVlIDogWyB2YWx1ZSBdO1xcclxcbn1cXHJcXG4iLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaW1wb3J0IHsgdG9BcnJheSB9IGZyb20gJy4uL3RvQXJyYXkvdG9BcnJheSc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBleHRlbmRlZCBgQXJyYXkjZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hgIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgdmFsdWUgYXMgYW4gYXJnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHZhbHVlcyAgIC0gQSB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3IgdmFsdWVzIHRvIGl0ZXJhdGUgb3Zlci5cXHJcXG4gKiBAcGFyYW0gaXRlcmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIC0gQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICovXFxyXFxuZXhwb3J0IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBmb3JFYWNoPFQ+KCB2YWx1ZXM6IFQgfCBUW10sIGl0ZXJhdGVlOiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSApID0+IHZvaWQgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgdG9BcnJheSggdmFsdWVzICkuZm9yRWFjaCggaXRlcmF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlICk7XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgYXJyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IGluY2x1ZGVzIHRoZSB2YWx1ZSBvciBub3QuXFxyXFxuICogYEFycmF5I2luY2x1ZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc2AgaXMgbm90IHN1cHBvcnRlZCBieSBJRS5cXHJcXG4gKlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gYXJyYXkgLSBBbiBhcnJheS5cXHJcXG4gKiBAcGFyYW0gdmFsdWUgLSBBIHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSB0byBzZWFyY2ggZm9yLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBgdHJ1ZWAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIHRoZSBhcnJheSBpbmNsdWRlcyB0aGUgdmFsdWUsIG9yIG90aGVyd2lzZSBgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZXM8VD4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBhcnJheTogVFtdLCB2YWx1ZTogVCApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXkuaW5kZXhPZiggdmFsdWUgKSA+IC0xO1xcclxcbn1cXHJcXG4iLCJpbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ0IHsgdG9BcnJheSB9IGZyb20gJy4uL3RvQXJyYXkvdG9BcnJheSc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcblxcclxcbi8qKlxcclxcbiAqIEV4dGVuZGVkIGBBcnJheSNwdXNoKClgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGF0IGFjY2VwdHMgYW4gaXRlbSBvciBhbiBhcnJheSB3aXRoIGl0ZW1zLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBwYXJhbSBhcnJheSAtIEFuIGFycmF5IHRvIHB1c2ggaXRlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAqIEBwYXJhbSBpdGVtcyAtIEFuIGl0ZW0gb3IgaXRlbXMgdG8gcHVzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgcHJvdmlkZWQgYXJyYXkgaXRzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZi5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcHVzaDxUPiggYXJyYXk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUW10sIGl0ZW1zOiBUIHwgVFtdICk6IFRbXSB7XFxyXFxuICBhcnJheS5wdXNoKCAuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4udG9BcnJheSggaXRlbXMgKSApO1xcclxcbiAgcmV0dXJuIGFycmF5O1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20gXCcuLi8uLi9hcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRvZ2dsZXMgdGhlIHByb3YiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlZCBjbGFzcyBvciBjbGFzc2VzIGJ5IGZvbGxvd2luZyB0aGUgYGFkZGAgYm9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW4uXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtICAgICAtIEFuIGVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHdob3NlIGNsYXNzZXMgYXJlIHRvZ2dsZWQuXFxyXFxuICogQHBhcmFtIGNsYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIC0gQSBjbGFzcyBvciBjbGFzcyBuYW1lcy5cXHJcXG4gKiBAcGFyYW0gYWRkICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLSBXaGV0aGVyIHRvIGFkZCBvciByZW1vdmUgYSBjbGFzcy5cXHJcXG4gKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCBlbG06IEVsZW1lbnQsIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzOiBzdHJpbmcgfCBzdHJpbmdbXSwgYWRkOiBib29sZWFuICk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGlmICggZWxtICkge1xcclxcbiAgICBmb3JFYWNoKCBjbGFzc2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFtZSA9PiB7XFxyXFxuICAgICAgaWYgKCBuYW1lICkge1xcclxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVsbS5jbGFzc0xpc3RbIGFkZCA/ICdhZGQnIDogJ3JlbW92ZScgXSggbmFtZSApOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICB9XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsImltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSBcJy4uLy4uL3R5cGUvdHlwZVwnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5pbXBvcnQgeyB0b2dnbGVDbGFzcyB9IGZyb20gJy4uL3RvZ2dsZUNsYXNzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi90b2dnbGVDbGFzcyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQWRkcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xhc3NlcyB0byB0aGUgZWxlbWVudC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxtICAgICAtIEFuIGVsZW1lbnQgdG8gYWRkIGNsYXNzZXMgdG8uXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBjbGFzc2VzIC0gQ2xhc3NlcyB0byBhZGQuXFxyXFxuICovXFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCBmdW5jdGlvbiBhZGRDbGFzcyggZWxtOiBFbGVtZW50LCBjbGFzc2VzOiBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaW5nIHwgc3RyaW5nW10gKTogdm9pZCB7XFxyXFxuICB0b2dnbGVDbGFzcyggZWxtLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgaXNTdHJpbmcoIGNsYXNzZXMgKSA/IGNsYXNzZXMuc3BsaXQoICcgJyApIDogY2wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzZXMsIHRydWUgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi9hcnJheSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEFwcGVuZHMgY2hpbGRyZW4gdG8gdGhlIHBhcmVudCBlbGVtZW50LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqIEBwYXJhbSBjaGlsZHJlbiAtIEEgY2hpbGQgb3IgY2hpbGRyZW4gdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcGVuZCB0byB0aGUgcGFyZW50LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gYXBwZW5kKCBwYXJlbnQ6IEVsZW1lbnQsIGNoaWxkcmVuOiBOb2RlIHwgTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGVbXSApOiB2b2lkIHtcXHJcXG4gIGZvckVhY2goIGNoaWxkcmVuLCBwYXJlbnQuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVuZENoaWxkLmJpbmQoIHBhcmVudCApICk7XFxyXFxufVxcclxcbiIsImltcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnQgeyBmb3JFYWNoIH0gZnJvbSAnLi4vLi4vYXJyYXknO1xcclxcblxcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4vKipcXHJcXG4gKiBJbnNlcnRzIGEgbm9kZSBvciBub2RlcyBiZWZvcmUgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzcGVjaWZpZWQgcmVmZXJlbmNlIG5vZGUuXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIG5vZGVzIC0gQSBub2RlIG9yIG5vZGVzIHRvIGluc2VydC5cXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIHJlZiAgIC0gQSByZWZlcmVuY2Ugbm9kZS5cXHJcXG4gKi9cXHJcXG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J0IGZ1bmN0aW9uIGJlZm9yZSggbm9kZXM6IE5vZGUgfCBOb2RlW10sIHJlZjogTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUgfCBudWxsICk6IHZvaWQge1xcclxcbiAgZm9yRWFjaCggbm9kZXMsIG5vZGUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+IHtcXHJcXG4gICAgY29uc3QgcGFyZW50ID0gKCByZWYgfHwgbm9kZSApLnBhcmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOb2RlO1xcclxcblxcclxcbiAgICBpZiAoIHBhcmVudCApIHtcXHJcXG4gICAgICBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50Lmluc2VydEJlZm9yZSggbm9kZSwgcmVmICk7XFxyXFxuICAgIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9ICk7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGNhbiBiZSBzZWxlY3RlZCBieSB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3ZpZGVkIHNlbGVjdG9yIG9yIG5vdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gZWxtICAgICAgLSBBbiBlbGVtZW50IHRvIGNoZWNrLlxcclxcbiAqIEBwYXJhbSBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0b3IgLSBBIHNlbGVjdG9yIHRvIHRlc3QuXFxyXFxuICpcXHJcXG4gKiBAcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybiBgdHJ1ZWAgaWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG1hdGNoZXMoIGVsbTogRWxlbWVudCB8IEV2ZW50VGFyZ2V0LCBzZWxlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3I6IHN0cmluZyApOiBib29sZWFuIHtcXHJcXG4gIHJldHVybiBpc0hUTUxFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJudCggZWxtICkgJiYgKCBlbG1bICdtc01hdGNoZXNTZWxlY3RvcicgXSB8fCBlbG0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLm1hdGNoZXMgKS5jYWxsKCBlbG0sIHNlbGVjdG9yICk7XFxyXFxufVxcclxcbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJpbXBvcnQgeyBzbGljZSB9IGZyb20gXCcuLi8uLi9hcnJheUxpa2VcJztcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuaW1wb3J0IHsgbWF0Y2hlcyB9IGZyb20gJy4uL21hdGNoZXMvbWF0Y2hlcyc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEZpbmRzIGNoaWxkcmVuIHRoYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hhcyB0aGUgc3BlY2lmaWVkIHRhZyBvciBjbGFzcyBuYW1lLlxcclxcbiAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEBwYXJhbSBwYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBzZWxlY3RvciAtIE9wdGlvbmFsLiBBIHNlbGVjdG9yIHRvIGZpbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXIgY2hpbGRyZW4uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEFuIGFycmF5IHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRoIGZpbHRlcmVkIGNoaWxkcmVuLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gY2hpbGRyZW48RSBleHRlbmRzIEhUTUxFbGVtZW50PiggcGFyZW50OiBIVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNTEVsZW1lbnQsIHNlbGVjdG9yPzogc3RyaW5nICk6IEVbXSB7XFxyXFxuICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2hpbGRyZW4gPSBwYXJlbnQgPyBzbGljZSggcGFyZW50LmNoaWxkcmVuICkgYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEVbXSA6IFtdO1xcclxcbiAgcmV0dXJuIHNlbGVjdG9yID8gY2hpbGRyZW4uZmlsdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciggY2hpbGQgPT4gbWF0Y2hlcyggY2hpbGQsIHNlbGVjdG9yICkgKSA6IGNoaWxkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbjtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgY2hpbGRyZW4gfSBmcm9tIFwnLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NoaWxkcmVuL2NoaWxkcmVuJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogUmV0dXJucyBhIGNoaWxkIGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBzcGVjaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaWVkIHRhZyBvciBjbGFzcyBuYW1lLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQgICAtIEEgcGFyZW50IGVsZW1lbnQuXFxyXFxuICogQHBhcmFtIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciAtIEEgc2VsZWN0b3IgdG8gZmlsdGVyIGNoaWxkcmVuLlxcclxcbiAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEByZXR1cm4gQSBtYXRjaGVkIGNoaWxkIGVsZW1lbnQgaWYgYXZhaWxhYmxlLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3Igb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gY2hpbGQ8RSBleHRlbmRzIEhUTUxFbGVtZW50PiggcGFyZW50OiBIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RNTEVsZW1lbnQsIHNlbGVjdG9yPzogc3RyaW5nICk6IEUgfCB1bmRlZmluZWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcmVuPEU+KCBwYXJlbnQsIHNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciApWyAwIF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQgYXMgRTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidufVxcclxcbiIsIi8qKlxcclxcbiAqIEFuIGFsaWFzIG9mIGBPYmplY3Qua2V5cygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKWBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3Qgb3duS2V5cyA9IE9iamVjdC5rJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V5czsiLCJpbXBvcnQgeyBvd25LZXlzIH0gZnJvbSBcJy4uL293bktleXMvb3duS2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieXMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEl0ZXJhdGVzIG92ZXIgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBwcm92aWRlZCBvYmplY3QgYnkgb3duIGVudW1lcmFibGUga2V5cyB3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsaW5nIHRoZSBpdGVyYXRlZSBmdW5jdGlvbi5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyYW0gb2JqZWN0ICAgLSBBbiBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gaXRlcmF0ZWUgLSBBbiBpdGVyYXRlZSBmdW5jdGlvbiB0aGF0IHRhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tlcyBgdmFsdWVgIGFuZCBga2V5YCBhcyBhcmd1bWVudHMuXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByaWdodCAgICAtIElmIGB0cnVlYCwgdGhlIG1ldGhvZCBpdGVyYXRlcyBvdmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgb2JqZWN0IGZyb20gdGhlIGVuZCBsaWtlIGBmb3JFYWNoUmlnaHQoKWAuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHJldHVybiBBIHByb3ZpZGVkIG9iamVjdCBpdHNlbGYuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBmb3JPd248VCBleHRlbmRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3Q+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgaXRlcmF0ZWU6ICggdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlOiBUWyBrZXlvZiBUIF0sIGtleTogc3RyaW5nICkgPT4gYm9vbGVhbiB8IHZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkLFxcclxcbiAgcmlnaHQ/OiBib29sZWFuXFxyXFxuKTogVCB7XFxyXFxuICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvYmplY3QgKSB7XFxyXFxuICAgICggcmlnaHQgPyBvd25LZXlzKCBvYmplY3QgKS5yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZXJzZSgpIDogb3duS2V5cyggb2JqZWN0ICkgKS5mb3JFYWNoKCBrZXkgPT4geycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgICBrZXkgIT09ICdfX3Byb3RvX18nICYmIGl0ZXJhdGVlKCBvYmplYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0WyBrZXkgXSwga2V5ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICByZXR1cm4gb2JqZWN0O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBDYXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgSGVhZCwgUHVzaCwgUmVzb2x2ZSwgU2hpZnQgfSBmcm9tICcuLi8uLi8uLi90eSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwZXMnO1xcclxcbmltcG9ydCB7IHNsaWNlIH0gZnJvbSAnLi4vLi4vYXJyYXlMaWtlJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuaW1wb3J0IHsgZm9yT3duIH0gZnJvbSAnLi4vZm9yT3duL2Zvck93IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm4nO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIEFzc2lnbnMgVSB0byBULiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEB0eXBlUGFyYW0gVCAtIEFuIG9iamVjdCB0byBhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWduIHRvLlxcclxcbiAqIEB0eXBlUGFyYW0gVSAtIEFuIG9iamVjdCB0byBhc3NpZ24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhc3NpZ25lZCBvYmplY3QgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgQXNzaWduPFQsIFU+ID0gT21pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic8VCwga2V5b2YgVT4gJiBVO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFJlY3Vyc2l2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidseSBhc3NpZ25zIFVbXSB0byBULlxcclxcbiAqXFxyXFxuICogQHR5cGVQYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVCAtIEFuIG9iamVjdCB0byBhc3NpZ24gdG8uXFxyXFxuICogQHR5cGVQYXJhbSBVIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgdHVwbGUgY29udGFpbnMgb2JqZWN0cy5cXHJcXG4gKlxcclxcbiAqIEByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIEFuIGFzc2lnbmVkIG9iamVjdCB0eXBlLlxcclxcbiAqL1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZSBBc3NpZ25lZDxUIGV4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndFtdLCBOIGV4dGVuZHMgbnVtYmVyLCBDIGV4dGVuZHMgYW55W10gPSBbXT4gPSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgMDogVCxcXHJcXG4gIDE6IEFzc2lnbmVkPEFzc2lnbjxULCBIZWFkPCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJVPj4sIFNoaWZ0PFU+LCBOLCBQdXNoPEM+PixcXHJcXG59WyBDWydsZW5ndGgnXSBleCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kcyBOID8gMCA6IDEgXSBleHRlbmRzIGluZmVyIEEgPyBDYXN0PEEsIGFueT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogbmV2ZXI7XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUIGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmRzIG9iamVjdD4oIG9iamVjdDogVCApOiBUO1xcclxcblxcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gYXNzaWduPFQgZXh0ZW5kcyBvYmplY3QsIFUgZXh0ZW5kcyBvYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0W10+KFxcclxcbiAgb2JqZWN0OiBULFxcclxcbiAgLi4uc291cmNlczogVVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4pOiBSZXNvbHZlPEFzc2lnbmVkPFQsIFUsIFVbJ2xlbmd0aCddPj5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuLyoqXFxyXFxuICogQXNzaWducyBhbGwgb3duIGVudW1lcmFibGUgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BlcnRpZXMgb2YgYWxsIHNvdXJjZSBvYmplY3RzIHRvIHRoZSBwcm92aWRlZCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG9iamVjdCAtIEFuIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gYXNzaWduIHByb3BlcnRpZXMgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBBbiBvYmplY3QgYXNzaWduZWQgcHJvcGVydGllcyBvZiB0aGUgc291cmNlcyB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28uXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUIGV4dGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIG9iamVjdD4oIG9iamVjdDogVCApOiBhbnkge1xcclxcbiAgLy8gZXNsaW50LWRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXMsIHByZWZlci1zcHJlYWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBzbGljZSggYXJndW1lbnRzLCAxICkuZm9yRWFjaCggc291cmNlID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGZvck93biggc291cmNlLCAoIHZhbHVlLCBrZXkgKSA9PiB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIG9iamVjdFsga2V5IF0gPSBzb3VyY2VbIGtleSBdO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSApO1xcclxcbiAgfSApO1xcclxcblxcclxcbiAgcmV0dXJuIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IENhc3QsIEhlYWQsIFB1c2gsIFJlc28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibHZlLCBTaGlmdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic2xpY2UgfSBmcm9tICcuLi8uLi9hcnJheUxpa2UnO1xcclxcbmltcG9ydCB7IGlzQXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmF5LCBpc09iamVjdCB9IGZyb20gJy4uLy4uL3R5cGUvdHlwZSc7XFxyXFxuaW1wb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IGZvck93biB9IGZyb20gJy4uL2Zvck93bi9mb3JPd24nO1xcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4vKipcXHJcXG4gKiBNZXJnZXMgVSB0byBULlxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEB0eXBlUGFyYW0gVCAtIEFuIG9iamVjdCB0byBtZXJnZSBVIGludG8uXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEB0eXBlUGFyYW0gVSAtIEFuIG9iamVjdCB0byBtZXJnZSBwcm9wZXJ0aWVzIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9tLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIG1lcmdlZCBvYmplY3QgdHlwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgTWVyZ2U8VCBleHRlbmRzIG9iaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QsIFUgZXh0ZW5kcyBvYmplY3Q+ID0gT21pdDxULCBrZXlvZiBVPiAmIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBbIEsgaW4gKCBrZXlvZiBUICYga2V5b2YgVSApIF06IFVbIEsgXSBleHRlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBvYmplY3RcXHJcXG4gICAgPyBVWyBLIF0gZXh0ZW5kcyBhbnlbXVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICA/IFVbIEsgXVxcclxcbiAgICAgIDogVFsgSyBdIGV4dGVuZHMgb2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndFxcclxcbiAgICAgICAgPyBNZXJnZTxUWyBLIF0sIFVbIEsgXT4gZXh0ZW5kcyBpbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIgQSA/IFJlc29sdmU8Q2FzdDxBLCBvYmplY3Q+PiA6IG5ldmVyXFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgOiBVWyBLIF1cXHJcXG4gICAgOiBVWyBLIF07XFxyXFxufSAmIE9taXQ8VSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleW9mIFQ+O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFJlY3Vyc2l2ZWx5IG1lcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgVVtdIHRvIFQuXFxyXFxuICpcXHJcXG4gKiBAdHlwZVBhcmFtIFQgLSBBbiBvYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0IHRvIGFzc2lnbiB0by5cXHJcXG4gKiBAdHlwZVBhcmFtIFUgLSBBIHR1cGxlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb250YWlucyBvYmplY3RzLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWduZWQgb2JqZWN0IHR5cGUuXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgTWVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlZDxUIGV4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0W10sIE4gZXh0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZHMgbnVtYmVyLCBDIGV4dGVuZHMgYW55W10gPSBbXT4gPSB7XFxyXFxuICAwOiBULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIDE6IE1lcmdlZDxNZXJnZTxULCBIZWFkPFU+PiwgU2hpZnQ8VT4sIE4sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJQdXNoPEM+PixcXHJcXG59WyBDWydsZW5ndGgnXSBleHRlbmRzIE4gPyAwIDogMSBdICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHRlbmRzIGluZmVyIEEgPyBDYXN0PEEsIGFueT4gOiBuZXZlcjtcXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0OiBUICk6IFQ7XFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlPFQgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4dGVuZHMgb2JqZWN0LCBVIGV4dGVuZHMgb2JqZWN0W10+KFxcclxcbiAgb2JqZWN0OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVCxcXHJcXG4gIC4uLnNvdXJjZXM6IFVcXHJcXG4pOiBSZXNvbHZlPE1lcmdlZDwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVCwgVSwgVVsnbGVuZ3RoJ10+Plxcclxcblxcclxcbi8qKlxcclxcbiAqIFJlY3Vyc2kiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVseSBtZXJnZXMgc291cmNlIHByb3BlcnRpZXMgdG8gdGhlIG9iamVjdC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQmUgYXdhcmUgdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCBtZXJnZSBhcnJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lzLiBUaGV5IGFyZSBqdXN0IGR1cGxpY2F0ZWQgYnkgYHNsaWNlKClgLlxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBvYmplY3QgLSBBbiBvYmplY3QgdG8gbWVyZ2UgcHJvcGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpZXMgdG8uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgbmV3IG9iamVjdCB3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aCBtZXJnZWQgcHJvcGVydGllcy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIG1lcmdlPFQgZXh0ZW5kcyBvYmplY3Q+KCBvYmplY3Q6IFQgKTogYW55IHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Ftc1xcclxcbiAgc2xpY2UoIGFyZ3VtZW50cywgMSApLmZvckVhY2goIHNvdXJjZSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz4ge1xcclxcbiAgICBmb3JPd24oIHNvdXJjZSwgKCB2YWx1ZSwga2V5ICkgPT4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBpZiAoIGlzQXJyYXkoIHZhbHVlICkgKSB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb2JqZWN0WyBrZXkgXSA9IHZhbHVlLnNsaWNlKCk7XFxyXFxuICAgICAgfSBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xzZSBpZiAoIGlzT2JqZWN0KCB2YWx1ZSApICkge1xcclxcbiAgICAgICAgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1sga2V5IF0gPSBtZXJnZSgge30sIGlzT2JqZWN0KCBvYmplY3RbIGtleSBdICkgPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0WyBrZXkgXSA6IHt9LCB2YWx1ZSApO1xcclxcbiAgICAgIH0gZWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uge1xcclxcbiAgICAgICAgb2JqZWN0WyBrZXkgXSA9IHZhbHVlO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XFxyXFxuICAgIH0gKTtcXHJcXG4gIH0gKTtcXHJcXG5cXHJcXG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gb2JqZWN0O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2FycmF5JztcXHJcXG5pbXBvcnQgeyBvd25LZXlzIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm93bktleXMvb3duS2V5cyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbGV0ZXMgc3BlY2lmaWVkIG93biBrZXlzIGZyb20gdGhlIG9iamVjdC5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAcGFyYW0gb2JqZWN0IC0gQW4gb2JqZWN0LlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW0ga2V5cyAgIC0gQSBrZXkgb3Iga2V5cyB0byBkZWxldGUuIElmIG5vdCBzcGVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmaWVkLCBhbGwgb3duIGVudW1lcmFibGUga2V5cyB3aWxsIGJlIGRlbGV0ZWQuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBvbWl0KCBvYmplY3Q6IG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QsIGtleXM/OiBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkIHtcXHJcXG4gIGZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKCBrZXlzIHx8IG93bktleXMoIG9iamVjdCApLCBrZXkgPT4ge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVsZXRlIG9iamVjdFsga2V5IF07XFxyXFxuICB9ICk7XFxyXFxufSIsImltcG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBmb3JFYWNoIH0gZnJvbSAnLi4vLi4vYXJyYXknO1xcclxcblxcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24vKipcXHJcXG4gKiBSZW1vdmVzIGF0dHJpYnV0ZXMgZnJvbSB0aGUgZWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtcyAgLSBBbiBlbGVtZW50IG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbGVtZW50cy5cXHJcXG4gKiBAcGFyYW0gYXR0cnMgLSBBbiBhdHRyaWJ1dGUgb3IgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHJpYnV0ZXMgdG8gcmVtb3ZlLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gcmVtb3ZlQXR0cmlidXRlKCBlbG1zOiBFbGVtZW50IHwgRWxlbWVudFtdLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnM6IHN0cmluZyB8IHN0cmluZ1tdICk6IHZvaWQge1xcclxcbiAgZm9yRWFjaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGVsbXMsIGVsbSA9PiB7XFxyXFxuICAgIGZvckVhY2goIGF0dHJzLCBhdHRyID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgZWxtICYmIGVsbS5yZW1vdmVBdHRyaWJ1dGUoIGF0dHIgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH0gKTtcXHJcXG59XFxyXFxuIiwiaW1wb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IGZvckVhY2ggfSBmcm9tICcuLi8uLi9hcnJheSc7XFxyXFxuaW1wb3J0IHsgZm8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIick93biB9IGZyb20gJy4uLy4uL29iamVjdCc7XFxyXFxuaW1wb3J0IHsgaXNOdWxsLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaXNPYmplY3QgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUnO1xcclxcbmltcG9ydCB7IHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZW1vdmVBdHRyaWJ1dGUgfSBmcm9tICcuLi9yZW1vdmVBdHRyaWJ1dGUvcmVtb3ZlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkF0dHJpYnV0ZSc7XFxyXFxuXFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUoIGVsbXM6IEVsZW1lbnQgfCBFbGVtZW50W10sIGF0dHI6IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuICk6IHZvaWQ7XFxyXFxuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoIGVsbXM6IEVsZW1lbnQgfCBFbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudFtdLCBhdHRyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Jvb2xlYW4+ICk6IHZvaWQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogU2V0cyBhdHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlL2F0dHJpYnV0ZXMgdG8gdGhlIGVsZW1lbnQgb3IgZWxlbWVudHMuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIElmIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgYW4gZW1wdHkgc3RyaW5nLCB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGF0dHJpYnV0ZSB3aWxsIGJlIHJlbW92ZWQuXFxyXFxuICpcXHJcXG4gKiBAcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFtIGVsbXMgIC0gQW4gZWxlbWVudCBvciBhbiBhcnJheSB3aXRoIGVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKiBAcGFyYW0gYXR0cnMgLSBBbiBhdHRyaWJ1dGUgbmFtZSBvZiBhbiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0IHdpdGggcGFpcnMgb2YgYSBuYW1lIGFuZCBhIHZhbHVlLlxcclxcbiAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gdmFsdWUgLSBBIHZhbHVlIHRvIHNldC5cXHJcXG4gKi9cXHJcXG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZShcXHJcXG4gIGVsbXM6IEVsZW1lbnQgfCBFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudFtdLFxcclxcbiAgYXR0cnM6IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcgfCBudW1iZXIgfCBib29sZWFuPixcXHJcXG4gIHZhbHVlPzogc3RyaW5nIHwgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciB8IGJvb2xlYW5cXHJcXG4pOiB2b2lkIHtcXHJcXG4gIGlmICggaXNPYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0KCBhdHRycyApICkge1xcclxcbiAgICBmb3JPd24oIGF0dHJzLCAoIHZhbHVlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFtZSApID0+IHtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGVsbXMsIG5hbWUsIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9IGVsc2Uge1xcclxcbiAgICBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaCggZWxtcywgZWxtID0+IHtcXHJcXG4gICAgICBpc051bGwoIHZhbHVlICkgfHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHZhbHVlID09PSAnJyA/IHJlbW92ZUF0dHJpYnV0ZSggZWxtLCBhdHRycyApIDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbS5zZXRBdHRyaWJ1dGUoIGF0dHJzLCBTdHJpbmcoIHZhbHVlICkgKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0gKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIn0gZnJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5pbXBvcnQgeyBhZGRDbGFzcyB9IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi9hZGRDbGFzcy9hZGRDbGFzcyc7XFxyXFxuaW1wb3J0IHsgYXBwZW5kIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uL2FwcGVuZC9hcHBlbmQnO1xcclxcbmltcG9ydCB7IHNldEF0dHJpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImJ1dGUgfSBmcm9tICcuLi9zZXRBdHRyaWJ1dGUvc2V0QXR0cmlidXRlJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZTxLIGV4dGVuZHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4oXFxyXFxuICB0YWc6IEssXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVhbj4gfCBzdHJpbmcsXFxyXFxuICBwYXJlbnQ/OiBIVE1MRWxlbWVudFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbIEsgXTtcXHJcXG5cXHJcXG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGZ1bmN0aW9uIGNyZWF0ZShcXHJcXG4gIHRhZzogc3RyaW5nLFxcclxcbiAgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbj4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgc3RyaW5nLFxcclxcbiAgcGFyZW50PzogSFRNTEVsZW1lbnRcXHJcXG4pOiBIVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNTEVsZW1lbnQ7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogQ3JlYXRlcyBhIEhUTUwgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gdGFnICAgIC0gQSB0YWcgbmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWUuXFxyXFxuICogQHBhcmFtIGF0dHJzICAtIE9wdGlvbmFsLiBBbiBvYmplY3Qgd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGggYXR0cmlidXRlcyB0byBhcHBseSB0aGUgY3JlYXRlZCBlbGVtZW50IHRvLCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYSBzdHJpbmcgd2l0aCBjbGFzc2VzLlxcclxcbiAqIEBwYXJhbSBwYXJlbnQgLSBPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9uYWwuIEEgcGFyZW50IGVsZW1lbnQgd2hlcmUgdGhlIGNyZWF0ZWQgZWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgaXMgYXBwZW5kZWQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGU8SyBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4oXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgdGFnOiBLLFxcclxcbiAgYXR0cnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyIHwgYm9vbGVhbj4gfCBzdHJpbmcsXFxyXFxuICBwYXJlbnQ/OiBIVE1MRWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnRcXHJcXG4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbIEsgXSB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29uc3QgZWxtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggdGFnICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgaWYgKCBhdHRycyApIHtcXHJcXG4gICAgaXNTdHJpbmcoIGF0dHJzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpID8gYWRkQ2xhc3MoIGVsbSwgYXR0cnMgKSA6IHNldEF0dHJpYnV0ZSggZWxtLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHBhcmVudCAmJiBhcHBlbmQoIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQsIGVsbSApO1xcclxcblxcclxcbiAgcmV0dXJuIGVsbTtcXHJcXG59XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiIsImltcG9ydCB7IGlzTnVsbCwgaXNVbmRlZmluZWQgfSBmcm9tIFwnLi4vLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL3R5cGUvdHlwZSc7XFxyXFxuXFxyXFxuXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHN0eWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTxLIGV4dGVuZHMga2V5b2YgQ1NTU3R5bGVEZWNsYXJhdGlvbj4oXFxyXFxuICBlbG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBIVE1MRWxlbWVudCxcXHJcXG4gIHByb3A6IEssXFxyXFxuKTogQ1NTU3R5bGVEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjbGFyYXRpb25bIEsgXTtcXHJcXG5cXHJcXG5leHBvcnQgZnVuY3Rpb24gc3R5bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKFxcclxcbiAgZWxtOiBIVE1MRWxlbWVudCxcXHJcXG4gIHByb3A6IHN0cmluZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuKTogc3RyaW5nO1xcclxcblxcclxcbmV4cG9ydCBmdW5jdGlvbiBzdHlsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBlbG06IEhUTUxFbGVtZW50LFxcclxcbiAgcHJvcDogc3RyaW5nLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXJcXHJcXG4pOiB2b2lkO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBBcHBsaWVzIGlubGluZSBzdHlsZXMgdG8gdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcm92aWRlZCBlbGVtZW50IGJ5IGFuIG9iamVjdCBsaXRlcmFsLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBwYXJhbSBlbG0gICAtIEFuIGVsZW1lbnQgdG8gYXBwbHkgc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyB0by5cXHJcXG4gKiBAcGFyYW0gcHJvcCAgLSBBbiBvYmplY3QgbGl0ZXJhbCB3aXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCBzdHlsZXMgb3IgYSBwcm9wZXJ0eSBuYW1lLlxcclxcbiAqIEBwYXJhbSB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBIHZhbHVlIHRvIHNldC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlKFxcclxcbiAgZWxtOiBIVE1MRWxlbWVudCxcXHJcXG4gIHByb3A6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcsXFxyXFxuICB2YWx1ZT86IHN0cmluZyB8IG51bWJlclxcclxcbik6IHN0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmcgfCB2b2lkIHtcXHJcXG4gIGlmICggaXNVbmRlZmluZWQoIHZhbHVlICkgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSggZWxtIClbIHByb3AgXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICBpZiAoICEgaXNOdWxsKCB2YWx1ZSApICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgZWxtLnN0eWxlWyBwcm9wIF0gPSBgJHsgdmFsdWUgfWA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBzdHlsZSB9IGZyb20gXCcuLi9zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ5bGUvc3R5bGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFNldHMgdGgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBgZGlzcGxheWAgQ1NTIHZhbHVlIHRvIHRoZSBlbGVtZW50LlxcclxcbiAqXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqIEBwYXJhbSBlbG0gICAgIC0gQW4gZWxlbWVudCB0byBzZXQgYSBuZXcgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlIHRvLlxcclxcbiAqIEBwYXJhbSBkaXNwbGF5IC0gQSBuZXcgYGRpc3BsYXlgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZS5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheSggZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbTogSFRNTEVsZW1lbnQsIGRpc3BsYXk6IHN0cmluZyApOiB2b2lkIHtcXHJcXG4gIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZSggZWxtLCBcJ2Rpc3BsYXlcJywgZGlzcGxheSApO1xcclxcbn1cXHJcXG4iLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogRm9jdXNlcyB0aGUgcHJvdmlkZWQgZWxlbWVudCB3aXRob3V0IHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JvbGxpbmcgdGhlIGFzY2VuZGFudCBlbGVtZW50LlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBlbG0gLSBBbiBlbGVtZW50IHRvIGZvY3VzLlxcclxcbiAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgZnVuY3Rpb24gZm9jdXMoIGVsbTogSFRNTEVsZW1lbnQgKTogdm9pZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIie1xcclxcbiAgZWxtWyAnc2V0QWN0aXZlJyBdICYmIGVsbVsgJ3NldEFjdGl2ZScgXSgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB8fCBlbG0uZm9jdXMoIHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9ICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZSB2YWx1ZS5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBlbG0gIC0gQW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZW1lbnQuXFxyXFxuICogQHBhcmFtIGF0dHIgLSBBbiBhdHRyaWJ1dGUgdG8gZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCBlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtOiBFbGVtZW50LCBhdHRyOiBzdHJpbmcgKTogc3RyaW5nIHwgbnVsbCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGVsbS5nZXRBdHRyaWJ1dGUoIGF0dHIgKTtcXHJcXG59XFxyXFxuIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgZWxlbWVudCBjb250YWlucyB0aGUgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWNpZmllZCBjbGFzcyBvciBub3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAtIEFuIGVsZW1lbnQgdG8gY2hlY2suXFxyXFxuICogQHBhcmFtIGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05hbWUgLSBBIGNsYXNzIG5hbWUgdGhhdCBtYXkgYmUgY29udGFpbmVkIGJ5IHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxlbWVudC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlbWVudCBjb250YWlucyB0aGUgY2xhc3MsIG9yIG90aGVyd2lzZSBgZmFsc2VgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gaGFzQ2xhc3MoIGVsbTogRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQsIGNsYXNzTmFtZTogc3RyaW5nICk6IGJvb2xlYW4ge1xcclxcbiAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBlbG0gJiYgZWxtLmNsYXNzTGlzdC5jb250YWlucyggY2xhc3NOYW1lICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBSZXR1cm5zIGEgRE9NUmVjdCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9mIHRoZSBwcm92aWRlZCBlbGVtZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0YXJnZXQgLSBBbiBlbGVtZW50LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gcmVjdCggdGFyZ2V0OiBFbGVtZW50ICk6IERPTVJlY3Qge1xcclxcbiAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XFxyXFxufVxcclxcbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJpbXBvcnQgeyBmb3JFYWNoIH0gZnJvbSBcJy4uLy4uL2FycmF5XCc7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbi8qKlxcclxcbiAqIFJlbW92ZXMgdGhlIHByb3ZpZGVkIG5vZGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Zyb20gaXRzIHBhcmVudC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBub2RlcyAtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBIG5vZGUgb3Igbm9kZXMgdG8gcmVtb3ZlLlxcclxcbiAqL1xcclxcbmV4cG9ydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gcmVtb3ZlKCBub2RlczogTm9kZSB8IE5vZGVbXSApOiB2b2lkIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBmb3JFYWNoKCBub2Rlcywgbm9kZSA9PiB7XFxyXFxuICAgIGlmICggbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUgJiYgbm9kZS5wYXJlbnROb2RlICkge1xcclxcbiAgICAgIG5vZGUucGFyZW50TicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfSApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG59XFxyXFxuIiwiaW1wb3J0IHsgY2hpbGQgfSBmcm9tIFwnLi4vY2hpbGQvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJoaWxkJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBQYXJzZXMgdGhlIHAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm92aWRlZCBIVE1MIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gaHRtbCAtIEFuIEhUTUwgc3RyaW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBwYXJzZS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gRWxlbWVudCBvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3VjY2Vzcywgb3Igb3RoZXJ3aXNlIGB1bmRlZmluZWRgLlxcclxcbiAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25leHBvcnQgZnVuY3Rpb24gcGFyc2VIdG1sPEUgZXh0ZW5kcyBIVE1MRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+KCBodG1sOiBzdHJpbmcgKTogRSB8IHVuZGVmaW5lZCB7XFxyXFxuICByZXR1cm4gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaWxkPEU+KCBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKCBodG1sLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXCd0ZXh0L2h0bWxcJyApLmJvZHkgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIENhbGwgdGhlIGBwcmV2ZW50RGVmYXVsdCgpYCBvZiB0aGUgcHJvdmlkZWQgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50LlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGUgICAgICAgICAgICAgICAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBFdmVudCBvYmplY3QuXFxyXFxuICogQHBhcmFtIHN0b3BQcm9wYWdhdGlvbiAtIE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25hbC4gV2hldGhlciB0byBzdG9wIHRoZSBldmVudCBwcm9wYWdhdGlvbiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igbm90LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBwcmV2ZW50KCBlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRXZlbnQsIHN0b3BQcm9wYWdhdGlvbj86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZS5wcmV2ZW50RGVmYXVsdCgpO1xcclxcblxcclxcbiAgaWYgKCBzdG9wUHJvcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2F0aW9uICkge1xcclxcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcXHJcXG4gIH1cXHJcXG59XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiIsIi8qKlxcclxcbiAqIFJldHVybnMgYW4gZWxlbWVudCB0aGF0IG1hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVzIHRoZSBwcm92aWRlZCBzZWxlY3Rvci5cXHJcXG4gKlxcclxcbiAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gcGFyZW50ICAgLSBBIHBhcmVudCBlbGVtZW50IHRvIHN0YXJ0IHNlYXJjaGluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnJvbS5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBBIHNlbGVjdG9yIHRvIHF1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyeS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBmb3VuZCBlbGVtZW50IG9yIGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbGAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIHF1ZXJ5PEUgZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZHMgRWxlbWVudCA9IEVsZW1lbnQ+KCBwYXJlbnQ6IEVsZW1lbnQgfCBEb2N1bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsIHNlbGVjdG9yOiBzdHJpbmcgKTogRSB8IG51bGwge1xcclxcbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJlbnQgJiYgcGFyZW50LnF1ZXJ5U2VsZWN0b3IoIHNlbGVjdG9yICk7XFxyXFxufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4iLCJpbXBvcnQgeyBzbGljZSB9IGZyb20gXCcuLi8uLi9hcnJheUxpaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZXR1cm5zIGVsZW1lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyB0aGF0IG1hdGNoIHRoZSBwcm92aWRlZCBzZWxlY3Rvci5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAcGFyYW0gcGFyZW50ICAgLSBBIHBhcmVudCBlbGVtZW50IHRvIHN0YXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZWFyY2hpbmcgZnJvbS5cXHJcXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBBIHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciB0byBxdWVyeS5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gYXJyYXkgd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGggbWF0Y2hlZCBlbGVtZW50cy5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHF1ZXJ5QWxsPEUgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4oIHBhcmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEVsZW1lbnQgfCBEb2N1bWVudCwgc2VsZWN0b3I/OiBzdHJpbmcgKTogRVtdIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZXR1cm4gc2VsZWN0b3IgPyBzbGljZTxFPiggcGFyZW50LnF1ZXJ5U2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVjdG9yQWxsKCBzZWxlY3RvciApICkgOiBbXTtcXHJcXG59XFxyXFxuIiwiaW1wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9ydCB7IHRvZ2dsZUNsYXNzIH0gZnJvbSAnLi4vdG9nZ2xlQ2xhc3MvdG9nZ2xlQyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXNzJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBSZW1vdmVzIGNsYXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzIGZyb20gdGhlIGVsZW1lbnQuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgLSBBbiBlbGVtZW50IHRvIHJlbW92ZSBjbGFzc2VzIGZyb20uXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBjbGFzc2VzIC0gQ2xhc3NlcyB0byByZW1vdmUuXFxyXFxuICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVDbGFzcyggZWxtOiBFbGVtZW50LCBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Nlczogc3RyaW5nIHwgc3RyaW5nW10gKTogdm9pZCB7XFxyXFxuICB0b2dnbGVDbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3MoIGVsbSwgY2xhc3NlcywgZmFsc2UgKTtcXHJcXG59XFxyXFxuIiwiLyoqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEV4dHJhY3RzIHRoZSB0aW1lc3RhbXAgZnJvbSB0aGUgZXZlbnQgb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBlIC0gQW4gRXZlbnQgb2JqZWN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gdGltZU9mKCBlOiBFdmVudCApOiBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIHtcXHJcXG4gIHJldHVybiBlLnRpbWVTdGFtcDtcXHJcXG59IiwiaW1wb3J0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdHlwZS90eXBlJztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogQXBwZW5kcyBgcHhgIHRvIHRoZSBwcm92aWRlZCBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyLlxcclxcbiAqIElmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IHN0cmluZywganVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgcmV0dXJucyBpdC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSB2YWx1ZSAtIEEgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlIHRvIGFwcGVuZCBgcHhgIHRvLlxcclxcbiAqXFxyXFxuICogQHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSBzdHJpbmcgd2l0aCB0aGUgQ1NTIHVuaXQuXFxyXFxuICovXFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiB1bml0KCB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nICk6IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgcmV0dXJuIGlzU3RyaW5nKCB2YWx1ZSApID8gdmFsdWUgOiB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyBgJHsgdmFsdWUgfXB4YCA6IFwnXCc7XFxyXFxufVxcclxcbiIsIi8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBUaGUgcHJvamVjdCBjb2RlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQUk9KRUNUX0NPREUgPSAncyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwbGlkZSc7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGRhdGEgYXR0cmlidXRlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcmVmaXguXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IERBVEFfQVRUUklCVVRFID0gYGRhdGEtJHsgUFJPSkVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQ09ERSB9YDtcXHJcXG4iLCJpbXBvcnQgeyBQUk9KRUNUX0NPREUgfSBmcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibSAnLi4vLi4vLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcclxcblxcclxcblxcclxcbi8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gKiBUaHJvd3MgYW4gZXJyb3IgaWYgdGhlIHByb3ZpZGVkIGNvbmRpdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gaXMgZmFsc3kuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gY29uZGl0aW9uIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lmIGZhbHN5LCBhbiBlcnJvciBpcyB0aHJvd24uXFxyXFxuICogQHBhcmFtIG1lc3NhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlICAgLSBPcHRpb25hbC4gQSBtZXNzYWdlIHRvIGRpc3BsYXkuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoIGNvbmRpdGlvbjogYW55LCBtZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2FnZT86IHN0cmluZyApOiB2b2lkIHtcXHJcXG4gIGlmICggISBjb25kaXRpb24gKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICB0aHJvdyBuZXcgRXJyb3IoIGBbJHsgUFJPSkVDVF9DT0RFIH1dICQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBtZXNzYWdlIHx8IFwnXCcgfWAgKTtcXHJcXG4gIH1cXHJcXG59XFxyXFxuIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydCBjb25zdCB7IG1pbiwgbWF4LCBmbG9vciwgY2VpbCwgYWJzIH0gPSBNYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aDtcXHJcXG4iLCJpbXBvcnQgeyBhYnMgfSBmcm9tIFwnLi4vbWF0aC9tYXRoXCcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIENoZWNrcyBpZiB0aGUgcHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZpZGVkIDIgbnVtYmVycyBhcmUgYXBwcm94aW1hdGVseSBlcXVhbCBvciBub3QuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqXFxyXFxuICogQHBhcmFtIHggICAgICAgLSBBIG51bWJlci5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIHkgICAgICAgLSBBbm90aGVyIG51bWJlciB0byBjb21wYXJlLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAcGFyYW0gZXBzaWxvbiAtIEFuIGFjY3VyYWN5IHRoYXQgZGVmaW5lcyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcHJveGltYXRpb24uXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGB0cnVlYCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgMiBudW1iZXJzIGFyZSBjb25zaWRlcmVkIHRvIGJlIGVxdWFsLCBvciBvdGhlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aXNlIGBmYWxzZWAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGFwcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3hpbWF0ZWx5RXF1YWwoIHg6IG51bWJlciwgeTogbnVtYmVyLCBlcHNpbG9uOiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyICk6IGJvb2xlYW4ge1xcclxcbiAgcmV0dXJuIGFicyggeCAtIHkgKSA8IGVwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpbG9uO1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi4vbWF0aC9tYXRoJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDaGVjIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tzIGlmIHRoZSBzdWJqZWN0IG51bWJlciBpcyBiZXR3ZWVuIGB4YCBhbmQgYHlgLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBudW1iZXIgICAgLSBBIHN1YmplY3QgbnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciB0byBjaGVjay5cXHJcXG4gKiBAcGFyYW0geCAgICAgICAgIC0gQSBtaW4gb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heCBudW1iZXIuXFxyXFxuICogQHBhcmFtIHkgICAgICAgICAtIEEgbWF4IG9yIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW4gbnVtYmVyLlxcclxcbiAqIEBwYXJhbSBleGNsdXNpdmUgLSBPcHRpb25hbC4gV2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRoZXIgdG8gZXhjbHVkZSBgeGAgb3IgYHlgLlxcclxcbiAqL1xcclxcbmV4cG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgZnVuY3Rpb24gYmV0d2VlbiggbnVtYmVyOiBudW1iZXIsIHg6IG51bWJlciwgeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlciwgZXhjbHVzaXZlPzogYm9vbGVhbiApOiBib29sZWFuIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBtaW5pbXVtID0gbWluKCB4LCB5ICk7XFxyXFxuICBjb25zdCBtYXhpbXVtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IG1heCggeCwgeSApO1xcclxcbiAgcmV0dXJuIGV4Y2x1c2l2ZVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBtaW5pbXVtIDwgbnVtYmVyICYmIG51bWJlciA8IG1heGltdW1cXHJcXG4gICAgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWluaW11bSA8PSBudW1iZXIgJiYgbnVtYmVyIDw9IG1heGltdW07XFxyXFxufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4iLCJpbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCcuLi9tYXRoL21hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJoJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBDbGFtcHMgYSBudW1iZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIG51bWJlciAtIEEgc3ViamVjdCBudW1iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIHRvIGNoZWNrLlxcclxcbiAqIEBwYXJhbSB4ICAgICAgLSBBIG1pbiBvciBtYXggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlci5cXHJcXG4gKiBAcGFyYW0geSAgICAgIC0gQSBtaW4gb3IgbWF4IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgY2xhbXBlZCBudW1iZXIuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBjbGFtcCggbnVtYmVyOiBudW1iZXIsIHg6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIsIHk6IG51bWJlciApOiBudW1iZXIge1xcclxcbiAgY29uc3QgbWluaW11JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gPSBtaW4oIHgsIHkgKTtcXHJcXG4gIGNvbnN0IG1heGltdW0gPSBtYXgoIHgsIHkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICByZXR1cm4gbWluKCBtYXgoIG1pbmltdW0sIG51bWJlciApLCBtYXhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ211bSApO1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBSZXR1cm5zIHRoZSBzaWduJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvZiB0aGUgcHJvdmlkZWQgbnVtYmVyLlxcclxcbiAqXFxyXFxuICogQHBhcmFtICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4IC0gQSBudW1iZXIuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIGAxYCBmb3IgcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2l0aXZlIG51bWJlcnMsIGAtMWAgZm9yIG5lZ2F0aXZlIG51bWJlcnMsIG9yIGAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AgZm9yIGAwYC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gc2lnbiggeCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlciApOiBudW1iZXIge1xcclxcbiAgcmV0dXJuICsoIHggPiAwICkgLSArKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgeCA8IDAgKTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgZm9yRWFjaCB9IGZyb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICcuLi8uLi9hcnJheSc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogRm9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21hdHMgYSBzdHJpbmcuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gc3RyaW5nICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIEEgc3RyaW5nIHRvIGZvcm1hdC5cXHJcXG4gKiBAcGFyYW0gcmVwbGFjZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cyAtIEEgcmVwbGFjZW1lbnQgb3IgcmVwbGFjZW1lbnRzLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEByZXR1cm4gQSBmb3JtYXR0ZWQgc3RyaW5nLlxcclxcbiAqL1xcclxcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgZnVuY3Rpb24gZm9ybWF0KCBzdHJpbmc6IHN0cmluZywgcmVwbGFjZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czogc3RyaW5nIHwgbnVtYmVyIHwgQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiApOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nIHtcXHJcXG4gIGZvckVhY2goIHJlcGxhY2VtZW50cywgcmVwbGFjZW1lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiID0+IHtcXHJcXG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoICclcycsIGAkeyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVwbGFjZW1lbnQgfWAgKTtcXHJcXG4gIH0gKTtcXHJcXG5cXHJcXG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyaW5nO1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBQYWRzIHRoZSBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdpdGggMC5cXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBudW1iZXIgLSBBIG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdG8gcGFkLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBzdHJpbmcgLSBQYWRkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIG51bWJlci5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gcGFkKCBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyOiBudW1iZXIgKTogc3RyaW5nIHtcXHJcXG4gIHJldHVybiBudW1iZXIgPCAxMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBgMCR7IG51bWJlciB9YCA6IGAkeyBudW1iZXIgfWA7XFxyXFxufVxcclxcbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJpbXBvcnQgeyBwYWQgfSBmcm9tIFwnLi4vcGFkL3BhZFwnO1xcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBTdG9yZXMgdW5pcXVlIElEcy5cXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5jb25zdCBpZHM6IFJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldHVybnMgYSBzZXF1ZW50aWFsIHVuaXF1ZSBJRCBhcyBcXCJ7IHByZWZpeCB9LXsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciB9XFwiLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIHByZWZpeCAtIEEgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWZpeCBmb3IgdGhlIElELlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pcXVlSWQoIHByZWZpeDogc3RyaW5nICk6IHN0cmluZyB7XFxyXFxuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AkeyBwcmVmaXggfSR7IHBhZCggKCBpZHNbIHByZWZpeCBdID0gKCBpZHNbIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaXggXSB8fCAwICkgKyAxICkgKSB9YDtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEFueUZ1bmN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibXB0eSwgZm9yRWFjaCB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG5cXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIGFuIEV2ZW50VGFyZ2V0IG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiBhcnJheSB3aXRoIEV2ZW50VGFyZ2V0IG9iamVjdHMuXFxyXFxuICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyXFxudHlwZSBFdmVudFRhcmdldHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gRXZlbnRUYXJnZXQgfCBFdmVudFRhcmdldFtdO1xcclxcblxcclxcbi8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRCaW5kZXIgb2JqZWN0LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlIEV2ZW50QmluZGVyT2JqZWN0IHtcXHJcXG4gIGJpbmQoIHRhcmdldDogRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250VGFyZ2V0cywgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbnlGdW5jdGlvbiwgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiB2b2lkXFxyXFxuICB1bmJpbmQoIHRhcmdldDogRXZlbnRUYXJnZXQgfCBFdmVudFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXRbXSwgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s/OiBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ255RnVuY3Rpb24gKTogdm9pZDtcXHJcXG4gIGRpc3BhdGNoPFQ+KCB0YXJnZXQ6IEV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudFRhcmdldCwgZXZlbnQ6IHN0cmluZywgZGV0YWlsPzogVCApOiB2b2lkO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGRlc3Ryb3koKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0byBwcm92aWRlIG1ldGhvZHMgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN1YnNjcmliZSBuYXRpdmUgZXZlbnRzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA0LjAuMFxcclxcbiAqIEBjb25zdHJ1Y3RvclxcclxcbiAqXFxyXFxuICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gQW4gRXZlbnRCaW5kZXIgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gRXZlbnRCaW5kZXIoKTogRXZlbnRCaW5kZXJPYmplY3Qge1xcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogU3RvcmVzIGFsbCBoYW5kbGVycyB0aGF0IGxpc3RlbiB0byBuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aXZlIGV2ZW50cy5cXHJcXG4gICAqIGBbIHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGNhbGxiYWNrLCByZW1vdmVyIF1gXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVuZXJzOiBbIEV2ZW50VGFyZ2V0LCBzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsIEFueUZ1bmN0aW9uLCAoKSA9PiB2b2lkIF1bXSA9IFtdO1xcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxcclxcbiAgICogTGlzdGVucyB0byBuYXRpdmUgZXZlbnRzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIC0gYGRlc3Ryb3koKWAgY2FuIHVuc3Vic2NyaWJlIGFsbCBldmVudHMuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogLSBJbiBJRSwgbWVkaWFRdWVyeUxpc3QgZG9lcyBub3QgaW5oZXJpdCBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRUYXJnZXQsXFxyXFxuICAgKiAgIGFuZCBvbmx5IHN1cHBvcnRzIGRlcHJlY2F0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkIGBhZGRMaXN0ZW5lcmAgYW5kIGByZW1vdmVMaXN0ZW5lcmAuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi1VUy9kb2NzL1dlYi9BUEkvTWVkaWFRdWVyeUxpc3QvYWRkTGlzdGVuZXJcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogQHBhcmFtIHRhcmdldHMgIC0gQSB0YXJnZXQgZWxlbWVudCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSB3aW5kb3cgb2JqZWN0IG9yIHRoZSBkb2N1bWVudCBvYmplY3QuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGV2ZW50cyAgIC0gQW4gZXZlbnQgb3IgZXZlbnRzIHRvIGxpc3RlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdG8uXFxyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbi5cXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zICAtIE9wdGlvbmFsLiBUaGUgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMgdG8gcGFzcyB0byB0aGUgYGFkZEV2ZW50TGlzdGVuZXJgIGZ1bmN0aW9uLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gYmluZChcXHJcXG4gICAgdGFyZ2V0cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEV2ZW50VGFyZ2V0cyxcXHJcXG4gICAgZXZlbnRzOiBzdHJpbmcgfCBzdHJpbmdbXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIGNhbGxiYWNrOiBBbnlGdW5jdGlvbixcXHJcXG4gICAgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9uc1xcclxcbiAgKTogdm9pZCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBmb3JFYWNoRXZlbnQoIHRhcmdldHMsIGV2ZW50cywgKCB0YXJnZXQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudCwgbmFtZXNwYWNlICkgPT4ge1xcclxcbiAgICAgIGNvbnN0IGlzRXZlbnRUYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyZ2V0ID0gJ2FkZEV2ZW50TGlzdGVuZXInIGluIHRhcmdldDtcXHJcXG4gICAgICBjbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgcmVtb3ZlciA9IGlzRXZlbnRUYXJnZXRcXHJcXG4gICAgICAgID8gdGFyZ2V0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW1vdmVFdmVudExpc3RlbmVyLmJpbmQoIHRhcmdldCwgZXZlbnQsIGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaywgb3B0aW9ucyApXFxyXFxuICAgICAgICA6IHRhcmdldFsgJ3JlbW92ZUxpc3RlbmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicicgXS5iaW5kKCB0YXJnZXQsIGNhbGxiYWNrICk7XFxyXFxuXFxyXFxuICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzRXZlbnRUYXJnZXQgPyB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lciggZXZlbnQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjYWxsYmFjaywgb3B0aW9ucyApIDogdGFyZ2V0WyAnYWRkTGlzdGVuZXInIF0oIGMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjayApO1xcclxcbiAgICAgIGxpc3RlbmVycy5wdXNoKCBbIHRhcmdldCwgZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBuYW1lc3BhY2UsIGNhbGxiYWNrLCByZW1vdmVyIF0gKTtcXHJcXG4gICAgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGV2ZW50IGhhbmRsZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHRhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsIHRoZSB3aW5kb3cgb2JqZWN0IG9yIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgICogQHBhcmFtIGV2ZW50cyAgIC0gQW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGV2ZW50IG5hbWUgb3IgbmFtZXMgdG8gcmVtb3ZlLlxcclxcbiAgICogQHBhcmFtIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjayAtIE9wdGlvbmFsLiBTcGVjaWZ5IHRoZSBjYWxsYmFjayB0byByZW1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB1bmJpbmQoIHRhcmdldHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudFRhcmdldHMsIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaz86IEFueUZ1bmN0aW9uICk6IHZvaWQge1xcclxcbiAgICBmb3JFYWNoRXZlbnQoIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXRzLCBldmVudHMsICggdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlICkgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKCBsaXN0ZW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgPT4ge1xcclxcbiAgICAgICAgaWYgKCBsaXN0ZW5lclsgMCBdID09PSB0YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0XFxyXFxuICAgICAgICAgICYmIGxpc3RlbmVyWyAxIF0gPT09IGV2ZW50XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgICAmJiBsaXN0ZW5lclsgMiBdID09PSBuYW1lc3BhY2VcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgICAgICYmICggISBjYWxsYmFjayB8fCBsaXN0ZW5lclsgMyBdID09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gY2FsbGJhY2sgKVxcclxcbiAgICAgICAgKSB7XFxyXFxuICAgICAgICAgIGxpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5lclsgNCBdKCk7XFxyXFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICB9XFxyXFxuXFxyXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfSApO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBEaXNwYXRjaGVzIGEgY3VzdG9tIGV2ZW50IG9mIHRoZSB0YXJnZXQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBBbiBldmVudCB0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0LlxcclxcbiAgICogQHBhcmFtIHR5cGUgICAtIEFuIGV2ZW50IHR5cGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIGRldGFpbCAtIE9wdGlvbmFsLiBUaGUgYGRldGFpbGAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdCBvZiB0aGUgZXZlbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQW4gZXZlbnQgb2JqZWN0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF0Y2g8VD4oIHRhcmdldDogRXZlbnRUYXJnZXQsIHR5cGU6IHN0cmluZywgZGV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FpbD86IFQgKTogQ3VzdG9tRXZlbnQge1xcclxcbiAgICBsZXQgZTogQ3VzdG9tRXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250O1xcclxcbiAgICBjb25zdCBidWJibGVzID0gdHJ1ZTtcXHJcXG5cXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlmICggdHlwZW9mIEN1c3RvbUV2ZW50ID09PSAnZnVuY3Rpb24nICkge1xcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlID0gbmV3IEN1c3RvbUV2ZW50KCB0eXBlLCB7IGJ1YmJsZXMsIGRldGFpbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSApO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIGUgPSBkb2N1bWVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiY3JlYXRlRXZlbnQoICdDdXN0b21FdmVudCcgKTtcXHJcXG4gICAgICBlLmluaXRDdXMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9tRXZlbnQoIHR5cGUsIGJ1YmJsZXMsIGZhbHNlLCBkZXRhaWwgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoIGUgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBlO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogSXRlcmF0ZXMgb3ZlciBlYWNoIHRhcmdldCBhbmQgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBwYXJhbSB0YXJnZXRzICAtIEEgdGFyZ2V0IGVsZW1lbnQsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgd2luZG93IG9iamVjdCBvciB0aGUgZG9jdW1lbnQgb2JqZWN0LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBldmVudHMgICAtIEFuIGV2ZW50IG5hbWUgb3IgbmFtZXMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGl0ZXJhdGVlIC0gQW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiBmb3JFYWNoRXZlbnQoXFxyXFxuICAgIHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzOiBFdmVudFRhcmdldHMsXFxyXFxuICAgIGV2ZW50czogc3RyaW5nIHwgc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tdLFxcclxcbiAgICBpdGVyYXRlZTogKCB0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q6IHN0cmluZywgbmFtZXNwYWNlOiBzdHJpbmcgfCB1bmRlZmluZWQgKSA9PiB2bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZFxcclxcbiAgKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIHRhcmdldHMsIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJnZXQgPT4ge1xcclxcbiAgICAgIHRhcmdldCAmJiBmb3JFYWNoKCBldmVudHMsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidmVudHMgPT4ge1xcclxcbiAgICAgICAgZXZlbnRzLnNwbGl0KCAnICcgKS5mb3JFYWMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCggZXZlbnROUyA9PiB7XFxyXFxuICAgICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZW50TlMuc3BsaXQoICcuJyApO1xcclxcbiAgICAgICAgICBpdGVyYXRlZSggdGFyZ2UiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgZnJhZ21lbnRbIDAgXSwgZnJhZ21lbnRbIDEgXSApO1xcclxcbiAgICAgICAgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIFJlbW92ZXMgYWxsIGxpc3RlbmVycy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0ZW5lcnMuZm9yRWFjaCggZGF0YSA9PiB7IGRhdGFbIDQgXSgpIH0gKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGVtcHR5KCBsaXN0ZW5lcnMgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4ge1xcclxcbiAgICBiaW5kLFxcclxcbiAgICB1bmJpbmQsXFxyXFxuICAgIGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXRjaCxcXHJcXG4gICAgZGVzdHJveSxcXHJcXG4gIH07XFxyXFxufVxcclxcbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJleHBvcnQgY29uc3QgRVZFTlRfTU9VTlRFRCAgICAgICAgICAgID0gXCdtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1JFQURZICAgICAgICAgICAgICA9ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIncmVhZHknO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9NT1ZFICAgICAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgID0gJ21vdmUnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9NT1ZFRCAgICAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgID0gJ21vdmVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfQ0xJQ0sgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgICA9ICdjbGljayc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FDVElWRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgICAgICAgICAgPSAnYWN0aXZlJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJOQUNUSVZFICAgICAgICAgICA9ICdpbmFjdGl2ZSc7XFxyXFxuZXhwb3J0IGNvbnN0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJFVkVOVF9WSVNJQkxFICAgICAgICAgICAgPSAndmlzaWJsZSc7XFxyXFxuZXhwb3J0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjb25zdCBFVkVOVF9ISURERU4gICAgICAgICAgICAgPSAnaGlkZGVuJztcXHJcXG5leCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IGNvbnN0IEVWRU5UX1JFRlJFU0ggICAgICAgICAgICA9ICdyZWZyZXNoJzsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1VQREFURUQgICAgICAgICAgICA9ICd1cGQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYXRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX1JFU0laRSAgICAgICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPSAncmVzaXplJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfUkVTSVpFRCAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICA9ICdyZXNpemVkJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBRyAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICAgICA9ICdkcmFnJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfRFJBR0ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSU5HICAgICAgICAgICA9ICdkcmFnZ2luZyc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVF9EUkFHR0VEICAgICAgICAgICAgPSAnZHJhZ2dlZCc7XFxyXFxuZXhwb3J0IGNvbnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCBFVkVOVF9TQ1JPTEwgICAgICAgICAgICAgPSAnc2Nyb2xsJztcXHJcXG5leHBvcnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGNvbnN0IEVWRU5UX1NDUk9MTEVEICAgICAgICAgICA9ICdzY3JvbGxlZCc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmV4cG9ydCBjb25zdCBFVkVOVF9PVkVSRkxPVyAgICAgICAgICAgPSAnb3ZlcmZsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm93JztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfREVTVFJPWSAgICAgICAgICAgID0gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIidkZXN0cm95JztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfQVJST1dTX01PVU5URUQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICA9ICdhcnJvd3M6bW91bnRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FSIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlJPV1NfVVBEQVRFRCAgICAgPSAnYXJyb3dzOnVwZGF0ZWQnO1xcclxcbmV4cG9ydCBjIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9uc3QgRVZFTlRfUEFHSU5BVElPTl9NT1VOVEVEID0gJ3BhZ2luYXRpb246bW91biIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0ZWQnO1xcclxcbmV4cG9ydCBjb25zdCBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQgPSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ3BhZ2luYXRpb246dXBkYXRlZCc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX05BViIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJJR0FUSU9OX01PVU5URUQgPSAnbmF2aWdhdGlvbjptb3VudGVkJztcXHJcXG5leHBvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IGNvbnN0IEVWRU5UX0FVVE9QTEFZX1BMQVkgICAgICA9ICdhdXRvcGxheTpwbGEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieSc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FVVE9QTEFZX1BMQVlJTkcgICA9ICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYXV0b3BsYXk6cGxheWluZyc7XFxyXFxuZXhwb3J0IGNvbnN0IEVWRU5UX0FVVE9QTEEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiWV9QQVVTRSAgICAgPSAnYXV0b3BsYXk6cGF1c2UnO1xcclxcbmV4cG9ydCBjb25zdCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRVZFTlRfTEFaWUxPQURfTE9BREVEICAgID0gJ2xhenlsb2FkOmxvYWRlZCc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbi8qKiBAaW50ZXJuYWwgKi9cXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNMSURFX0tFWURPV04gICAgID0gJ3NrJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNISUZURUQgICAgICAgICAgID0gJ3NoJztcXHJcXG5leHBvcnQgY29uc3QgRVZFTlRfIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VORF9JTkRFWF9DSEFOR0VEID0gXCdlaVwnO1xcclxcbiIsImltcG9ydCB7IEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJOVF9ERVNUUk9ZIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiO1xcclxcbmltcG9ydCB7IEFueUZ1bmN0aW9uLCBFdmVudE1hcCB9IGZyb20gJy4uLy4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYXBwbHksIGFzc2lnbiwgaXNBcnJheSwgc2wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaWNlLCB0b0FycmF5IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IEUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidmVudEJpbmRlciwgRXZlbnRCaW5kZXJPYmplY3QgfSBmcm9tICcuLi9FdmVudEJpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5kZXIvRXZlbnRCaW5kZXInO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaGUgaW50ZXJmYWNlIGZvciB0aGUgRXZlbnRJbnRlcmZhY2Ugb2JqZWN0LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIEV2ZW50SW50ZXJmYWNlT2JqZWN0IGV4dGVuZHMgRXZlbnRCaW5kZXJPYmonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0IHtcXHJcXG4gIG9uPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSywgY2FsbGJhY2s6IEV2ZW50TWFwWyBLIF0gKTogdm9pZDtcXHJcXG4gIG9uKCBldmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzOiBzdHJpbmcgfCBzdHJpbmdbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2b2lkO1xcclxcbiAgb2ZmPEsgZXh0ZW5kcyBrZXlvZiBFdmVudE1hcD4oIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3M6IEsgfCBLW10gfCBzdHJpbmcgfCBzdHJpbmdbXSApOiB2b2lkO1xcclxcbiAgZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q8SyBleHRlbmRzIGtleW9mIEV2ZW50TWFwPiggZXZlbnQ6IEssIC4uLmFyZ3M6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQYXJhbWV0ZXJzPEV2ZW50TWFwWyBLIF0+ICk6IHZvaWRcXHJcXG4gIGVtaXQoIGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSApOiB2b2lkO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKiBAaW50ZXJuYWwgKi9cXHJcXG4gIGJ1czogRG9jdW1lbnRGcmFnbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb25zdHJ1Y3RvciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBpbnRlcmZhY2UgZm9yIGludGVybmFsIGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgbmF0aXZlIGV2ZW50cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAY29uc3RydWN0b3JcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGxlY3Rpb24gb2YgaW50ZXJmYWNlIGZ1bmN0aW9ucy5cXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0IGZ1bmN0aW9uIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGU/OiBTcGxpZGUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IEV2ZW50SW50ZXJmYWNlT2JqZWN0IHtcXHJcXG4gIC8qKlxcclxcbiAgICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBkb2N1bWVudCBmcmFnbWVudCBmb3IgaW50ZXJuYWwgZXZlbnRzLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFByb3ZpZGUgdGhlIFNwbGlkZSBpbnN0YW5jZSB0byBzaGFyZSB0aGUgYnVzLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgY29uc3QgYnVzID0gU3BsaWRlID8gU3BsaWRlLmV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudC5idXMgOiBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBBbiBldmVudCBiaW5kZXIgb2JqZWN0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgY29uc3QgYmluZGVyID0gRXZlbnRCaW5kZXIoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gYW4gaW50ZXJuYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGV2ZW50IG9yIGV2ZW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cyAgIC0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcy4gVXNlIGEgZG90KC4pIHRvIGFkZCBhIG5hbWVzcGFjZS5cXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyLlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb24oIGV2ZW50czogc3RyaW5nIHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZ1tdLCBjYWxsYmFjazogQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBiaW5kZXIuYmluZCggYnVzLCB0b0FycmF5KCBldmVudHMgKS5qb2luKCAnICcgKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGUgPT4ge1xcclxcbiAgICAgIGNhbGxiYWNrLmFwcGx5KCBjYWxsYmFjaywgaXNBcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkoIGUuZGV0YWlsICkgPyBlLmRldGFpbCA6IFtdICk7XFxyXFxuICAgIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRyaWdnZXJzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsYmFjayBmdW5jdGlvbnMuXFxyXFxuICAgKiBUaGlzIGFjY2VwdHMgYWRkaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYWwgYXJndW1lbnRzIGFuZCBwYXNzZXMgdGhlbSB0byBjYWxsYmFja3MuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBldmVudCAtIEFuIGV2ZW50IG5hbWUuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBlbWl0KCBldmVudDogc3RyaW5nICk6IHZvaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC1wYXJhbXMsIHByZWZlci1zcHJlYWRcXHJcXG4gICAgYmluZGVyLmRpc3BhdGNoKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYnVzLCBldmVudCwgc2xpY2UoIGFyZ3VtZW50cywgMSApICk7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgaWYgKCBTcGxpZGUgKSB7XFxyXFxuICAgIFNwbGlkZS5ldmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicub24oIEVWRU5UX0RFU1RST1ksIGJpbmRlci5kZXN0cm95ICk7XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgcmV0dXJuIGFzc2lnbiggYmluZGVyLCB7XFxyXFxuICAgIGJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MsXFxyXFxuICAgIG9uLFxcclxcbiAgICBvZmY6IGFwcGx5KCBiaW5kZXIudW5iaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCwgYnVzICksXFxyXFxuICAgIGVtaXQsXFxyXFxuICB9ICk7XFxyXFxufSIsImltcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBtaW4sIHJhZiB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIHJldHVybmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cgdmFsdWUgb2YgdGhlIFJlcXVlc3RJbnRlcnZhbC5cXHJcXG4gKlxcclxcbiAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIFJlcXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0SW50ZXJ2YWxJbnRlcmZhY2Uge1xcclxcbiAgc3RhcnQoIHJlc3VtZT86IGJvb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFuICk6IHZvaWQ7XFxyXFxuICBwYXVzZSgpOiB2b2lkO1xcclxcbiAgcmV3aW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpOiB2b2lkO1xcclxcbiAgY2FuY2VsKCk6IHZvaWQ7XFxyXFxuICBzZXQoIGludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZhbDogbnVtYmVyICk6IHZvaWQ7XFxyXFxuICBpc1BhdXNlZCgpOiBib29sZWFuOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogUmVxdWVzdHMgaW50ZXJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxpa2UgdGhlIG5hdGl2ZSBgc2V0SW50ZXJ2YWwoKWAgd2l0aCB1c2luZyBgcmVxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Vlc3RBbmltYXRpb25GcmFtZWAuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gaW50ZXJ2YWwgICAtIFRoZSBpbnRlcnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWwgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxcclxcbiAqIEBwYXJhbSBvbkludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnZhbCAtIFRoZSBjYWxsYmFjayBmaXJlZCBvbiBldmVyeSBpbnRlcnZhbC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIG9uVXBkYXRlICAgLSBPcHRpb25hbC4gQ2FsbGVkIG9uIGV2ZXJ5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhbmltYXRpb24gZnJhbWUsIHRha2luZyB0aGUgcHJvZ3Jlc3MgcmF0ZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGxpbWl0ICAgICAgLSBPcHRpb25hbC4gTGltaXRzIHRoZSBudW1iZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIG9mIGludGVydmFsLlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBSZXEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzdEludGVydmFsKFxcclxcbiAgaW50ZXJ2YWw6IG51bWJlcixcXHJcXG4gIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ludGVydmFsOiAoKSA9PiB2b2lkLFxcclxcbiAgb25VcGRhdGU/OiAoIHJhdGU6IG51JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21iZXIgKSA9PiB2b2lkLFxcclxcbiAgbGltaXQ/OiBudW1iZXJcXHJcXG4pOiBSZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVzdEludGVydmFsSW50ZXJmYWNlIHtcXHJcXG4gIGNvbnN0IHsgbm93IH0gPSBEYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHRpbWUgd2hlbiB0aGUgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsIHN0YXJ0cy5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHN0YXJ0VGltZTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGN1cnJlbnQgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2dyZXNzIHJhdGUuXFxyXFxuICAgKi9cXHJcXG4gIGxldCByYXRlID0gMDtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBhbmltYXRpb24gZnJhbWUgSUQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBsZXQgaWQ6IG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpbnRlcnZhbCBpcyBjdXJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGx5IHBhdXNlZCBvciBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gdHJ1ZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGxvb3AgY291bnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLiBUaGlzIG9ubHkgd29ya3Mgd2hlbiB0aGUgYGxpbWl0YCBhcmd1bWVudCBpcyBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdmlkZWQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjb3VudCA9IDA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgdXBkYXRlIGZ1bmN0aW9uIGNhbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Qgb24gZXZlcnkgYW5pbWF0aW9uIGZyYW1lLlxcclxcbiAgICovXFxyXFxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgcGF1c2VkICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICByYXRlID0gaW50ZXJ2YWwgPyBtaW4oICggbm93KCkgLSBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaW1lICkgLyBpbnRlcnZhbCwgMSApIDogMTtcXHJcXG4gICAgICBvblVwZGF0ZSAmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb25VcGRhdGUoIHJhdGUgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIHJhdGUgPj0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDEgKSB7XFxyXFxuICAgICAgICBvbkludGVydmFsKCk7XFxyXFxuICAgICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnRUaW1lID0gbm93KCk7XFxyXFxuXFxyXFxuICAgICAgICBpZiAoIGxpbWl0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicmJiArK2NvdW50ID49IGxpbWl0ICkge1xcclxcbiAgICAgICAgICByZXR1cm4gcGF1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKCk7XFxyXFxuICAgICAgICB9XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZCA9IHJhZiggdXBkYXRlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFN0YXJ0cyB0aGUgaW50ZXJ2YWwuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSByZXN1bWUgLSBPcHRpb25hbC4gV2hldGhlciB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVzdW1lIHRoZSBwYXVzZWQgcHJvZ3Jlc3Mgb3Igbm90LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuY3Rpb24gc3RhcnQoIHJlc3VtZT86IGJvb2xlYW4gKTogdm9pZCB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXN1bWUgfHwgY2FuY2VsKCk7XFxyXFxuICAgIHN0YXJ0VGltZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBub3coKSAtICggcmVzdW1lID8gcmF0ZSAqIGludGVydmFsIDogMCApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcGF1c2VkICAgID0gZmFsc2U7XFxyXFxuICAgIGlkICAgICAgICA9IHJhZiggdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBQYXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzIHRoZSBpbnRlcnZhbC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcGF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlKCk6IHZvaWQge1xcclxcbiAgICBwYXVzZWQgPSB0cnVlO1xcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogUmV3aW5kcyB0aGUgY3VycmVudCBwcm9ncicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3MuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHJld2luZCgpOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHN0YXJ0VGltZSA9IG5vdygpO1xcclxcbiAgICByYXRlICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gMDtcXHJcXG5cXHJcXG4gICAgaWYgKCBvblVwZGF0ZSApIHtcXHJcXG4gICAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25VcGRhdGUoIHJhdGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxcclxcbiAgICogQ2FuY2VscyB0aGUgaW50ZXJ2YWwuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XFxyXFxuICAgIGlkICYmIGNhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xBbmltYXRpb25GcmFtZSggaWQgKTtcXHJcXG4gICAgcmF0ZSAgID0gMDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGlkICAgICA9IDA7XFxyXFxuICAgIHBhdXNlZCA9IHRydWU7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTZXRzIG5ldyBpbnRlcnZhbCBkdXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHRpbWUgLSBUaGUgaW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VydmFsIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcy5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIHNldCggdGltZTogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJ2YWwgPSB0aW1lO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQ2hlY2tzIGlmIHRoZSBpbnRlcnZhbCBpcyBwYXVzZWQgb3Igbm90LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgaW50ZXJ2YWwgaXMgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXNlZCwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBpc1BhdXNlZCgpOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIHBhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Q7XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBzdGFydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIHJld2luZCxcXHJcXG4gICAgcGF1c2UsXFxyXFxuICAgIGNhbmNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIHNldCxcXHJcXG4gICAgaXNQYXVzZWQsXFxyXFxuICB9O1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG59XFxyXFxuIiwiaW1wb3J0IHsgaW5jbHVkZXMsIHRvQXJyYXkgfSBmcm9tICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW50ZXJmYWNlIGZvciB0aGUgU3RhdGUgb2JqZWN0LlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgU3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlT2JqZWN0IHtcXHJcXG4gIHNldCggc3RhdGU6IG51bWJlciApOiB2b2lkO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGlzKCBzdGF0ZXM6IG51bWJlciB8IG51bWJlcltdICk6IGJvb2xlYW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgZnVuY3Rpb24gcHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZpZGluZyBhIHN1cGVyIHNpbXBsZSBzdGF0ZSBzeXN0ZW0uXFxyXFxuICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHBhcmFtIGluaXRpYWxTdGF0ZSAtIFNwZWNpZmllcyB0aGUgaW5pdGlhbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGUuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIFN0YXRlKCBpbml0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lhbFN0YXRlOiBudW1iZXIgKTogU3RhdGVPYmplY3Qge1xcclxcbiAgLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogVGhlIGN1cnJlbnQgc3RhdGUuXFxyXFxuICAgKi9cXHJcXG4gIGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGUgPSBpbml0aWFsU3RhdGU7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRzIGEgbmV3IHN0YXRlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSB2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgLSBBIG5ldyBzdGF0ZSB2YWx1ZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNldCggdmFsdWU6IG51bWJlciApOiB2b2lkIHtcXHJcXG4gICAgc3RhdGUgPSB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWU7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgdGhlIGN1cnJlbnQgc3RhdGUgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgb25lLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc3RhdGVzIC0gQSBzdGF0ZSB0byBjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY2suXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJyZW50IHN0YXRlIGlzIHRoZSBwcm92aWRlZCBvbmUuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBpcyggc3RhdGVzOiBudW1iZXIgfCBudW1iZXJbXSApOiBibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGVhbiB7XFxyXFxuICAgIHJldHVybiBpbmNsdWRlcyggdG9BcnJheSggc3RhdGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpLCBzdGF0ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHsgc2V0LCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcXHJcXG59XFxyXFxuIiwiY29uc3QgQVJST1cgPSBcJ0Fycm93XCc7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBBUlJPV19MRUZUICA9IGAkeyBBUlJPVyB9TGVmdGA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBjb25zdCBBUlJPV19SSUdIVCA9IGAkeyBBUlJPVyB9UmlnaHRgO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgY29uc3QgQVJST1dfVVAgICAgPSBgJHsgQVJST1cgfVVwYDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGNvbnN0IEFSUk9XX0RPV04gID0gYCR7IEFSUk9XIH1Eb3duYDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiLyoqXFxyXFxuICogRW51bWVyYXRlcyBzbGlkZXMgZnJvbSBsZWZ0IHRvIHJpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgTFRSID0gJ2x0cic7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIEVudW1lcmF0ZXMgc2xpZGVzIGZyb20gcmlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHRvIGxlZnQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFJUTCA9ICdydGwnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBFbnVtZXJhdGVzIHNsaWRlcyBpbiBhIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImwuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFRUQiA9ICd0dGInO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4iLCJpbXBvcnQgeyBBUlJPV19ET1dOLCBBUlJPV19MRUZULCBBUlJPV19SSUdIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlQsIEFSUk9XX1VQIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fycm93cyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IFJUTCwgVFRCIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2RpcmVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpb25zJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0cywgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5cXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIERpcmVjdGlvbiBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmV4cG9ydCBpbnRlcmZhY2UgRGlyZWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQmFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDb21wb25lbnQge1xcclxcbiAgcmVzb2x2ZSggcHJvcDogc3RyaW5nLCBheGlzT25sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInk/OiBib29sZWFuLCBkaXJlY3Rpb24/OiBPcHRpb25zWydkaXJlY3Rpb24nXSApOiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RyaW5nO1xcclxcbiAgb3JpZW50KCB2YWx1ZTogbnVtYmVyICk6IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSB0cmFuc2xhdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbWFwIGZvciBkaXJlY3Rpb25zLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBPUklFTlRBVElPTl9NQVAgPSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAgd2lkdGggICAgIDogWyAnaGVpZ2h0JyBdLFxcclxcbiAgbGVmdCAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICA6IFsgJ3RvcCcsICdyaWdodCcgXSxcXHJcXG4gIHJpZ2h0ICAgICA6IFsgJ2JvdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0b20nLCAnbGVmdCcgXSxcXHJcXG4gIHggICAgICAgICA6IFsgJ3knIF0sXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibiAgWCAgICAgICAgIDogWyAnWScgXSxcXHJcXG4gIFkgICAgICAgICA6IFsgJ1gnIF0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgQXJyb3dMZWZ0IDogWyBBUlJPV19VUCwgQVJST1dfUklHSFQgXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBBcnJvd1JpZ2h0OiBbIEFSUk9XX0RPV04sIEFSUk9XX0xFRlQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10sXFxyXFxufTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGF0IGFic29yYnMgdGhlIGRpZmZlcmVuY2UgYW1vbmcgZGlyZWN0aW9ucy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIERpcmVjdGlvbiBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgZnVuY3Rpb24gRGlyZWN0aW9uKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogRGlyZWN0aW9uQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudCB7XFxyXFxuICAvKipcXHJcXG4gICAqIFJlc29sdmVzIHRoZSBwcm92aWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgcHJvcGVydHkgbmFtZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAtIEEgcHJvcGVydHkgbmFtZSB0byB0cmFuc2xhdGUuXFxyXFxuICAgKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIGF4aXNPbmx5ICAtIE9wdGlvbmFsLiBJZiBgdHVyZWAsIHJldHVybnMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzYW1lIHByb3BlcnR5IGZvciBMVFIgYW5kIFJUTC5cXHJcXG4gICAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGlyZWN0aW9uIC0gT3B0aW9uYWwuIFNwZWNpZnkgdGhlIGRpcmVjdGlvbi4gVGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZWZhdWx0IHZhbHVlIGlzIHRoZSBgZGlyZWN0aW9uYCBvcHRpb24uXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBmdW5jdGlvbiByZXNvbHZlKCBwcm9wOiBzdHJpbmcsIGF4aXNPbmx5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIj86IGJvb2xlYW4sIGRpcmVjdGlvbj86IE9wdGlvbnNbJ2RpcmVjdGlvbiddICk6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJpbmcge1xcclxcbiAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZGlyZWN0aW9uO1xcclxcbiAgICBjb25zdCBpbmRleCA9IGRpcmVjdGlvbiA9PT0gUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUTCAmJiAhIGF4aXNPbmx5ID8gMSA6IGRpcmVjdGlvbiA9PT0gVFRCID8gMCA6IC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIE9SSUVOVEFUSU9OX01BUFsgcHJvcCBdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBPUklFTlRBVElPTl9NQVBbIHByb3AgXVsgaW5kZXggXVxcclxcbiAgICAgIHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcm9wLnJlcGxhY2UoIC93aWR0aHxsZWZ0fHJpZ2h0L2ksICggbWF0Y2gsIG9mZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQgKSA9PiB7XFxyXFxuICAgICAgICBjb25zdCByZXBsYWNlbWVudCA9IE9SSUVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVElPTl9NQVBbIG1hdGNoLnRvTG93ZXJDYXNlKCkgXVsgaW5kZXggXSB8fCBtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2g7XFxyXFxuICAgICAgICByZXR1cm4gb2Zmc2V0ID4gMCA/IHJlcGxhY2VtZW50LmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGFyQXQoIDAgKS50b1VwcGVyQ2FzZSgpICsgcmVwbGFjZW1lbnQuc2xpY2UoIDEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgOiByZXBsYWNlbWVudDtcXHJcXG4gICAgICB9ICk7XFxyXFxuICB9XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBPcmllbnRzIHRoZSB2YWx1ZSB0b3dhcmRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgY3VycmVudCBkaXJlY3Rpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSB2YWx1ZSAtIEEgdmFsdWUgdG8gb3JpZW50LlxcclxcbiAgICpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcmV0dXJuIFRoZSBvcmllbnRlZCB2YWx1ZS5cXHJcXG4gICAqL1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIG9yaWVudCggdmFsdWU6IG51bWJlciApOiBudW1iZXIge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIHZhbHVlICogKCBvcHRpb25zLmRpcmVjdGlvbiA9PT0gUlRMID8gMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgOiAtMSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlc29sdmUsXFxyXFxuICAgIG9yaWVudCxcXHJcXG4gIH07XFxyXFxufVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24iLCJleHBvcnQgY29uc3QgUk9MRSAgICAgID0gXCdyb2xlXCc7XFxyXFxuZXhwbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJydCBjb25zdCBUQUJfSU5ERVggPSAndGFiaW5kZXgnO1xcclxcbmV4cG9ydCBjb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgRElTQUJMRUQgID0gJ2Rpc2FibGVkJztcXHJcXG5cXHJcXG5leHBvcnQgY29uc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEFSSUFfUFJFRklYICAgICAgICAgID0gJ2FyaWEtJztcXHJcXG5leHBvcnQgY29uc3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFSSUFfQ09OVFJPTFMgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1jb250cm9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NgO1xcclxcbmV4cG9ydCBjb25zdCBBUklBX0NVUlJFTlQgICAgICAgICA9IGAkeyBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQV9QUkVGSVggfWN1cnJlbnRgO1xcclxcbmV4cG9ydCBjb25zdCBBUklBX1NFTEVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCAgICAgICAgPSBgJHsgQVJJQV9QUkVGSVggfXNlbGVjdGVkYDtcXHJcXG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J0IGNvbnN0IEFSSUFfTEFCRUwgICAgICAgICAgID0gYCR7IEFSSUFfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9bGFiZWxgO1xcclxcbmV4cG9ydCBjb25zdCBBUklBX0xBQkVMTEVEQlkgICAgICA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgJHsgQVJJQV9QUkVGSVggfWxhYmVsbGVkYnlgO1xcclxcbmV4cG9ydCBjb25zdCBBUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQV9ISURERU4gICAgICAgICAgPSBgJHsgQVJJQV9QUkVGSVggfWhpZGRlbmA7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmV4cG9ydCBjb25zdCBBUklBX09SSUVOVEFUSU9OICAgICA9IGAkeyBBUklBX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkVGSVggfW9yaWVudGF0aW9uYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9ST0xFREUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0NSSVBUSU9OID0gYCR7IEFSSUFfUFJFRklYIH1yb2xlZGVzY3JpcHRpb25gO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5leHBvcnQgY29uc3QgQVJJQV9MSVZFICAgICAgICAgICAgPSBgJHsgQVJJQV9QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JFRklYIH1saXZlYDtcXHJcXG5leHBvcnQgY29uc3QgQVJJQV9CVVNZICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgID0gYCR7IEFSSUFfUFJFRklYIH1idXN5YDtcXHJcXG5leHBvcnQgY29uc3QgQVJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FfQVRPTUlDICAgICAgICAgID0gYCR7IEFSSUFfUFJFRklYIH1hdG9taWNgO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4vKipcXHJcXG4gKiBUaGUgYXJyYXkgd2l0aCBhbGwgYXR0cmlidXRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gcmVtb3ZlIGxhdGVyLlxcclxcbiAqIE5lZWQgdG8gbWFudWFsbHkgcmVtb3ZlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdHRyaWJ1dGVzIHRoYXQgYXJlIG5vdCBpbiB0aGlzLlxcclxcbiAqIE5vdGUgdGhhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVtb3ZpbmcgYGFyaWEtbGl2ZWAgZGlzYWJsZXMgdGhlIGxpdmUgcmVnaW9uIHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRpbCB0aGUgcGFnZSByZWxvYWQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IEFMTF9BVFRSSUJVVEVTID0gWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIFJPTEUsXFxyXFxuICBUQUJfSU5ERVgsXFxyXFxuICBESVNBQkxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsXFxyXFxuICBBUklBX0NPTlRST0xTLFxcclxcbiAgQVJJQV9DVVJSRU5ULFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIEFSSUFfTEFCRUwsXFxyXFxuICBBUklBX0xBQkVMTEVEQlksXFxyXFxuICBBUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQV9ISURERU4sXFxyXFxuICBBUklBX09SSUVOVEFUSU9OLFxcclxcbiAgQVJJQV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUk9MRURFU0NSSVBUSU9OLFxcclxcbl07XFxyXFxuIiwiaW1wb3J0IHsgUFJPSkVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRfQ09ERSB9IGZyb20gJy4vcHJvamVjdCc7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RoZSBwcmVmaXggZm9yIGNsYXNzZXMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuMS4wXFxyXFxuICovXFxyXFxuY29uc3QgQ0xBU1NfUFJFRklYID0gYCR7IFBST0onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUNUX0NPREUgfV9fYDtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgcHJlZml4IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3Igc3RhdHVzIGNsYXNzZXMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4xLjBcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICovXFxyXFxuY29uc3QgU1RBVFVTX0NMQVNTX1BSRUZJWCA9ICdpcy0nOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBBbGwgY2xhc3NlcyBhcyBjb25zdGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19ST09UICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgID0gUFJPSkVDVF9DT0RFO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19UUkFDSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCB9dHJhY2tgO1xcclxcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgQ0xBU1NfTElTVCAgICAgICAgICAgID0gYCR7IENMQVNTX1BSRUZJWCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfWxpc3RgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19TTElERSAgICAgICAgICAgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCR7IENMQVNTX1BSRUZJWCB9c2xpZGVgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xPTkUgICAgICAgICAgID0gYCR7IENMQVNTX1NMSURFIH0tLWNsb25lYDtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0IGNvbnN0IENMQVNTX0NPTlRBSU5FUiAgICAgICA9IGAkeyBDTEFTU19TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xJREUgfV9fY29udGFpbmVyYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfQVJST1dTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfWFycm93c2A7XFxyXFxuZXhwb3J0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb25zdCBDTEFTU19BUlJPVyAgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9YXJyb3dgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BUlJPV19QUkVWICAgICAgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYCR7IENMQVNTX0FSUk9XIH0tLXByZXZgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQVJST1dfTkVYVCAgICAgID0gYCR7IENMQVNTX0FSUk9XIH0tLW5leHRgO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnQgY29uc3QgQ0xBU1NfUEFHSU5BVElPTiAgICAgID0gYCR7IENMQVNTX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkVGSVggfXBhZ2luYXRpb25gO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19QQUdJTkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVElPTl9QQUdFID0gYCR7IENMQVNTX1BBR0lOQVRJT04gfV9fcGFnZWA7XFxyXFxuZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCBjb25zdCBDTEFTU19QUk9HUkVTUyAgICAgICAgPSBgJHsgQ0xBU1NfUFJFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZJWCB9cHJvZ3Jlc3NgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19QUk9HUkVTU19CJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSICAgID0gYCR7IENMQVNTX1BST0dSRVNTIH1fX2JhcmA7XFxyXFxuZXhwb3J0IGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBDTEFTU19UT0dHTEUgICAgICAgICAgPSBgJHsgQ0xBU1NfUFJFRklYIH10bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2xlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfVE9HR0xFX1BMQVkgICAgID0gYCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYickeyBDTEFTU19UT0dHTEUgfV9fcGxheWA7XFxyXFxuZXhwb3J0IGNvbnN0IENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUT0dHTEVfUEFVU0UgICAgPSBgJHsgQ0xBU1NfVE9HR0xFIH1fX3BhdXNlYDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXhwb3J0IGNvbnN0IENMQVNTX1NQSU5ORVIgICAgICAgICA9IGAkeyBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFRklYIH1zcGlubmVyYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfU1IgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICA9IGAkeyBDTEFTU19QUkVGSVggfXNyYDtcXHJcXG5leHBvcnQgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX0lOSVRJQUxJWkVEICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9aW5pdGlhbGl6ZWRgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19BQ1RJVkUgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfWFjdGl2ZWA7XFxyXFxuZXhwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCBjb25zdCBDTEFTU19QUkVWICAgICAgICAgICAgPSBgJHsgU1RBVFVTX0NMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUkVGSVggfXByZXZgO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU19ORVhUICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfW5leHRgO1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgY29uc3QgQ0xBU1NfVklTSUJMRSAgICAgICAgID0gYCR7IFNUQVRVU19DTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfUFJFRklYIH12aXNpYmxlYDtcXHJcXG5leHBvcnQgY29uc3QgQ0xBU1NfTE9BREknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTkcgICAgICAgICA9IGAkeyBTVEFUVVNfQ0xBU1NfUFJFRklYIH1sb2FkaW5nYDtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuZXhwb3J0IGNvbnN0IENMQVNTX0ZPQ1VTX0lOICAgICAgICA9IGAkeyBTVEFUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VTX0NMQVNTX1BSRUZJWCB9Zm9jdXMtaW5gO1xcclxcbmV4cG9ydCBjb25zdCBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfT1ZFUkZMT1cgICAgICAgID0gYCR7IFNUQVRVU19DTEFTU19QUkVGSVggfW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmxvd2A7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGFycmF5IHdpdGggYWxsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGF0dXMgY2xhc3NlcyBleGNlcHQgZm9yIGBpcy1pbml0aWFsaXplZGAuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTVEFUVVNfQ0xBU1NFUyA9IFtcXHJcXG4gIENMQVNTX0FDVElWRSxcXHJcXG4gIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19WSVNJQkxFLFxcclxcbiAgQ0xBU1NfUFJFVixcXHJcXG4gIENMQVNTX05FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1hULFxcclxcbiAgQ0xBU1NfTE9BRElORyxcXHJcXG4gIENMQVNTX0ZPQ1VTX0lOLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIENMQVNTX09WRVJGTE9XLFxcclxcbl07XFxyXFxuXFxyXFxuLyoqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGNsYXNzZXMgZm9yIGVsZW1lbnRzIHRoYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZSBkeW5hbWljYWxseSBjcmVhdGVzLlxcclxcbiAqXFxyXFxuICogQHNpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBDTEFTU0VTID0geycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHNsaWRlICAgICA6IENMQVNTX1NMSURFLFxcclxcbiAgY2xvbmUgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICA6IENMQVNTX0NMT05FLFxcclxcbiAgYXJyb3dzICAgIDogQ0xBU1NfQVJSTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXUyxcXHJcXG4gIGFycm93ICAgICA6IENMQVNTX0FSUk9XLFxcclxcbiAgcHJldiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICA6IENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuICBuZXh0ICAgICAgOiBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1dfTkVYVCxcXHJcXG4gIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOLFxcclxcbiAgcGFnZSAgICAgIDogQ0xBU1NfUEFHSU5BVElPTl9QQUdFLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHNwaW5uZXIgICA6IENMQVNTX1NQSU5ORVIsXFxyXFxufTtcXHJcXG4iLCIvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICogVGhlIHBvd2VyIG9mIHRoZSBmcmljdGlvbi5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgRlJJQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OID0gNTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBJZiB0aGUgdXNlciBzdG9wcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZHJhZ2dpbmcgZm9yIHRoaXMgZHVyYXRpb24gd2l0aCBrZWVwaW5nIHRoZSBwb2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlciBkb3duLCB1cGRhdGVzIHRoZSBiYXNlIGNvb3JkIGFuZCB0aW1lLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTE9HX0lOVEVSVkFMID0gMjAwO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFN0YXJ0IGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudHMgZm9yIGRyYWdnaW5nLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX0RPV05fRVZFTlRTICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI9ICd0b3VjaHN0YXJ0IG1vdXNlZG93bic7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZSBldmVudHMgZm9yIGRyYWdnaW5nLlxcclxcbiAqXFxyXFxuICogQHNpbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBQT0lOVEVSX01PVkVfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkVWRU5UUyA9ICd0b3VjaG1vdmUgbW91c2Vtb3ZlJztcXHJcXG5cXHJcXG4vKipcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICogRW5kIGV2ZW50cyBmb3IgZHJhZ2dpbmcuXFxyXFxuICogVGhlIGBjbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2tgIGV2ZW50IGlzIHJlcXVpcmVkIGJlY2F1c2UgdGhlIGJyb3dzZXIgc29tZXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lcyBkaXNwYXRjaGVzIGBkcmFnYCBldmVudHMgaW5zdGVhZCBvZiBgbW91c2VgLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnQgY29uc3QgUE9JTlRFUl9VUF9FVkVOVFMgPSAndG91Y2hlbmQgdG91Y2hjYW5jIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsIG1vdXNldXAgY2xpY2tcJztcXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgdHlwZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yIHRoZSByZWd1bGFyIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgU0xJREUgPSAnc2xpZGUnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgdHlwZSBmb3IgdGhlIGNhcm91c2VsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuZXhwb3J0IGNvbnN0IExPT1AgPSAnbG9vcCc7XFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFRoZSB0eXBlIGZvciB0aGUgZmFkZSBzbGlkZXIgdGhhdCBjYW4gbm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBoYXZlIG11bHRpcGxlIHNsaWRlcyBpbiBhIHBhZ2UuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IEZBREUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgXCdmYWRlXCc7XFxyXFxuIiwiaW1wb3J0IHtcXHJcXG4gIEFMTF9BVFRSSUJVVEVTLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIEFSSUFfQ09OVFJPTFMsXFxyXFxuICBBUklBX0NVUlJFTlQsXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQVJJQV9ISURERU4sXFxyXFxuICBBUklBX0xBQkVMLFxcclxcbiAgQVJJQV9ST0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRURFU0NSSVBUSU9OLFxcclxcbiAgUk9MRSxcXHJcXG4gIFRBQl9JTkRFWCxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIifSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyc7XFxyXFxuaW1wb3J0IHsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBDTEFTU19BQ1RJVkUsXFxyXFxuICBDTEFTU19DT05UQUlORVIsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgQ0xBU1NfTkVYVCxcXHJcXG4gIENMQVNTX1BSRVYsXFxyXFxuICBDTEFTU19WJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIklTSUJMRSxcXHJcXG4gIFNUQVRVU19DTEFTU0VTLFxcclxcbn0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvbnN0YW50cy9jbGFzc2VzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgRVZFTlQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0FDVElWRSxcXHJcXG4gIEVWRU5UX0NMSUNLLFxcclxcbiAgRVZFTlRfSElEREVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIEVWRU5UX0lOQUNUSVZFLFxcclxcbiAgRVZFTlRfTU9WRSxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFVkVOVF9NT1ZFRCxcXHJcXG4gIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBFVkVOVF9TQ1JPTExFRCxcXHJcXG4gIEVWRU5UX1NISUZURUQsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgRVZFTlRfU0xJREVfS0VZRE9XTixcXHJcXG4gIEVWRU5UX1ZJU0lCTEUsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidCB7IE1PVklORywgU0NST0xMSU5HIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3N0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImF0ZXMnO1xcclxcbmltcG9ydCB7IEZBREUsIExPT1AgfSBmcm9tICcuLi8uLi9jb25zIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRhbnRzL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9uZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYWJzLFxcclxcbiAgYXBwbHksXFxyXFxuICBjZWlsLFxcclxcbiAgY2hpbGQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZmxvb3IsXFxyXFxuICBmb2N1cyxcXHJcXG4gIGZvcm1hdCxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBnZXRBdHRyaWJ1dGUsXFxyXFxuICBoYXNDbGFzcyxcXHJcXG4gIG1pbixcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBwYWQsXFxyXFxuICBxdWVyeUFsbCxcXHJcXG4gIHJlY3QsXFxyXFxuICByZW1vdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlQXR0cmlidXRlLFxcclxcbiAgcmVtb3ZlQ2xhc3MsXFxyXFxuICBzZXRBdHRyaWInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXRlLFxcclxcbiAgc3R5bGUgYXMgX3N0eWxlLFxcclxcbiAgdG9nZ2xlQ2xhc3MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU2xpZGUgc3ViIGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGludGVyZmFjZSAgU2xpZGVDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCB7XFxyXFxuICBpbmRleDogbnVtYmVyO1xcclxcbiAgc2xpZGVJbmRleDogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlcjtcXHJcXG4gIHNsaWRlOiBIVE1MRWxlbWVudDtcXHJcXG4gIGNvbnRhaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXI6IEhUTUxFbGVtZW50O1xcclxcbiAgaXNDbG9uZTogYm9vbGVhbjtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1cGRhdGUoKTogdm9pZDtcXHJcXG4gIHN0eWxlKCBwcm9wOiBzdHJpbmcsIHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogc3RyaW5nIHwgbnVtYmVyLCB1c2VDb250YWluZXI/OiBib29sZWFuICk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkXFxyXFxuICBpc1dpdGhpbiggZnJvbTogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpOiBib29sZWFuO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgc3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmNvbXBvbmVudCBmb3IgbWFuYWdpbmcgZWFjaCBzbGlkZS5cXHJcXG4gKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBpbmRleCAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIEEgc2xpZGUgaW5kZXguXFxyXFxuICogQHBhcmFtIHNsaWRlSW5kZXggLSBBIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSBpbmRleCBmb3IgY2xvbmVzLiBUaGlzIG11c3QgYmUgYC0xYCBpZiB0aGUgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlIGlzIG5vdCBhIGNsb25lLlxcclxcbiAqIEBwYXJhbSBzbGlkZSAgICAgIC0gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUgZWxlbWVudC5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBTbGlkZSBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ViY29tcG9uZW50LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIFNwbGlkZTogU3BsaWRlLCBpbmRleDogbnVtYmVyLCBzbGlkZUluZGV4OiBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyLCBzbGlkZTogSFRNTEVsZW1lbnQgKTogU2xpZGVDb21wb25lbnQge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHsgb24sIGVtaXQsIGJpbmQgfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgeyBDb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50cywgcm9vdCwgb3B0aW9ucyB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNOYXZpZ2F0aW9uLCB1cGRhdGVPbk1vdmUsIGkxOG4sIHBhZ2luYXRpb24sIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZUZvY3VzIH0gPSBvcHRpb25zO1xcclxcbiAgY29uc3QgeyByZXNvbHZlIH0gPSBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50cy5EaXJlY3Rpb247XFxyXFxuICBjb25zdCBzdHlsZXMgICAgPSBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInR0cmlidXRlKCBzbGlkZSwgJ3N0eWxlJyApO1xcclxcbiAgY29uc3QgbGFiZWwgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGdldEF0dHJpYnV0ZSggc2xpZGUsIEFSSUFfTEFCRUwgKTtcXHJcXG4gIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0Nsb25lICAgPSBzbGlkZUluZGV4ID4gLTE7XFxyXFxuICBjb25zdCBjb250YWluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyID0gY2hpbGQoIHNsaWRlLCBgLiR7IENMQVNTX0NPTlRBSU5FUiB9YCApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogVHVybnMgaW50byBgdHJ1ZWAgd2hlbiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveWVkOiBib29sZWFuO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgZnVuY3Rpb24gbW91bnQoIHRoaXM6IFNsaWRlQ29tcG9uZW50ICk6IHZvaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkIHtcXHJcXG4gICAgaWYgKCAhIGlzQ2xvbmUgKSB7XFxyXFxuICAgICAgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmlkID0gYCR7IHJvb3QuaWQgfS1zbGlkZSR7IHBhZCggaW5kZXggKyAxICkgfWA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggc2xpZGUsIFJPTEUsIHBhZ2luYXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIj8gJ3RhYnBhbmVsJyA6ICdncm91cCcgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGlkZSwgQVJJQV9ST0xFREVTQ1JJUFRJT04sIGkxOG4uc2xpZGUgKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgQVJJQV9MQUJFTCwgbGFiZWwgfHwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcm1hdCggaTE4bi5zbGlkZUxhYmVsLCBbIGluZGV4ICsgMSwgU3BsaWRlLmxlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGggXSApICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgbGlzdGVuKCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBMaXN0ZW5zIHRvIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21lIGV2ZW50cy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbGlzdGVuKCk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB2b2lkIHtcXHJcXG4gICAgYmluZCggc2xpZGUsICdjbGljaycsIGFwcGx5KCBlbWl0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgRVZFTlRfQ0xJQ0ssIHNlbGYgKSApO1xcclxcbiAgICBiaW5kKCBzbGlkZSwgJ2tlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInlkb3duJywgYXBwbHkoIGVtaXQsIEVWRU5UX1NMSURFX0tFWURPV04sIHNlbGYgKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfTU9WRUQsIEVWRU5UX1NISUZURUQsIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9TQ1JPTExFRCBdLCB1cGRhdGUgKTtcXHJcXG4gICAgb24oIEVWRU5UX05BVklHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUSU9OX01PVU5URUQsIGluaXROYXZpZ2F0aW9uICk7XFxyXFxuXFxyXFxuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIHVwZGF0ZU9uTW92ZSApIHtcXHJcXG4gICAgICBvbiggRVZFTlRfTU9WRSwgb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBEZXN0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcXHJcXG4gICAgZGVzdHJveWVkID0gdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XFxyXFxuICAgIGV2ZW50LmRlc3Ryb3koKTtcXHJcXG4gICAgcmVtb3ZlQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCBzbGlkZSwgU1RBVFVTX0NMQVNTRVMgKTtcXHJcXG4gICAgcmVtb3ZlQXR0cmlidScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZSggc2xpZGUsIEFMTF9BVFRSSUJVVEVTICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIoIHNsaWRlLCAnc3R5bGUnLCBzdHlsZXMgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgc2xpZGUsIEFSSUFfTEFCRUwsIGxhYmVsIHx8ICcnICk7XFxyXFxuICB9XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyBzbGlkZXMgYXMgbmF2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnYXRpb24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGluaXROYXZpZ2F0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbigpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgY29udHJvbHMgPSBTcGxpZGUuc3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXMubWFwKCB0YXJnZXQgPT4ge1xcclxcbiAgICAgIGNvbnN0IFNsaWRlID0gdGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldC5zcGxpZGUuQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQoIGluZGV4ICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgIHJldHVybiBTbGlkZSA/IFNsaWRlLnNsaWRlLmlkIDogJyc7XFxyXFxuICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ9ICkuam9pbiggJyAnICk7XFxyXFxuXFxyXFxuICAgIHNldEF0dHJpYnV0ZSggc2wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLCBBUklBX0xBQkVMLCBmb3JtYXQoIGkxOG4uc2xpZGVYLCAoIGlzQ2xvbmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gc2xpZGVJbmRleCA6IGluZGV4ICkgKyAxICkgKTtcXHJcXG4gICAgc2V0QXR0cmliJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZSggc2xpZGUsIEFSSUFfQ09OVFJPTFMsIGNvbnRyb2xzICk7XFxyXFxuICAgIHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRBdHRyaWJ1dGUoIHNsaWRlLCBST0xFLCBzbGlkZUZvY3VzID8gJ2J1dHRvbicgOiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJycgKTtcXHJcXG4gICAgc2xpZGVGb2N1cyAmJiByZW1vdmVBdHRyaWJ1dGUoIHNsaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSwgQVJJQV9ST0xFREVTQ1JJUFRJT04gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIElmIHRoZSBgdXBkYXRlT25Nb3ZlYCBvcHRpb24gaXMgYHRydScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYCwgY2FsbGVkIHdoZW4gdGhlIHNsaWRlciBzdGFydHMgbW92aW5nLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gb25Nb3ZlKCk6IHZvaWQge1xcclxcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCAhIGRlc3Ryb3llZCApIHtcXHJcXG4gICAgICB1cGRhdGUoKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVXBkYXRlcyBhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmlidXRlIGFuZCBjbGFzc2VzIG9mIHRoZSBzbGlkZS5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95ZWQgKSB7XFxyXFxuICAgICAgY29uc3QgeyBpbmRleDogY3VyciB9ID0gUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwbGlkZTtcXHJcXG5cXHJcXG4gICAgICB1cGRhdGVBY3Rpdml0eSgpO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB1cGRhdGVWaXNpYmlsaXR5KCk7XFxyXFxuICAgICAgdG9nZ2xlQ2xhc3MoIHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSwgQ0xBU1NfUFJFViwgaW5kZXggPT09IGN1cnIgLSAxICk7XFxyXFxuICAgICAgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfTkVYVCwgaW5kZXggPT09IGN1cnIgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBVcGRhdGVzIHRoZSBzdGF0dXMgcmVsYXRlZCB3aXRoIGFjdGl2aXR5LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gdXBkYXRlQWN0aXZpdHkoKTogdm9pZCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBjb25zdCBhY3RpdmUgPSBpc0FjdGl2ZSgpO1xcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCBhY3RpdmUgIT09IGhhc0NsYXNzKCBzbGlkZSwgQ0xBU1NfQUNUSVZFICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkge1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfQUNUSVZFLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWN0aXZlICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgQVJJQV9DVVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiUkVOVCwgaXNOYXZpZ2F0aW9uICYmIGFjdGl2ZSB8fCAnJyApO1xcclxcbiAgICAgIGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBhY3RpdmUgPyBFVkVOVF9BQ1RJVkUgOiBFVkVOVF9JTkFDVElWRSwgc2VsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogVXBkYXRlcyBjbGFzc2VzIGFuZCBhdHRyaWJ1dGVzIHJlbGF0ZWQgd2l0aCB2aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzaWJpbGl0eS5cXHJcXG4gICAqIC0gRG8gbm90IHVwZGF0ZSBhcmlhLWhpZGRlbiBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2hpZnRpbmcgdG8gYXZvaWQgV2luZG93IE5hcnJhdG9yIGZyb20gc3RhcnQgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWRpbmcgY29udGVudHMuXFxyXFxuICAgKiAtIElmIHRoZSBzbGlkZSBoYXMgZm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFuZCBnZXRzIGhpZGRlbiwgbW92ZXMgZm9jdXMgdG8gdGhlIGFjdGl2ZSBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZVZpc2liaWxpdHkoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICBjb25zdCB2aXNpYmxlID0gaXNWaXNpYmxlKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjb25zdCBoaWRkZW4gPSAhIHZpc2libGUgJiYgKCAhIGlzQWN0aXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIHx8IGlzQ2xvbmUgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCAhIFNwbGlkZS5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGUuaXMoIFsgTU9WSU5HLCBTQ1JPTExJTkcgXSApICkge1xcclxcbiAgICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBdHRyaWJ1dGUoIHNsaWRlLCBBUklBX0hJRERFTiwgaGlkZGVuIHx8ICcnICk7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICB9XFxyXFxuXFxyXFxuICAgIHNldEF0dHJpYnV0ZSggcXVlcnlBbGwoIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibGlkZSwgb3B0aW9ucy5mb2N1c2FibGVOb2RlcyB8fCAnJyApLCBUQUJfSU5ERVgsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBoaWRkZW4gPyAtMSA6ICcnICk7XFxyXFxuXFxyXFxuICAgIGlmICggc2xpZGVGbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdXMgKSB7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBzbGlkZSwgVEFCX0lOREVYLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaGlkZGVuID8gLTEgOiAwICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmlzaWJsZSAhPT0gaGFzQ2xhc3MoIHNsaWRlLCBDTEFTU19WSVNJQkxFICkgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCBzbGlkZSwgQ0xBU1NfVklTSUJMRSwgdmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2libGUgKTtcXHJcXG4gICAgICBlbWl0KCB2aXNpYmxlID8gRVZFTlRfVklTSUJMRSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBFVkVOVF9ISURERU4sIHNlbGYgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCAhIHZpc2libGUgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlICkge1xcclxcbiAgICAgIGNvbnN0IFNsaWRlID0gQ29tcG9uZW50cy5TbGlkZXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEF0KCBTcGxpZGUuaW5kZXggKTtcXHJcXG4gICAgICBTbGlkZSAmJiBmb2N1cyggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlLnNsaWRlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIEFkZHMgYSBDU1MgcnVsZSB0byB0aGUgc2xpZGVyIG9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29udGFpbmVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwcm9wICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIC0gQSBwcm9wZXJ0eSBuYW1lLlxcclxcbiAgICogQHBhcmFtIHZhbHVlICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgLSBBIENTUyB2YWx1ZSB0byBhZGQuXFxyXFxuICAgKiBAcGFyYW0gdXNlQ29udGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lciAtIE9wdGlvbmFsLiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYXBwbHkgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBydWxlIHRvIHRoZSBjb250YWluZXIgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gc3R5bGUoIHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIHVzZUNvbnRhaW5lcj86IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGUoICggdXNlQ29udGFpbmVyICYmIGNvbnRhaW5lciApIHx8IHNsaWRlLCBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcCwgdmFsdWUgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIENoZWNrcyBpZiB0aGUgc2xpZGUgaXMgYWN0aXZlIG9yIG5vdC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIHNsaWRlIGlzIGFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzQWN0aXZlKCk6IGJvb2xlYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHtcXHJcXG4gICAgY29uc3QgeyBpbmRleDogY3VyciB9ID0gU3BsaWRlO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgcmV0dXJuIGN1cnIgPT09IGluZGV4IHx8ICggb3B0aW9ucy5jbG9uZVN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dXMgJiYgY3VyciA9PT0gc2xpZGVJbmRleCApO1xcclxcbiAgfVxcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBzbGlkZSBpcyB2aXNpYmxlIG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzVmlzaWJsZSgpOiBibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGVhbiB7XFxyXFxuICAgIGlmICggU3BsaWRlLmlzKCBGQURFICkgKSB7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIHJldHVybiBpc0FjdGl2ZSgpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBjb25zdCB0cmFja1JlY3QgPSByZWN0KCBDb21wb25lbnRzLkVsZW1lbnRzLnRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjayApO1xcclxcbiAgICBjb25zdCBzbGlkZVJlY3QgPSByZWN0KCBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiKTtcXHJcXG4gICAgY29uc3QgbGVmdCAgICAgID0gcmVzb2x2ZSggJ2xlZnQnLCB0cnUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSApO1xcclxcbiAgICBjb25zdCByaWdodCAgICAgPSByZXNvbHZlKCAncmlnaHQnLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ1ZSApO1xcclxcblxcclxcbiAgICByZXR1cm4gZmxvb3IoIHRyYWNrUmVjdFsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZnQgXSApIDw9IGNlaWwoIHNsaWRlUmVjdFsgbGVmdCBdIClcXHJcXG4gICAgICAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgZmxvb3IoIHNsaWRlUmVjdFsgcmlnaHQgXSApIDw9IGNlaWwoIHRyYWNrUmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbIHJpZ2h0IF0gKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENhbGN1bGF0ZXMgaG93IGZhciB0aGlzIHNsaWRlIGlzIGZyb20gYW5vdGhlciBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgYW5kXFxyXFxuICAgKiByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGlzdGFuY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzIHdpdGhpbiB0aGUgZ2l2ZW4gbnVtYmVyLlxcclxcbiAgICpcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gZnJvbSAgICAgLSBBbiBpbmRleCBvZiBhIGJhc2Ugc2xpZGUuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHBhcmFtIGRpc3RhbmNlIC0gYHRydWVgIGlmIHRoZSBzbGlkZSBpcyB3aXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGluIHRoaXMgbnVtYmVyLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlYCBpZiB0aGUgc2xpZGUgaXMgd2l0aGluIHRoZSBgZGlzdGFuY2VgIGZyb20gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBiYXNlIHNsaWRlLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIGZ1bmN0aW9uIGlzV2l0aGluKCBmcm9tOiBudW1iZXIsIGRpc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyICk6IGJvb2xlYW4ge1xcclxcbiAgICBsZXQgZGlmZiA9IGFicyggZnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gLSBpbmRleCApO1xcclxcblxcclxcbiAgICBpZiAoICEgaXNDbG9uZSAmJiAoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLnJld2luZCB8fCBTcGxpZGUuaXMoIExPT1AgKSApICkge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBkaWZmID0gbWluKCBkaWZmLCBTcGxpZGUubGVuZ3RoIC0gZGlmZiApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGlmZiA8PSBkaXN0YW5jZTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICB9XFxyXFxuXFxyXFxuICBjb25zdCBzZWxmID0ge1xcclxcbiAgICBpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gsXFxyXFxuICAgIHNsaWRlSW5kZXgsXFxyXFxuICAgIHNsaWRlLFxcclxcbiAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29udGFpbmVyLFxcclxcbiAgICBpc0Nsb25lLFxcclxcbiAgICBtb3VudCxcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlc3Ryb3ksXFxyXFxuICAgIHVwZGF0ZSxcXHJcXG4gICAgc3R5bGUsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpc1dpdGhpbixcXHJcXG4gIH07XFxyXFxuXFxyXFxuICByZXR1cm4gc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGY7XFxyXFxufVxcclxcbiIsImltcG9ydCB7IERBVEFfQVRUUklCVVRFIH0gZnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm0gJy4uLy4uL2NvbnN0YW50cy9wcm9qZWN0JztcXHJcXG5cXHJcXG5cXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICogVGhlIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgYXV0b3BsYXkgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVydmFsIGR1cmF0aW9uLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuNS4wXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqL1xcclxcbmV4cG9ydCBjb25zdCBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSA9IGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJHsgREFUQV9BVFRSSUJVVEUgfS1pbnRlcnZhbGA7XFxyXFxuIiwiLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIGZvciBsaXN0ZW5lcnMgdGhhdCBtYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IHByZXZlbnQgdGhlIGJyb3dzZXIgc2Nyb2xsLlxcclxcbiAqXFxyXFxuICogQHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5jZSAzLjQuMVxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBTQ1JPTExfTElTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFTkVSX09QVElPTlMgPSB7IHBhc3NpdmU6IGZhbHNlLCBjYXB0dXJlOiB0cnVlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xcclxcbiIsImltcG9ydCB7IEFSUk9XX0RPV04sIEFSUk9XX0xFRlQsIEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJSSUdIVCwgQVJST1dfVVAgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYXJyb3ciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicyc7XFxyXFxuaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi90eXBlL3R5cGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgbWFwIHRvIGFzc29jIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lhdGUgYSBub24tc3RhbmRhcmQgbmFtZSB0byB0aGUgc3RhbmRhcmQgb25lLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSA0LjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgTk9STUFMSVpBVElPTl9NQVAgPSB7XFxyXFxuICBTcGFjZWJhcjogJyAnLFxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIFJpZ2h0ICAgOiBBUlJPV19SSUdIVCxcXHJcXG4gIExlZnQgICAgOiBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1dfTEVGVCxcXHJcXG4gIFVwICAgICAgOiBBUlJPV19VUCxcXHJcXG4gIERvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIDogQVJST1dfRE9XTixcXHJcXG59O1xcclxcblxcclxcbi8qKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBOb3JtYWxpemVzIHRoZSBrZXkuXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0ga2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAtIEEgc3RyaW5nIG9yIGEgS2V5Ym9hcmRFdmVudCBvYmplY3QuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHJldHVybiBBIG5vcm1hbGl6ZWQga2V5LlxcclxcbiAqL1xcclxcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplS2V5KCBrZXk6IHN0cmluZyB8IEtleWJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZEV2ZW50ICk6IHN0cmluZyB7XFxyXFxuICBrZXkgPSBpc1N0cmluZygga2V5ICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8ga2V5IDoga2V5LmtleTtcXHJcXG4gIHJldHVybiBOT1JNQUxJWkFUSU9OX01BUFsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tleSBdIHx8IGtleTtcXHJcXG59IiwiaW1wb3J0IHsgQVJST1dfTEVGVCwgQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlJJR0hUIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fycm93cyc7XFxyXFxuaW1wb3J0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB7IEVWRU5UX01PVkUsIEVWRU5UX1VQREFURUQgfSBmcm9tICcuLi8uLi9jb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJzsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuaW1wb3J0IHsgbmV4dFRpY2sgfSBmcm9tICcuLi8uLi91dGlscyc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IG5vcm1hbGl6ZUtleSB9IGZyb20gJy4uLy4uL3V0aWxzL2RvbSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvbm9ybWFsaXplS2V5L25vcm1hbGl6ZUtleSc7XFxyXFxuXFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBLZXlib2FyZCBjb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydCBpbnRlcmZhY2UgS2V5Ym9hcmRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudCB7XFxyXFxuICBkaXNhYmxlKCBkaXNhYmxlZDogYm9vbGVhbiApOiB2b2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGtleWJvYXJkIGV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCBuYW1lLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuNi4wXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL1xcclxcbmNvbnN0IEtFWUJPQVJEX0VWRU5UID0gJ2tleWRvd24nO1xcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50IGZvciBjb250cm9sbGluZyB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHNsaWRlciBieSBrZXlib2FyZHMuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIEtleWJvYXJkIGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBLZXlib2FyZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogT3B0aW9ucyApOiBLZXlib2FyZENvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgYmluZCwgdW5iaW5kIH0gPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgY29uc3QgeyByb290IH0gPSBTcGxpZGU7XFxyXFxuICBjb25zdCB7IHJlc29sdmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gPSBDb21wb25lbnRzLkRpcmVjdGlvbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIFRoZSB0YXJnZXQgZWxlbWVudCBvZiB0aGUga2V5Ym9hcmQgZXZlbnQuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBsZXQgdGFyZ2V0OiBXaW5kb3cgfCBIVE1MRWxlbWVudDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50IGlzIGN1cnJlbnRseSBkaXNhYmxlZCBvciBub3QuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBsZXQgZGlzYWJsZWQ6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGluaXQoKTtcXHJcXG4gICAgb24oIEVWRU5UX1VQREFURUQsIGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm95ICk7XFxyXFxuICAgIG9uKCBFVkVOVF9VUERBVEVELCBpbml0ICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBvbiggRVZFTlRfTU9WRSwgb25Nb3ZlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IHsga2V5Ym9hcmQgfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuICAgIGlmICggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImtleWJvYXJkICkge1xcclxcbiAgICAgIHRhcmdldCA9IGtleWJvYXJkID09PSAnZ2xvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImJhbCcgPyB3aW5kb3cgOiByb290O1xcclxcbiAgICAgIGJpbmQoIHRhcmdldCwgS0VZIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JPQVJEX0VWRU5ULCBvbktleWRvd24gKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVudC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB1bmJpbmQoIHRhcmdldCwgS0VZQk9BUkRfRVZFTlQgKTtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERpc2FibGVzIHRoZSBrZXlib2FyZCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25wdXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gVG9nZ2xlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlzYWJsaW5nL2VuYWJsaW5nIHRoZSBrZXlib2FyZCBpbnB1dC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGRpc2FibGUoIHZhbHVlOiBib29sZWFuICk6IHZvaWQgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgZGlzYWJsZWQgPSB2YWx1ZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBzbGlkZXIgbW92ZXMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVG8gYXZvaWQgdGhlIHNsaWRlciBmcm9tIG1vdmluZyB0d2ljZSwgdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaXQgZm9yIGEgdGljay5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25Nb3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgX2Rpc2FibGVkID0gZGlzYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkO1xcclxcbiAgICBkaXNhYmxlZCA9IHRydWU7XFxyXFxuICAgIG5leHRUaWNrKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkgPT4geyBkaXNhYmxlZCA9IF9kaXNhYmxlZCB9ICk7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiBhbnkga2V5IGlzIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VkIG9uIHRoZSB0YXJnZXQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gQSBLZXlib2FyZEV2ZW50IG9iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG9uS2V5ZG93biggZTogS2V5Ym9hcmRFdmVudCApOiB2b2lkIHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlmICggISBkaXNhYmxlZCApIHtcXHJcXG4gICAgICBjb25zdCBrZXkgPSBub3JtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsaXplS2V5KCBlICk7XFxyXFxuXFxyXFxuICAgICAgaWYgKCBrZXkgPT09IHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbHZlKCBBUlJPV19MRUZUICkgKSB7XFxyXFxuICAgICAgICBTcGxpZGUuZ28oICc8JyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgICB9IGVsc2UgaWYgKCBrZXkgPT09IHJlc29sdmUoIEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJSSUdIVCApICkge1xcclxcbiAgICAgICAgU3BsaWRlLmdvKCAnPicgKTtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICAgIGRpc2FiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgREFUQV9BVFRSSUJVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcclxcblxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4vKipcXHJcXG4gKiBUaGUgZGF0YSBhdHRyaWJ1dGUgZm9yIHRoZSBzcmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhbHVlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBjb25zdCBTUkNfREFUQV9BVFRSSUJVVEUgPSBgJHsgREFUQV9BVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUUklCVVRFIH0tbGF6eWA7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGRhdGEgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZSBmb3IgdGhlIHNyY3NldCB2YWx1ZS5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgY29uc3QgU1JDU0VUX0RBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBX0FUVFJJQlVURSA9IGAkeyBTUkNfREFUQV9BVFRSSUJVVEUgfS1zcmNzZXRgOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgc2VsZWN0b3Igc3RyaW5nIGZvciBpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2VzIHRvIGxvYWQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGNvbnN0IElNQUdFX1NFTEVDVE9SID0gYFskeyBTUkNfREFUQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQVRUUklCVVRFIH1dLCBbJHsgU1JDU0VUX0RBVEFfQVRUUklCVVRFIH1dYDtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIiwiaW1wb3J0IHsgQVJJQV9PUklFTlRBVElPTiB9IGZyb20gXCcuLi8uLi9jb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRhbnRzL2F0dHJpYnV0ZXMnO1xcclxcbmltcG9ydCB7IFRUQiB9IGZyb20gJy4uLy4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi9jb25zdGFudHMvZGlyZWN0aW9ucyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIEVWRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9DTElDSyxcXHJcXG4gIEVWRU5UX01PVU5URUQsXFxyXFxuICBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxcXHJcXG4gIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCxcXHJcXG4gIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19TTElERV9LRVlET1dOLFxcclxcbiAgRVZFTlRfVVBEQVRFRCxcXHJcXG59IGZybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBMT09QIH0gZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyb20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0ZXJmYWNlLCBFdmVudEludGVyZmFjZU9iamVjdCB9IGZyb20gJy4uLy4uL2NvbnMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBhcHBseSwgZW1wdHksIGluY2x1ZGVzLCBpc1VuZGVmaW5lZCwgcHJldmVudCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInNldEF0dHJpYnV0ZSB9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9ybWFsaXplS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL25vcm1hbGl6ZUtleSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvbm9ybWFsaXplS2V5JztcXHJcXG5pbXBvcnQgeyBTbGlkZUNvbXBvbmVudCB9IGZybyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtICcuLi9TbGlkZXMvU2xpZGUnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU3luYyBjb21wb25lbnQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UgU3luY0NvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbW91bnQoKTogdm9pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBrZXlzIGZvciB0cmlnZ2VyaW5nIHRoZSBuYXZpZ2F0aW9uIHNsaWRlLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmNvbnN0IFRSSUdHRVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiX0tFWVMgPSBbICcgJywgJ0VudGVyJyBdO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgY29tcG9uZW50IGZvciBzeW5jaW5nIG11bHRpcGxlIHNsaWRlcnMuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIFN5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBTeW5jKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnM6IE9wdGlvbnMgKTogU3luY0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBpc05hdmlnYXRpb24sIHNsaWRlRm9jdXMgfSA9IG9wdGlvbnM7XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgZXZlbnQgb2JqZWN0cy5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGNvbnN0IGV2ZW50czogRXZlbnRJbnRlcmZhY2VPYmplY3RbXSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW50KCk6IHZvaWQge1xcclxcbiAgICBTcGxpZGUuc3BsaWRlcy5mb3JFYWNoKCB0YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0ID0+IHtcXHJcXG4gICAgICBpZiAoICEgdGFyZ2V0LmlzUGFyZW50ICkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgIHN5bmMoIFNwbGlkZSwgdGFyZ2V0LnNwbGlkZSApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgICAgIHN5bmMoIHRhcmdldC5zcGxpZGUsIFNwbGlkZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBpc05hdmlnYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uICkge1xcclxcbiAgICAgIG5hdmlnYXRlKCk7XFxyXFxuICAgIH1cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERlc3Ryb3lzIHRoZSBjb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBkZXN0cm95KCk6IHZvaWQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgZXZlbnRzLmZvckVhY2goIGV2ZW50ID0+IHsgZXZlbnQuZGVzdHJveSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB9ICk7XFxyXFxuICAgIGVtcHR5KCBldmVudHMgKTtcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFJlbW91bnRzIHRoZSBjb21wb25lbnQuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICpcXHJcXG4gICAqIEBpbnRlcm5hbFxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gcmVtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgZGVzdHJveSgpO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgbW91bnQoKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIFN5bmNzIHRoZSBjdXJyZW50IGluZGV4IHdpdGggYSBwcm92aWRlZCBjaGlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Qgc3BsaWRlIGluc3RhbmNlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBzcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlIC0gQSBzcGxpZGUgaW5zdGFuY2UgdG8gc3luYyB3aXRoLlxcclxcbiAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSB0YXJnZXQgLSBBIHRhcmdldCBzcGxpZGUgaW5zdGFuY2UuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBmdW5jdGlvbiBzeW5jKCBzcGxpZGU6IFNwbGlkZSwgdGFyZ2V0OiBTcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBldmVudCA9IEV2ZW50SW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSggc3BsaWRlICk7XFxyXFxuXFxyXFxuICAgIGV2ZW50Lm9uKCBFVkVOVF9NT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSwgKCBpbmRleCwgcHJldiwgZGVzdCApID0+IHtcXHJcXG4gICAgICB0YXJnZXQuZ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCB0YXJnZXQuaXMoIExPT1AgKSA/IGRlc3QgOiBpbmRleCApO1xcclxcbiAgICB9ICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgICBldmVudHMucHVzaCggZXZlbnQgKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIE1ha2VzIHNsaWRlcyBjbGlja2FibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGFuZCBtb3ZlcyB0aGUgc2xpZGVyIHRvIHRoZSBpbmRleCBvZiBjbGlja2VkIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5cXHJcXG4gICAqIE5vdGUgdGhhdCB0aGUgZGlyZWN0aW9uIG9mIGBtZW51YCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgaW1wbGljaXRseSBgdmVydGljYWxgIGFzIGRlZmF1bHQuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuICBmdW5jdGlvbiBuYXZpZ2F0ZSgpOiB2b2lkIHtcXHJcXG4gICAgY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgeyBvbiB9ID0gZXZlbnQ7XFxyXFxuXFxyXFxuICAgIG9uKCBFVkVOVF9DTElDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ssIG9uQ2xpY2sgKTtcXHJcXG4gICAgb24oIEVWRU5UX1NMSURFX0tFWURPV04sIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tleWRvd24gKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FURUQgXSwgdXBkYXRlICk7XFxyXFxuXFxyXFxuICAgIGV2ZW50cy5wdXNoKCBldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgKTtcXHJcXG4gICAgZXZlbnQuZW1pdCggRVZFTlRfTkFWSUdBVElPTl9NT1VOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRCwgU3BsaWRlLnNwbGlkZXMgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFVwZGF0ZSBhdHRyaWJ1dGVzLlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdXBkYXRlKCk6IHZvaWQge1xcclxcbiAgICBzZXRBdHRyaWJ1dGUoIENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzLkVsZW1lbnRzLmxpc3QsIEFSSUFfT1JJRU5UQVRJT04sIG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzLmRpcmVjdGlvbiA9PT0gVFRCID8gJ3ZlcnRpY2FsJyA6ICcnICk7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgbmF2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnYXRpb24gc2xpZGUgaXMgY2xpY2tlZC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmFtIFNsaWRlIC0gQSBjbGlja2VkIFNsaWRlIGNvbXBvbmVudC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIG9uQ2xpY2soIFNsaWRlOiBTbGlkZUNvbXBvbmVudCApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdm9pZCB7XFxyXFxuICAgIFNwbGlkZS5nbyggU2xpZGUuaW5kZXggKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIGFueSBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzIHByZXNzZWQgb24gdGhlIG5hdmlnYXRpb24gc2xpZGUuXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIEBwYXJhbSBTbGlkZSAtIEEgU2xpZGUgY29tcG9uZW50LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEBwYXJhbSBlICAgICAtIEEgS2V5Ym9hcmRFdmVudCBvYmplY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbktleWRvd24oIFNsaWRlOiBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVDb21wb25lbnQsIGU6IEtleWJvYXJkRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIGluY2x1ZGVzKCBUUklHR0VSX0tFWVMsIG5vcm1hbGl6ZUtleSggZSApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICkge1xcclxcbiAgICAgIG9uQ2xpY2soIFNsaWRlICk7XFxyXFxuICAgICAgcHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQoIGUgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB7XFxyXFxuICAgIHNldHVwOiBhcHBseShcXHJcXG4gICAgICBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cy5NZWRpYS5zZXQsXFxyXFxuICAgICAgeyBzbGlkZUZvY3VzOiBpc1VuZGVmaW5lZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHNsaWRlRm9jdXMgKSA/IGlzTmF2aWdhdGlvbiA6IHNsaWRlRm9jdXMgfSxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgdHJ1ZVxcclxcbiAgICApLFxcclxcbiAgICBtb3VudCxcXHJcXG4gICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3ksXFxyXFxuICAgIHJlbW91bnQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaW1wb3J0IHsgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTiB9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdGFudHMvbWVkaWEnO1xcclxcbmltcG9ydCB7IENSRUFURUQsIERFIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNUUk9ZRUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ0IHsgRXZlbnRCaW5kZXIgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJucyB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBtZXJnZSwgb21pdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIG93bktleXMgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRVZFTiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJUX1VQREFURUQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBNZWRpYSBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBNZWRpYUNvbXBvbmVudCBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIC8qKiBAaW50ZXJuYWwgKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICByZWR1Y2UoIHJlZHVjZWQ6IGJvb2xlYW4gKTogdm9pZDtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXQoIG9wdGlvbnM6IE9wdGlvbnMsIGJhc2U/OiBib29sZWFuLCBub3RpZnk/OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYm9vbGVhbiApOiB2b2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGNvbXBvbmVudCBmb3Igb2JzZXJ2aW5nIG1lZGlhIHF1ZXJpZXMgYW5kIHVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGluZyBvcHRpb25zIGlmIG5lY2Vzc2FyeS5cXHJcXG4gKiBUaGlzIHVzZWQgdG8gYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIHRoZSBPcHRpb25zIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNC4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgTWVkaWEgY29tcG9uZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIE1lZGlhKCBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zICk6IE1lZGlhQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgc3RhdGUgfSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGU7XFxyXFxuICBjb25zdCBicmVha3BvaW50cyAgID0gb3B0aW9ucy5icmVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2twb2ludHMgfHwge307XFxyXFxuICBjb25zdCByZWR1Y2VkTW90aW9uID0gb3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MucmVkdWNlZE1vdGlvbiB8fCB7fTtcXHJcXG4gIGNvbnN0IGJpbmRlciAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gRXZlbnRCaW5kZXIoKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zIGFuZCBNZWRpYVF1ZXJ5TGlzdCBvYmplY3QuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBjb25zdCBxdWVyaWVzOiBBcnJheTxbIE9wdGlvbnMsIE1lZGlhUXVlcnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTGlzdCBdPiA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW4gdGhlIGNvbXBvbmVudCBpcyBjb25zdHJ1Y3RlZC5cXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGZ1bmN0aW9uIHNldHVwKCk6IHZvaWQge1xcclxcbiAgICBjb25zdCBpc01pbiA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBvcHRpb25zLm1lZGlhUXVlcnkgPT09ICdtaW4nO1xcclxcblxcclxcbiAgICBvdyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduS2V5cyggYnJlYWtwb2ludHMgKVxcclxcbiAgICAgIC5zb3J0KCAoIG4sIG0gKSA9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaXNNaW4gPyArbiAtICttIDogK20gLSArbiApXFxyXFxuICAgICAgLmZvckVhY2goICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrZXkgPT4ge1xcclxcbiAgICAgICAgcmVnaXN0ZXIoIGJyZWFrcG9pbnRzWyBrZXkgXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIGAoJHsgaXNNaW4gPyAnbWluJyA6ICdtYXgnIH0td2lkdGg6JHsga2V5IH1weCkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCApO1xcclxcbiAgICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgcmVnaXN0ZXIoIHJlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2VkTW90aW9uLCBNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB1cGRhdGUoKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Rlc3Ryb3lzIHRoZSBjb21wb25lbnQuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBjb21wbGV0ZWx5IC0gV2lsbCBiZSBgdHJ1ZWAgZm9yIGNvbXBsZXRlIGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVjdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGVzdHJveSggY29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsZXRlbHk6IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIGlmICggY29tcGxldGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3kgKSB7XFxyXFxuICAgICAgYmluZGVyLmRlc3Ryb3koKTtcXHJcXG4gICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVnaXN0ZXJzIGVudHJpZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzIFsgT3B0aW9ucywgbWVkaWEgcXVlcnkgc3RyaW5nIF0uXFxyXFxuICAgKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBtZXJnZWQgdG8gY3VycmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgb3B0aW9ucyB3aGVuIHRoZSBkb2N1bWVudCBtYXRjaGVzIHRoZSBxdWVyeS5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gcXVlcnkgICAtIEEgcXVlcnkgc3RyaW5nLlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqL1xcclxcbiAgZnVuY3Rpb24gcmVnaXN0ZXIoIG9wdGlvbnM6IE9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVyeTogc3RyaW5nICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBxdWVyeUxpc3QgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbWF0Y2hNZWRpYSggcXVlcnkgKTtcXHJcXG4gICAgYmluZGVyLmJpbmQoIHF1ZXJ5TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpc3QsICdjaGFuZ2UnLCB1cGRhdGUgKTtcXHJcXG4gICAgcXVlcmllcy5wdXNoKCBbICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLCBxdWVyeUxpc3QgXSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogQ2hlY2tzIGFsbCBtZWRpYSBxdWVyaWVzIGluIGVudHJpZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuZCB1cGRhdGVzIG9wdGlvbnMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cGRhdGUoKTogdm9pZCB7XFxyXFxuICAgIGNvbnN0IGRlc3Ryb3llZCA9IHN0YXRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyggREVTVFJPWUVEICk7XFxyXFxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmRpcmVjdGlvbjtcXHJcXG4gICAgY29uc3QgbWVyZ2VkID0gcXVlcmllcy5yZWR1YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlPE9wdGlvbnM+KCAoIG1lcmdlZCwgZW50cnkgKSA9PiB7XFxyXFxuICAgICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBtZXJnZSggbWVyZ2VkLCBlbnRyeVsgMSBdLm1hdGNoZXMgPyBlbnRyeVsgMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXSA6IHt9ICk7XFxyXFxuICAgIH0sIHt9ICk7XFxyXFxuXFxyXFxuICAgIG9taXQoIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zICk7XFxyXFxuICAgIHNldCggbWVyZ2VkICk7XFxyXFxuXFxyXFxuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIG9wdGlvbnMuZGVzdHJveSApIHtcXHJcXG4gICAgICBTcGxpZGUuZGVzdHJveSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIG9wdGlvbnMuZGVzdHJveSA9PT0gJ2NvbXBsZXRlbHknICk7XFxyXFxuICAgIH0gZWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgaWYgKCBkZXN0cm95ZWQgKSB7XFxyXFxuICAgICAgZGVzdHJveSggdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgICBTcGxpZGUubW91bnQoKTtcXHJcXG4gICAgfSBlbHNlIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgZGlyZWN0aW9uICE9PSBvcHRpb25zLmRpcmVjdGlvbiAmJiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnJlZnJlc2goKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogRGlzYWJsZXMgb3IgZW5hYmxlcyBgcmVkdWNlZE1vdGlvbmAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMuXFxyXFxuICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcgd2hlbiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBxdWVyeS5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQGludGVybmFsXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFibGUgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYXBwbHkgYHJlZHVjZWRNb3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uYCBvcHRpb25zIG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZHVjZSggZW5hYmxlOiBib29sZWFuICk6IHZvaWQge1xcclxcbiAgICBpZiAoIG1hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaE1lZGlhKCBNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OICkubWF0Y2hlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgZW5hYmxlID8gbWVyZ2UoIG9wdGlvbnMsIHJlZHVjZWRNb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uICkgOiBvbWl0KCBvcHRpb25zLCBvd25LZXlzKCByZWR1Y2VkTW90aW9uICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NldHMgY3VycmVudCBvcHRpb25zIG9yIGJhc2Ugb3B0aW9ucyAocHJvdG90eXBlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICAgKiBJZiBjaGFuZ2luZyBiYXNlIG9wdGlvbnMsIGFsd2F5cyBlbWl0cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhlIGB1cGRhdGVkYCBldmVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFsXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIG9wdHMgICAtIE5ldyBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5cXHJcXG4gICAqIEBwYXJhbSBiYXNlICAgLSBPcHRpb25hbC4gRGV0ZXJtaW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mgd2hldGhlciB0byBhbHNvIHVwZGF0ZSBiYXNlIG9wdGlvbnMgb3Igbm90LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBub3RpZnkgLSBPcHRpb25hbC4gSWYgYHRydWVgLCBhbHdheScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIGVtaXRzIHRoZSBgdXBkYXRlYCBldmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHNldCggb3B0czogT3B0aW9ucywgYmFzZT86IGJvb2xlYW4sIG5vdGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3k/OiBib29sZWFuICk6IHZvaWQge1xcclxcbiAgICBtZXJnZSggb3B0aW9ucywgb3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgKTtcXHJcXG4gICAgYmFzZSAmJiBtZXJnZSggT2JqZWN0LmdldFByb3RvdHlwZU9mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggb3B0aW9ucyApLCBvcHRzICk7XFxyXFxuXFxyXFxuICAgIGlmICggbm90aWZ5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fCAhIHN0YXRlLmlzKCBDUkVBVEVEICkgKSB7XFxyXFxuICAgICAgU3BsaWRlLmVtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KCBFVkVOVF9VUERBVEVELCBvcHRpb25zICk7XFxyXFxuICAgIH1cXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBzZXR1cCxcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3ksXFxyXFxuICAgIHJlZHVjZSxcXHJcXG4gICAgc2V0LFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IEFMTF9BVFRSSUJVVEVTLCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19MQUJFTCwgQVJJQV9MQUJFTExFREJZLCBBUklBX1JPTEVERVNDUklQVElPTiwgUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJPTEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyc7XFxyXFxuaW1wbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidydCB7XFxyXFxuICBDTEFTU19BQ1RJVkUsXFxyXFxuICBDTEFTU19BUlJPV19ORVgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVCxcXHJcXG4gIENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuICBDTEFTU19BUlJPV1MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgQ0xBU1NfQ0xPTkUsXFxyXFxuICBDTEFTU19GT0NVU19JTixcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19MSVNULFxcclxcbiAgQ0xBU1NfUEFHSU5BVElPTixcXHJcXG4gIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUk9HUkVTU19CQVIsXFxyXFxuICBDTEFTU19ST09ULFxcclxcbiAgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1NMSURFLFxcclxcbiAgQ0xBU1NfVE9HR0xFLFxcclxcbiAgQ0xBU1NfVFJBQ0ssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbn0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvcnQgeyBFVkVOVF9SRUZSRVNILCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vLi4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IFBST0pFQ1RfQ09ERSB9IGYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicm9tICcuLi8uLi9jb25zdGFudHMvcHJvamVjdCc7XFxyXFxuaW1wb3J0IHsgRXZlbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW9ucyB9IGZyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIGFkZENsYXNzLCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGFzc2VydCxcXHJcXG4gIGFzc2lnbixcXHJcXG4gIGNoaWxkLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGNoaWxkcmVuLFxcclxcbiAgZW1wdHksXFxyXFxuICBmb3JPd24sXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZ2V0QXR0cmlidXRlLFxcclxcbiAgcHVzaCxcXHJcXG4gIHF1ZXJ5LCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIHJlbW92ZUF0dHJpYnV0ZSxcXHJcXG4gIHJlbW92ZUNsYXNzLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldEF0dHJpYnV0ZSxcXHJcXG4gIHRvZ2dsZUNsYXNzLFxcclxcbiAgdW5pcXUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZUlkLFxcclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IGNsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9zZXN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL2Nsb3Nlc3QvY2xvc2VzdCc7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbmltcG9ydCB7IFBPSU5URVJfRE9XTl9FVkVOVFMgfSBmcm9tICcuLi9EcmFnLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjb25zdGFudHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlIGZvciBlbGVtZW50cyB3aGljaCB0aGUgc2xpZGVyIGNvbnNpc3RzIG9mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcnQgaW50ZXJmYWNlIEVsZW1lbnRDb2xsZWN0aW9uIHtcXHJcXG4gIHJvb3Q6IEhUTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMRWxlbWVudDtcXHJcXG4gIHRyYWNrOiBIVE1MRWxlbWVudDtcXHJcXG4gIGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBIVE1MRWxlbWVudDtcXHJcXG4gIHNsaWRlczogSFRNTEVsZW1lbnRbXTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBhcnJvd3M/OiBIVE1MRWxlbWVudDtcXHJcXG4gIHBhZ2luYXRpb24/OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSFRNTFVMaXN0RWxlbWVudDtcXHJcXG4gIHByZXY/OiBIVE1MQnV0dG9uRWxlbWVudDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBuZXh0PzogSFRNTEJ1dHRvbkVsZW1lbnQ7XFxyXFxuICBiYXI/OiBIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RNTEVsZW1lbnQ7XFxyXFxuICB0b2dnbGU/OiBIVE1MRWxlbWVudDtcXHJcXG59XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMgY29tcG9uZW50LlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbmV4cG9ydCBpbnRlcmZhY2UgRWxlbWVudHNDb21wb25lbnQgZXh0ZW5kcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQmFzZUNvbXBvbmVudCwgRWxlbWVudENvbGxlY3Rpb24ge1xcclxcbn1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuLyoqXFxyXFxuICogVGhlIGNvbXBvbmVudCB0aGF0IGNvbGxlY3RzIGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgaGFuZGxlcyBlbGVtZW50cyB3aGljaCB0aGUgc2xpZGVyIGNvbnNpc3RzIG9mLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIEFuIEVsZW1lbnRzIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmV4cG9ydCBmdW5jdGlvbiBFbGVtZW50cyggU3BsaWRlOiBTcGxpZGUsIENvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uLCBiaW5kIH0gPSBFdmVudEludGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyByb290IH0gPSBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgY29uc3QgeyBpMThuIH0gPSBvcHRpb25zO1xcclxcbiAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZW1lbnRzOiBFbGVtZW50Q29sbGVjdGlvbiA9IHt9IGFzIEVsZW1lbnRDb2xsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzIGFsbCBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxlbWVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0IHNsaWRlczogSFRNTEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50W10gPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU3RvcmVzIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGwgcm9vdCBjbGFzc2VzLlxcclxcbiAgICovXFxyXFxuICBsZXQgcm9vdENsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzOiBzdHJpbmdbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGFsbCBsaXN0IGNsYXNzZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCB0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIHRyYWNrIGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCB0cmFjazonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEhUTUxFbGVtZW50O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGlzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGxpc3Q6IEhUTUxFbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHVybnMgaW50byBgdHJ1ZWAgd2hlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZGV0ZWN0aW5nIGtleWRvd24sIGFuZCBgZmFsc2VgIHdoZW4gZGV0ZWN0aW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb2ludGVyZG93bi5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGlzVXNpbmdLZXk6IGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb29sZWFuO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbXBvbmVudCBpcyBjb25zdHJ1Y3RlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHNldHVwKCk6IHZvaWQge1xcclxcbiAgICBjb2xsZWN0KCk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpbml0KCk7XFxyXFxuICAgIHVwZGF0ZSgpO1xcclxcbiAgfVxcclxcblxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQge1xcclxcbiAgICBvbiggRVZFTlRfUkVGUkVTSCwgZGVzdHJveSApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgb24oIEVWRU5UX1JFRlJFU0gsIHNldHVwICk7XFxyXFxuICAgIG9uKCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfVVBEQVRFRCwgdXBkYXRlICk7XFxyXFxuXFxyXFxuICAgIGJpbmQoIGRvY3VtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCwgYCR7IFBPSU5URVJfRE9XTl9FVkVOVFMgfSBrZXlkb3duYCwgZSA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcbiAgICAgIGlzVXNpbmdLZXkgPSBlLnR5cGUgPT09ICdrZXlkb3duJztcXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIH0sIHsgY2FwdHVyZTogdHJ1ZSB9ICk7XFxyXFxuXFxyXFxuICAgIGJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJkKCByb290LCAnZm9jdXNpbicsICgpID0+IHtcXHJcXG4gICAgICB0b2dnbGVDbGFzcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHJvb3QsIENMQVNTX0ZPQ1VTX0lOLCAhISBpc1VzaW5nS2V5ICk7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERlc3Ryb3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyB0aGUgY29tcG9uZW50LlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBjb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xldGVseSAtIFdoZXRoZXIgdG8gZGVzdHJveSB0aGUgY29tcG9uZW50IGNvbXBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWx5IG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGVzdHJveSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbXBsZXRlbHk/OiBib29sZWFuICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBhdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnMgPSBBTExfQVRUUklCVVRFUy5jb25jYXQoICdzdHlsZScgKTtcXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGVtcHR5KCBzbGlkZXMgKTtcXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb290LCByb290Q2xhc3NlcyApO1xcclxcbiAgICByZW1vdmVDbGFzcyggdHJhY2ssIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFja0NsYXNzZXMgKTtcXHJcXG4gICAgcmVtb3ZlQXR0cmlidXRlKCBbIHRyYWNrLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdCBdLCBhdHRycyApO1xcclxcbiAgICByZW1vdmVBdHRyaWJ1dGUoIHJvb3QsIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib21wbGV0ZWx5ID8gYXR0cnMgOiBbICdzdHlsZScsIEFSSUFfUk9MRURFU0NSSVBUIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTiBdICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFVwZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVzIHRoZSBzdGF0dXMgb2YgZWxlbWVudHMuXFxyXFxuICAgKi9cXHJcXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiB1cGRhdGUoKTogdm9pZCB7XFxyXFxuICAgIHJlbW92ZUNsYXNzKCByb28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgcm9vdENsYXNzZXMgKTtcXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIHRyYWNrLCB0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2tDbGFzc2VzICk7XFxyXFxuXFxyXFxuICAgIHJvb3RDbGFzc2VzICA9IGdldENsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzKCBDTEFTU19ST09UICk7XFxyXFxuICAgIHRyYWNrQ2xhc3NlcyA9IGdldENsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzKCBDTEFTU19UUkFDSyApO1xcclxcblxcclxcbiAgICBhZGRDbGFzcyggcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3QsIHJvb3RDbGFzc2VzICk7XFxyXFxuICAgIGFkZENsYXNzKCB0cmFjaywgdHJhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrQ2xhc3NlcyApO1xcclxcblxcclxcbiAgICBzZXRBdHRyaWJ1dGUoIHJvb3QsIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUklBX0xBQkVMLCBvcHRpb25zLmxhYmVsICk7XFxyXFxuICAgIHNldEF0dHJpYnV0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJvb3QsIEFSSUFfTEFCRUxMRURCWSwgb3B0aW9ucy5sYWJlbGxlZGJ5ICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb2xsZWN0cyBlbGVtZW50cyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2hpY2ggdGhlIHNsaWRlciBjb25zaXN0cyBvZi5cXHJcXG4gICAqL1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGNvbGxlY3QoKTogdm9pZCB7XFxyXFxuICAgIHRyYWNrID0gZmluZCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AuJHsgQ0xBU1NfVFJBQ0sgfWAgKTtcXHJcXG4gICAgbGlzdCAgPSBjaGlsZCggdHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrLCBgLiR7IENMQVNTX0xJU1QgfWAgKTtcXHJcXG5cXHJcXG4gICAgYXNzZXJ0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgdHJhY2sgJiYgbGlzdCwgJ0EgdHJhY2svbGlzdCBlbGVtZW50IGlzIG1pc3NpbmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLicgKTtcXHJcXG4gICAgcHVzaCggc2xpZGVzLCBjaGlsZHJlbiggbGlzdCwgYC4keyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfU0xJREUgfTpub3QoLiR7IENMQVNTX0NMT05FIH0pYCApICk7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICBmb3JPd24oIHtcXHJcXG4gICAgICBhcnJvd3MgICAgOiBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQVJST1dTLFxcclxcbiAgICAgIHBhZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICAgIHByZXYgICAgICA6IENMQVNTX0FSUk9XX1BSRVYsXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG5leHQgICAgICA6IENMQVNTX0FSUk9XX05FWFQsXFxyXFxuICAgICAgYmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICA6IENMQVNTX1BST0dSRVNTX0JBUixcXHJcXG4gICAgICB0b2dnbGUgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogQ0xBU1NfVE9HR0xFLFxcclxcbiAgICB9LCAoIGNsYXNzTmFtZSwga2V5ICkgPT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBlbGVtZW50c1sga2V5IF0gPSBmaW5kKCBgLiR7IGNsYXNzTmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgfWAgKTtcXHJcXG4gICAgfSApO1xcclxcblxcclxcbiAgICBhc3NpZ24oIGVsZW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cywgeyByb290LCB0cmFjaywgbGlzdCwgc2xpZGVzIH0gKTtcXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpemVzIGVzc2VudGlhbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlbWVudHMuXFxyXFxuICAgKiBOb3RlIHRoYXQgZG8gbm90IGNoYW5nZSB0aGUgcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGUgb2YgdGhlIHJvb3QgZWxlbWVudCxcXHJcXG4gICAqIHdoaWNoIHJlbW92ZXMgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSByZWdpb24gZnJvbSB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlkICAgPSByb290LmlkIHx8IHVuaXF1ZUlkKCBQUk9KRUNUX0NPREUgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNvbnN0IHJvbGUgPSBvcHRpb25zLnJvbGU7XFxyXFxuXFxyXFxuICAgIHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290LmlkICA9IGlkO1xcclxcbiAgICB0cmFjay5pZCA9IHRyYWNrLmlkIHx8IGAkeyBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QgfS10cmFja2A7XFxyXFxuICAgIGxpc3QuaWQgID0gbGlzdC5pZCB8fCBgJHsgaWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30tbGlzdGA7XFxyXFxuXFxyXFxuICAgIGlmICggISBnZXRBdHRyaWJ1dGUoIHJvbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0LCBST0xFICkgJiYgcm9vdC50YWdOYW1lICE9PSAnU0VDVElPTicgJiYgcm9sZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCByb290LCBST0xFLCByb2xlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHNldEF0dHJpYnV0ZSggcm9vdCwgQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSSUFfUk9MRURFU0NSSVBUSU9OLCBpMThuLmNhcm91c2VsICk7XFxyXFxuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBdHRyaWJ1dGUoIGxpc3QsIFJPTEUsICdwcmVzZW50YXRpb24nICk7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBGaW5kcyBhbiBlbGVtZW50IG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x5IGluIHRoaXMgc2xpZGVyLCBpZ25vcmluZyBlbGVtZW50cyBpbiBhIG5lc3RlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBmb3VuZCBlbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudCBvciBudWxsLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBmaW5kKCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0b3I6IHN0cmluZyApOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjb25zdCBlbG0gPSBxdWVyeTxIVE1MRWxlbWVudD4oIHJvb3QsIHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciApO1xcclxcbiAgICByZXR1cm4gZWxtICYmIGNsb3Nlc3QoIGVsbSwgYC4keyBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfUk9PVCB9YCApID09PSByb290ID8gZWxtIDogdW5kZWZpbmVkO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJuIGFuIGFycmF5IHdpdGggbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGlmaWVyIGNsYXNzZXMuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGJhc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gQSBiYXNlIGNsYXNzIG5hbWUuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gQW4gYXJyYXkgd2l0aCBjbGFzc2VzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZ2V0Q2xhc3NlcyggYmFzZTogc3RyaW5nICk6IHN0cmluZ1tdIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBbXFxyXFxuICAgICAgYCR7IGJhc2UgfS0tJHsgb3B0aW9ucy50eXBlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9YCxcXHJcXG4gICAgICBgJHsgYmFzZSB9LS0keyBvcHRpb25zLmRpcmVjdGlvbiB9YCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgICAgb3B0aW9ucy5kcmFnICYmIGAkeyBiYXNlIH0tLWRyYWdnYWJsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgLFxcclxcbiAgICAgIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmIGAkeyBiYXNlIH0tLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYXZgLFxcclxcbiAgICAgIGJhc2UgPT09IENMQVNTX1JPT1QgJiYgQ0xBU1NfQUNUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWRSxcXHJcXG4gICAgXTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiBhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWduKCBlbGVtZW50cywge1xcclxcbiAgICBzZXR1cCxcXHJcXG4gICAgbW91bnQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBkZXN0cm95LFxcclxcbiAgfSApO1xcclxcbn1cXHJcXG4iLCJpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uLy4uL3R5cGUvdHlwZSc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJtcG9ydCB7IG1hdGNoZXMgfSBmcm9tICcuLi9tYXRjaGVzL21hdGNoZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBTdGFydHMgZnJvbSB0aGUgcHJvdmlkZWQgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQsIHNlYXJjaGVzIGZvciB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGVzIHRoZSBzZWxlY3RvciBpbiBhc2NlbmRhbnRzLlxcclxcbiAqXFxyXFxuICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0BwYXJhbSBmcm9tICAgICAtIEFuIGVsZW1lbnQgdG8gc2VhcmNoIGZyb20uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IuXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHJldHVybiBUaGUgZm91bmQgZWxlbWVudCBpZiBhdmFpbGFibGUsIG9yIGBudWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGAuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIGNsb3Nlc3QoIGZyb206JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBIVE1MRWxlbWVudCwgc2VsZWN0b3I6IHN0cmluZyApOiBIVE1MRWxlbWVudCB8ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudWxsIHtcXHJcXG4gIGlmICggaXNGdW5jdGlvbiggZnJvbS5jbG9zZXN0ICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICByZXR1cm4gZnJvbS5jbG9zZXN0KCBzZWxlY3RvciApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIGxldCBlbG06IEhUTUxFbGVtZW50IHwgbnVsbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBmcm9tO1xcclxcblxcclxcbiAgd2hpbGUgKCBlbG0gJiYgZWxtLm5vZGVUeXBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9PT0gMSApIHtcXHJcXG4gICAgaWYgKCBtYXRjaGVzKCBlbG0sIHNlbGVjdG9yICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIGJyZWFrO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbG0gPSBlbG0ucGFyZW50RWxlbWVudDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gZWxtO1xcclxcbn0iLCJpbXBvcnQgeyBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJTSVpFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSc7XFxyXFxuaW1wb3J0IHsgQW55RnVuY3Rpb24sIEJhc2VDb21wb25lbnQsIENvbXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xcclxcbiAgYWRkQ2xhc3MsXFxyXFxuICBhcHBlbmQsXFxyXFxuICBhcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICBiZWZvcmUsXFxyXFxuICBiZXR3ZWVuLFxcclxcbiAgZW1wdHksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZm9yRWFjaCBhcyBmb3JFYWNoSXRlbSxcXHJcXG4gIGluY2x1ZGVzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGlzRnVuY3Rpb24sXFxyXFxuICBpc0hUTUxFbGVtZW50LFxcclxcbiAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzU3RyaW5nLFxcclxcbiAgbWF0Y2hlcyxcXHJcXG4gIHBhcnNlSHRtbCxcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidxdWVyeUFsbCxcXHJcXG4gIHJlbW92ZSBhcyByZW1vdmVOb2RlLFxcclxcbiAgdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQXJyYXksXFxyXFxufSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNsaWRlLCBTbGlkZUNvbXBvbmVudCB9IGZyb20gJy4vU2xpZGUnO1xcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGludGVyZmFjZSBTbGlkZXNDb21wb25lbnQgZXh0ZW5kcyBCYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUNvbXBvbmVudCB7XFxyXFxuICB1cGRhdGUoKTogdm9pZDtcXHJcXG4gIHJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rlciggc2xpZGU6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyLCBzbGlkZUluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleDogbnVtYmVyICk6IHZvaWQ7XFxyXFxuICBnZXQoIGV4Y2x1ZGVDbG9uZXM/OiBibycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGVhbiApOiBTbGlkZUNvbXBvbmVudFtdO1xcclxcbiAgZ2V0SW4oIHBhZ2U6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgKTogU2xpZGVDb21wb25lbnRbXTtcXHJcXG4gIGdldEF0KCBpbmRleDogbnVtYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlciApOiBTbGlkZUNvbXBvbmVudCB8IHVuZGVmaW5lZDtcXHJcXG4gIGFkZCggc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlOiBzdHJpbmcgfCBFbGVtZW50IHwgQXJyYXk8c3RyaW5nIHwgRWxlbWVudD4sIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleD86IG51bWJlciApOiB2b2lkO1xcclxcbiAgcmVtb3ZlKCBzZWxlY3RvcjogU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlTWF0Y2hlciApOiB2b2lkO1xcclxcbiAgZm9yRWFjaCggaXRlcmF0ZWU6IFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNJdGVyYXRlZSwgZXhjbHVkZUNsb25lcz86IGJvb2xlYW4gKTogdm9pZDtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmaWx0ZXIoIG1hdGNoZXI6IFNsaWRlTWF0Y2hlciApOiBTbGlkZUNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RbXTtcXHJcXG4gIHN0eWxlKCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyLCB1c2VDb250YWluZXI/OiBib29sZWFuICk6IHZvaWRcXHJcXG4gIGdldExlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25ndGgoIGV4Y2x1ZGVDbG9uZXM/OiBib29sZWFuICk6IG51bWJlcjtcXHJcXG4gIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Vub3VnaCgpOiBib29sZWFuO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGl0ZXJhdGVlIGZ1bmN0aW9uIGZvciBTbGlkZXMuXFxyXFxuICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IHR5cGUgU2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0l0ZXJhdGVlID0gKCBTbGlkZTogU2xpZGVDb21wb25lbnQsIGluZGV4OiBudW1iZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyLCBTbGlkZXM6IFNsaWRlQ29tcG9uZW50W10gKSA9PiB2b2lkXFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi8qKlxcclxcbiAqIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gZm9yIFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IHR5cGUgU2xpZGVzUHJlZGljYXRlID0gKCBTbGlkZTogU2xpZGVDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250LCBpbmRleDogbnVtYmVyLCBTbGlkZXM6IFNsaWRlQ29tcG9uZW50W10gKSA9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYW55XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIGZpbHRlcmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU2xpZGVDb21wb25lbnQgb2JqZWN0cy5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgdHlwZSBTbGlkZU1hdGNoZXIgPSBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyIHwgbnVtYmVyW10gfCBzdHJpbmcgfCBTbGlkZXNQcmVkaWNhdGU7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGFsbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2xpZGVzIGluY2x1ZGUgY2xvbmVzLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gU2xpZGVzIGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBTbGlkZXMoIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbnMgKTogU2xpZGVzQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgb24sIGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0LCBiaW5kIH0gPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgeyBzbGlkZXMsIGxpc3QgfSA9IENvbXBvbmVudHMuRWxlbWVudHM7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIFNsaWRlQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvYmplY3RzLlxcclxcbiAgICovXFxyXFxuICBjb25zdCBTbGlkZXM6IFNsaWRlQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudFtdID0gW107XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgaW5pdCgpO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgb24oIEVWRU5UX1JFRlJFU0gsIGRlc3Ryb3kgKTtcXHJcXG4gICAgb24oIEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9SRUZSRVNILCBpbml0ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgc2xpZGVzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoKCAoIHNsaWRlLCBpbmRleCApID0+IHsgcmVnaXN0ZXIoIHNsaWRlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXgsIC0xICkgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIFNsaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PiB7IFNsaWRlLmRlc3Ryb3koKSB9ICk7XFxyXFxuICAgIGVtcHR5KCBTbGlkZXMgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIE1hbnVhbGx5IHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGVzIHRoZSBzdGF0dXMgb2YgYWxsIHNsaWRlcy5cXHJcXG4gICAqL1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaCggU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlID0+IHsgU2xpZGUudXBkYXRlKCkgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogUmVnaXN0ZXJzIGEgc2xpZGUgZWxlbWVudCBhbmQgY3JlYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgYSBTbGlkZSBvYmplY3QuXFxyXFxuICAgKiBOZWVkcyB0byBzb3J0IGV2ZXJ5IHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21lIHdoZW4gYSBuZXcgc2xpZGUgaXMgcmVnaXN0ZXJlZCBlc3BlY2lhbGx5IGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBzbGlkZSAgICAgIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEEgc2xpZGUgZWxlbWVudCB0byByZWdpc3Rlci5cXHJcXG4gICAqIEBwYXJhbSBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggICAgICAtIEEgc2xpZGUgaW5kZXguXFxyXFxuICAgKiBAcGFyYW0gc2xpZGVJbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggLSBBIHNsaWRlIGluZGV4IGZvciBjbG9uZXMuIFRoaXMgbXVzdCBiZSBgLTFgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgcmVndWxhciBzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWdpc3Rlciggc2xpZGU6IEhUTUxFbGVtZW50LCBpbmRleDogbnVtYmVyLCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVJbmRleDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBvYmplY3QgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2xpZGUoIFNwbGlkZSwgaW5kZXgsIHNsaWRlSW5kZXgsIHNsaWRlICk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBvYmplY3QubW91bnQoKTtcXHJcXG4gICAgU2xpZGVzLnB1c2goIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgU2xpZGVzLnNvcnQoICggU2xpZGUxLCBTbGlkZTIgKSA9PiBTbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUxLmluZGV4IC0gU2xpZGUyLmluZGV4ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBSZXR1cm5zIGFsbCBTbGlkZSBvYmplY3RzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gZXhjbHVkZUNsb25lcyAtIE9wdGlvbmFsLiBEZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJtaW5lcyB3aGV0aGVyIHRvIGV4Y2x1ZGUgY2xvbmVzIG9yIG5vdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHJldHVybiBBbiBhcnJheSB3aXRoIFNsaWRlIG9iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXQoIGV4Y2x1ZGVDbG9uZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPzogYm9vbGVhbiApOiBTbGlkZUNvbXBvbmVudFtdIHtcXHJcXG4gICAgcmV0dXJuIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneGNsdWRlQ2xvbmVzID8gZmlsdGVyKCBTbGlkZSA9PiAhIFNsaWRlLmlzQ2xvbmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgOiBTbGlkZXM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSZXR1cm5zIHNsaWRlcyBpbiB0aGUgc3BlY2lmaWVkIHBhZ2UuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBwYXJhbSBwYWdlIC0gQSBwYWdlIGluZGV4LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcmV0dXJuIEFuIGFycmF5IHdpdGggc2xpZGVzIHRoYXQgYmVsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyB0byB0aGUgcGFnZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0SW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBwYWdlOiBudW1iZXIgKTogU2xpZGVDb21wb25lbnRbXSB7XFxyXFxuICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB7IENvbnRyb2xsZXIgfSA9IENvbXBvbmVudHM7XFxyXFxuICAgIGNvbnN0IGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCA9IENvbnRyb2xsZXIudG9JbmRleCggcGFnZSApO1xcclxcbiAgICBjb25zdCBtYXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgPSBDb250cm9sbGVyLmhhc0ZvY3VzKCkgPyAxIDogb3B0aW9ucy5wZXJQYWdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgcmV0dXJuIGZpbHRlciggU2xpZGUgPT4gYmV0d2VlbiggU2xpZGUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4LCBpbmRleCwgaW5kZXggKyBtYXggLSAxICkgKTtcXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgYSBTbGlkZSBvYmplY3QgYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBzcGVjaWZpZWQgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCAtIEEgc2xpZGUgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gQSBTbGlkZSBvYmplY3QgaWYgYXZhaWxhYmxlLCBvciBvdGhlcndpc2UgYHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlZmluZWRgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRBdCggaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4OiBudW1iZXIgKTogU2xpZGVDb21wb25lbnQgfCB1bmRlZmluZWQge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIGZpbHRlciggaW5kZXggKVsgMCBdO1xcclxcbiAgfVxcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogSW5zZXJ0cyBhIHNsaWRlIG9yIHNsaWRlcyBhdCBhIHNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjaWZpZWQgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGl0ZW1zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIEEgc2xpZGUgZWxlbWVudCwgYW4gSFRNTCBzdHJpbmcgb3IgYW4gYXJyYXkgd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGggdGhlbS5cXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIE9wdGlvbmFsLiBBbiBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggdG8gaW5zZXJ0IHRoZSBzbGlkZSBhdC4gSWYgb21pdHRlZCwgYXBwZW5kcyBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgdG8gdGhlIGxpc3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGFkZCggaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZW1zOiBzdHJpbmcgfCBFbGVtZW50IHwgQXJyYXk8c3RyaW5nIHwgRWxlbWVudD4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBpbmRleD86IG51bWJlciApOiB2b2lkIHtcXHJcXG4gICAgZm9yRWFjaEl0ZW0oIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVtcywgc2xpZGUgPT4ge1xcclxcbiAgICAgIGlmICggaXNTdHJpbmcoIHNsaWRlICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkge1xcclxcbiAgICAgICAgc2xpZGUgPSBwYXJzZUh0bWwoIHNsaWRlICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIH1cXHJcXG5cXHJcXG4gICAgICBpZiAoIGlzSFRNTEVsZW1lbnQoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZSApICkge1xcclxcbiAgICAgICAgY29uc3QgcmVmID0gc2xpZGVzWyBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgXTtcXHJcXG4gICAgICAgIHJlZiA/IGJlZm9yZSggc2xpZGUsIHJlZiApIDogYXBwZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCggbGlzdCwgc2xpZGUgKTtcXHJcXG4gICAgICAgIGFkZENsYXNzKCBzbGlkZSwgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMuY2xhc3Nlcy5zbGlkZSApO1xcclxcbiAgICAgICAgb2JzZXJ2ZUltYWdlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHNsaWRlLCBhcHBseSggZW1pdCwgRVZFTlRfUkVTSVpFICkgKTtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcbiAgICB9ICk7XFxyXFxuXFxyXFxuICAgIGVtaXQoIEVWRU5UX1JFRlJFUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidIICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlbW92ZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlcyB0aGF0IG1hdGNoIHRoZSBtYXRjaGVyXFxyXFxuICAgKiB0aGF0IGNhbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmUgYW4gaW5kZXgsIGFuIGFycmF5IHdpdGggaW5kaWNlcywgYSBzZWxlY3RvciwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yIGFuIGl0ZXJhdGVlIGZ1bmN0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gbWF0Y2hlciAtIEFuIGluZGV4LCBhbiBhcnJheSB3aXRoIGluZGljZXMsIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yIHN0cmluZywgb3IgYW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiByZW1vdmUoIG1hdGNoZXI6IFNsaWRlTWF0Y2hlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTogdm9pZCB7XFxyXFxuICAgIHJlbW92ZU5vZGUoIGZpbHRlciggbWF0Y2hlciApLm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXAoIFNsaWRlID0+IFNsaWRlLnNsaWRlICkgKTtcXHJcXG4gICAgZW1pdCggRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1JFRlJFU0ggKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0l0ZXJhdGVzIG92ZXIgU2xpZGUgb2JqZWN0cyBieSB0aGUgaXRlcmF0ZWUgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBpdGVyYXRlZSAgICAgIC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEFuIGl0ZXJhdGVlIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBTbGlkZSBvYmplY3QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhbiBpbmRleCBhbmQgYW4gYXJyYXkgd2l0aCBTbGlkZXMuXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIGV4Y2x1ZGVDbG9uZXMgLSBPcHRpb25hbC4gRGV0ZXJtaW5lcyB3aGV0aGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBleGNsdWRlIGNsb25lcyBvciBub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBmb3JFYWNoKCBpdGVyYXRlZTogU2xpZGVzSXRlcmF0ZWUsIGV4Y2x1ZGVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xvbmVzPzogYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgZ2V0KCBleGNsdWRlQ2xvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lcyApLmZvckVhY2goIGl0ZXJhdGVlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyoqXFxyXFxuICAgKiBGaWx0ZXJzIFNsaWRlcyBieSB0aGUgbWF0Y2hlclxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIHRoYXQgY2FuIGJlIGFuIGluZGV4LCBhbiBhcnJheSB3aXRoIGluZGljZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhIHNlbGVjdG9yLCBvciBhIHByZWRpY2F0ZSBmdW5jdGlvbi5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIG1hdGNoZXIgLSBBbiBpbmRleCwgYW4gYXJyYXkgdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGggaW5kaWNlcywgYSBzZWxlY3RvciBzdHJpbmcsIG9yIGEgcHJlZGljYXRlIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEFuIGFycmF5IHdpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoIFNsaWRlQ29tcG9uZW50IG9iamVjdHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBmaWx0ZXIoIG1hdGNoZXI6IFNsaWRlTWF0Y2hlciApOiBTbGlkZUNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRbXSB7XFxyXFxuICAgIHJldHVybiBTbGlkZXMuZmlsdGVyKCBpc0Z1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiggbWF0Y2hlciApXFxyXFxuICAgICAgPyBtYXRjaGVyXFxyXFxuICAgICAgOiBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUgPT4gaXNTdHJpbmcoIG1hdGNoZXIgKVxcclxcbiAgICAgICAgPyBtYXRjaGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggU2xpZGUuc2xpZGUsIG1hdGNoZXIgKVxcclxcbiAgICAgICAgOiBpbmNsdWRlcyggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvQXJyYXkoIG1hdGNoZXIgKSwgU2xpZGUuaW5kZXggKVxcclxcbiAgICApO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQWRkcyBhIENTUyByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsZSB0byBhbGwgc2xpZGVzIG9yIGNvbnRhaW5lcnMuXFxyXFxuICAgKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSBwcm9wICAgICAgICAgLSBBIHByb3BlcnR5IG5hbWUuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHBhcmFtIHZhbHVlICAgICAgICAtIEEgQ1NTIHZhbHVlIHRvIGFkZC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAcGFyYW0gdXNlQ29udGFpbmVyIC0gT3B0aW9uYWwuIERldGVybWluZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdoZXRoZXIgdG8gYXBwbHkgdGhlIHJ1bGUgdG8gdGhlIGNvbnRhaW5lciBvciBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzdHlsZSggcHJvcDogc3RyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZywgdmFsdWU6IHN0cmluZyB8IG51bWJlciwgdXNlQ29udGFpbmVyPzogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW4gKTogdm9pZCB7XFxyXFxuICAgIGZvckVhY2goIFNsaWRlID0+IHsgU2xpZGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlKCBwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmVyICkgfSApO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW52b2tlcyB0aGUgY2FsbGJhY2sgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdGVyIGFsbCBpbWFnZXMgaW4gdGhlIGVsZW1lbnQgYXJlIGxvYWRlZC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIGVsbSAgICAgIC0gQW4gZWxlbWVudCB0aGF0IG1heScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29udGFpbiBpbWFnZXMuXFxyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjayBmdW5jdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb2JzZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVJbWFnZXMoIGVsbTogRWxlbWVudCwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB2b2lkIHtcXHJcXG4gICAgY29uc3QgaW1hZ2VzID0gcXVlcnlBbGwoIGVsbSwgJ2ltIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImcnICk7XFxyXFxuICAgIGxldCB7IGxlbmd0aCB9ID0gaW1hZ2VzO1xcclxcblxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgaWYgKCBsZW5ndGggKSB7XFxyXFxuICAgICAgaW1hZ2VzLmZvckVhY2goIGltJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImcgPT4ge1xcclxcbiAgICAgICAgYmluZCggaW1nLCAnbG9hZCBlcnJvcicsICgpID0+IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgICAgIGlmICggISAtLWxlbmd0aCApIHtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgY2FsbGJhY2soKTtcXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH0gKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbGxiYWNrKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiBzbGlkZXMuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBleGNsdWRlQ2xvbmVzIC0gT3B0aW9uYWwuIERldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcm1pbmVzIHdoZXRoZXIgdG8gZXhjbHVkZSBjbG9uZXMgb3Igbm90LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBsZW5ndGggb2Ygc2xpZGVzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0TGVuZ3RoKCBleGNsdWRlQ2xvbmVzPzogYm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGV4Y2x1ZGVDbG9uZXMgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVzLmxlbmd0aCA6IFNsaWRlcy5sZW5ndGg7XFxyXFxuICB9XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlIG51bWJlciBvZiBzbGlkZXMgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG92ZXIgdGhhbiB0aGUgYHBlclBhZ2VgIG9wdGlvbiwgaW5jbHVkaW5nIGNsb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlcmUgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZSBlbm91Z2ggc2xpZGVzLCBvciBvdGhlcndpc2UgYGZhbHNlYC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGlzRW5vdWdoKCk6IGJvb2xlYW4ge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIFNsaWRlcy5sZW5ndGggPiBvcHRpb25zLnBlclBhZ2U7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBkZXN0cm95LFxcclxcbiAgICB1cGRhdGUsXFxyXFxuICAgIHJlZ2lzdGVyLFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgZ2V0LFxcclxcbiAgICBnZXRJbixcXHJcXG4gICAgZ2V0QXQsXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBhZGQsXFxyXFxuICAgIHJlbW92ZSxcXHJcXG4gICAgZm9yRWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXFxyXFxuICAgIGZpbHRlcixcXHJcXG4gICAgc3R5bGUsXFxyXFxuICAgIGdldExlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidndGgsXFxyXFxuICAgIGlzRW5vdWdoLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImltcG9ydCB7IFRUQiB9IGZyb20gXCcuLi8uLi9jb25zdGFudHMvZGlyZWN0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInO1xcclxcbmltcG9ydCB7IEVWRU5UX09WRVJGTE9XLCBFVkVOVF9SRUZSRVNILCBFViIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVTSVpFLCBFVkVOVF9SRVNJWkVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZmFjZSwgVGhyb3R0bGUgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhYnMsIGFwcGx5LCBhIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXJ0LCBpc09iamVjdCwgcmVjdCwgc3R5bGUsIHRvZ2dsZUNsYXNzLCB1bml0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ9IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQgeyBGQURFIH0gZnJvbSAnLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgQ0xBU1NfT1ZFUkZMTyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJXIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcblxcclxcblxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgTGF5b3V0IGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGludGVyZmFjZSBMYXlvdXRDb21wb25lbnQgZXh0ZW5kcyBCYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUNvbXBvbmVudCB7XFxyXFxuICBsaXN0U2l6ZSgpOiBudW1iZXI7XFxyXFxuICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVTaXplKCBpbmRleDogbnVtYmVyLCB3aXRob3V0R2FwPzogYm9vbGVhbiApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyO1xcclxcbiAgc2xpZGVyU2l6ZSggd2l0aG91dEdhcD86IGJvb2xlYW4gKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG51bWJlcjtcXHJcXG4gIHRvdGFsU2l6ZSggaW5kZXg/OiBudW1iZXIsIHdpdGhvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0R2FwPzogYm9vbGVhbiApOiBudW1iZXI7XFxyXFxuICBnZXRQYWRkaW5nKCByaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGJvb2xlYW4gKTogbnVtYmVyO1xcclxcbiAgaXNPdmVyZmxvdygpOiBib29sZWFuOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKiBAaW50ZXJuYWwgKi9cXHJcXG4gIHJlc2l6ZSggZm9yYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlPzogYm9vbGVhbiApOiB2b2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogVGhlIGNvbXBvbmVudCB0aGF0IGFkanVzdHMgc2xpZGVyIHN0eWxlcyBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3ZpZGVzIG1ldGhvZHMgZm9yIGRpbWVuc2lvbnMuXFxyXFxuICpcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBMYXlvdXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMYXlvdXQoIFNwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9uczogT3B0aW9ucyApOiBMYXlvdXRDb21wb25lbnQge1xcclxcbiAgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHsgb24sIGJpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjb25zdCB7IFNsaWRlcyB9ID0gQ29tcG9uZW50cztcXHJcXG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCB7IHJlc29sdmUgfSA9IENvbXBvbmVudHMuRGlyZWN0aW9uO1xcclxcbiAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHsgcm9vdCwgdHJhY2ssIGxpc3QgfSA9IENvbXBvbmVudHMuRWxlbWVudHM7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgY29uc3QgeyBnZXRBdCwgc3R5bGU6IHN0eWxlU2xpZGVzIH0gPSBTbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlciBkaXJlY3Rpb24gaXMgdmVydGljYWwgb3Igbm90LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgbGV0IHZlcnRpY2FsOiBib29sZWFuO1xcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogS2VlcHMgdGhlIERPTVJlY3Qgb2JqZWN0IG9mIHRoZSByb290JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbGVtZW50LlxcclxcbiAgICovXFxyXFxuICBsZXQgcm9vdFJlY3Q6IERPTVJlYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUdXJucyBpbnRvIGB0cnVlYCB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbiB0aGUgY2Fyb3VzZWwgaXMgd2lkZXIgdGhhbiB0aGUgbGlzdC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGxldCBvdmVyZmxvdzogYm9vbGVhbjtcXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4gICAgaW5pdCgpO1xcclxcbiAgICBiaW5kKCB3aW5kb3csICdyZXNpemUgbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvYWQnLCBUaHJvdHRsZSggYXBwbHkoIGVtaXQsIEVWRU5UX1JFU0laRSApICkgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIG9uKCBbIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0ggXSwgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQgKTtcXHJcXG4gICAgb24oIEVWRU5UX1JFU0laRSwgcmVzaXplICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudCBvbiBgbW91bnRgIG9yIGB1cGRhdGVkYC5cXHJcXG4gICAqIFVzZXMgYG1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gtd2lkdGhgIGZvciB0aGUgcm9vdCB0byBwcmV2ZW50IHRoZSBzbGlkZXIgZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXhjZWVkaW5nIHRoZSBwYXJlbnQgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGluaXQoKTogdm9pZCB7XFxyXFxuICAgIHZlcnRpY2FsID0gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uID09PSBUVEI7XFxyXFxuXFxyXFxuICAgIHN0eWxlKCByb290JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgJ21heFdpZHRoJywgdW5pdCggb3B0aW9ucy53aWR0aCApICk7XFxyXFxuICAgIHN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInlsZSggdHJhY2ssIHJlc29sdmUoICdwYWRkaW5nTGVmdCcgKSwgY3NzUGFkZGluZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIoIGZhbHNlICkgKTtcXHJcXG4gICAgc3R5bGUoIHRyYWNrLCByZXNvbHZlKCAncGFkZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpbmdSaWdodCcgKSwgY3NzUGFkZGluZyggdHJ1ZSApICk7XFxyXFxuXFxyXFxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXNpemUoIHRydWUgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIFVwZGF0ZXMgZGltZW5zaW9ucyBvZiBzb21lIGVsZW1lbnRzIHdoZW4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBjYXJvdXNlbCBpcyByZXNpemVkLlxcclxcbiAgICogQWxzbyBjaGVja3MgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYXJvdXNlbCBzaXplIGFuZCBlbWl0cyBgb3ZlcmZsb3dgIGV2ZW50cyB3aGVuIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBleGNlZWRzIHRoZSBsaXN0IHdpZHRoLlxcclxcbiAgICpcXHJcXG4gICAqIEBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyYW0gZm9yY2UgLSBTa2lwcyBjaGVja2luZyB0aGUgcm9vdCBkaW1lbnNpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoYW5nZSBhbmQgYWx3YXlzIHBlcmZvcm1zIHRoZSByZXNpemluZyBwcm9jZXNzLlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVzaXplKCBmb3JjZT86IGJvb2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBuZXdSZWN0ID0gcmVjdCggcm9vdCApJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gICAgaWYgKCBmb3JjZSB8fCByb290UmVjdC53aWR0aCAhPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IG5ld1JlY3Qud2lkdGggfHwgcm9vdFJlY3QuaGVpZ2h0ICE9PSBuZXdSZWN0LmgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWlnaHQgKSB7XFxyXFxuICAgICAgc3R5bGUoIHRyYWNrLCAnaGVpZ2h0JywgY3NzVHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrSGVpZ2h0KCkgKTtcXHJcXG5cXHJcXG4gICAgICBzdHlsZVNsaWRlcyggcmVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9sdmUoICdtYXJnaW5SaWdodCcgKSwgdW5pdCggb3B0aW9ucy5nYXAgKSApO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm4gICAgICBzdHlsZVNsaWRlcyggJ3dpZHRoJywgY3NzU2xpZGVXaWR0aCgpICk7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbiAgICAgIHN0eWxlU2xpZGVzKCAnaGVpZ2h0JywgY3NzU2xpZGVIZWlnaHQoKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIHRydWUgKTtcXHJcXG5cXHJcXG4gICAgICByb290UmVjdCA9IG5ld1JlY3Q7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGVtaXQoIEVWRU5UX1JFU0laRUQgKTtcXHJcXG5cXHJcXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWYgKCBvdmVyZmxvdyAhPT0gKCBvdmVyZmxvdyA9IGlzT3ZlcmZsb3coKSApICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICAgIHRvZ2dsZUNsYXNzKCByb290LCBDTEFTU19PVkVSRkxPVywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ292ZXJmbG93ICk7XFxyXFxuICAgICAgICBlbWl0KCBFVkVOVF9PVkVSRkxPVywgb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JmbG93ICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBQYXJzZXMgdGhlIHBhZGRpbmcgb3B0aW9uIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQgcmV0dXJucyB0aGUgdmFsdWUgZm9yIGVhY2ggc2lkZS5cXHJcXG4gICAqIFRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1ldGhvZCByZXR1cm5zIGBwYWRkaW5nVG9wYCBvciBgcGFkZGluZ0JvdHRvbWAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciB0aGUgdmVydGljYWwgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYW0gcmlnaHQgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZ2V0IGBwYWRkaW5nUmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2h0L0JvdHRvbWAgb3IgYHBhZGRpbmdMZWZ0L1RvcGAuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEByZXR1cm4gVGhlIHBhZGRpbmcgdmFsdWUgYXMgYSBDU1Mgc3RyaW5nLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY3NzUGFkZGluZyggcmlnaHQ6IGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb29sZWFuICk6IHN0cmluZyB7XFxyXFxuICAgIGNvbnN0IHsgcGFkZGluZyB9ID0gb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidGlvbnM7XFxyXFxuICAgIGNvbnN0IHByb3AgPSByZXNvbHZlKCByaWdodCA/ICdyaWciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaHQnIDogJ2xlZnQnICk7XFxyXFxuICAgIHJldHVybiBwYWRkaW5nXFxyXFxuICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICYmIHVuaXQoIHBhZGRpbmdbIHByb3AgXSB8fCAoIGlzT2JqZWN0KCBwYWRkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuZyApID8gMCA6IHBhZGRpbmcgKSApXFxyXFxuICAgICAgfHwgJzBweCc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBoZWlnaHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9mIHRoZSB0cmFjayBlbGVtZW50IGFzIGEgQ1NTIHN0cmluZy5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHJldHVybiBUaGUgaGVpZ2h0IG9mIHRoZSB0cmFjay5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNzc1RyYWNrSGVpZ2h0KCk6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpbmcge1xcclxcbiAgICBsZXQgaGVpZ2h0ID0gJyc7XFxyXFxuXFxyXFxuICAgIGlmICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHZlcnRpY2FsICkge1xcclxcbiAgICAgIGhlaWdodCA9IGNzc0hlaWdodCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG4gICAgICBhc3NlcnQoIGhlaWdodCwgJ2hlaWdodCBvciBoZWlnaHRSYXRpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm8gaXMgbWlzc2luZy4nICk7XFxyXFxuICAgICAgaGVpZ2h0ID0gYGNhbGMoJHsgaGVpIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dodCB9IC0gJHsgY3NzUGFkZGluZyggZmFsc2UgKSB9IC0gJHsgY3NzUGFkZGluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIHRydWUgKSB9KWA7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIGhlaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQ7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnZlcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBvcHRpb25zIHJlbGF0ZWQgd2l0aCBoZWlnaHQgdG8gYSBDU1Mgc3RyaW5nLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBoZWlnaHQgYXMgYSBDU1MgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZyBpZiBhdmFpbGFibGUsIG9yIG90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjc3NIZWlnaHQoKTogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgIHJldHVybiB1bml0KCBvcHRpb25zLmhlaWdodCB8fCByZWN0KCBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdCApLndpZHRoICogb3B0aW9ucy5oZWlnaHRSYXRpbyApO1xcclxcbiAgfVxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgd2lkdGggb2YgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZSBhcyBhIENTUyBzdHJpbmcuXFxyXFxuICAgKlxcclxcbiAgICogQHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gVGhlIHdpZHRoIG9mIHRoZSBzbGlkZS5cXHJcXG4gICAqL1xcclxcbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGNzc1NsaWRlV2lkdGgoKTogc3RyaW5nIHwgbnVsbCB7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGhcXHJcXG4gICAgICA/IG51bGxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgOiB1bml0KCBvcHRpb25zLmZpeGVkV2lkdGggKSB8fCAoIHZlcnRpY2FsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiA/ICcnIDogY3NzU2xpZGVTaXplKCkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgc2xpZGUgYXMgYSBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTIHN0cmluZy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBoZWlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IG9mIHRoZSBzbGlkZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY3NzU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlSGVpZ2h0KCk6IHN0cmluZyB8IG51bGwge1xcclxcbiAgICByZXR1cm4gdW5pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuZml4ZWRIZWlnaHQgKVxcclxcbiAgICAgIHx8ICggdmVydGljYWwgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBvcHRpb25zLmF1dG9IZWlnaHQgPyBudWxsIDogY3NzU2xpZGVTaXplKCkgKSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjc3NIZWlnaHQoKSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogUmV0dXJucyB0aGUgQ1NTIHN0cmluZyBmb3Igc2xpZGUgd2lkdGggb3IgaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCB3aXRob3V0IGdhcC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgQ1NTIHN0cmluZyBmb3Igc2xpZGUgd2lkdGggb3IgaGVpZ2h0LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuY3Rpb24gY3NzU2xpZGVTaXplKCk6IHN0cmluZyB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjb25zdCBnYXAgPSB1bml0KCBvcHRpb25zLmdhcCApO1xcclxcbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGBjYWxjKCgxMDAlJHsgZ2FwICYmIGAgKyAkeyBnYXAgfWAgfSkvJHsgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMucGVyUGFnZSB8fCAxIH0keyBnYXAgJiYgYCAtICR7IGdhcCB9YCB9KWA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBsaXN0IHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWR0aCBmb3IgdGhlIGhvcml6b250YWwgc2xpZGVyLCBvciB0aGUgaGVpZ2h0IGZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdGhlIHZlcnRpY2FsIHNsaWRlci5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBUaGUgc2l6ZSBvZiB0aGUgbGlzdCBlbGVtZW50IGluIHBpeGVsLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gbGlzdFNpemUoKTogbnVtYmVyIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHJldHVybiByZWN0KCBsaXN0IClbIHJlc29sdmUoICd3aWR0aCcgKSBdO1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgc2xpZGUgd2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHRoIGZvciB0aGUgaG9yaXpvbnRhbCBzbGlkZXIsIG9yIHRoZSBoZWlnaHQgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgdmVydGljYWwgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXggICAgICAtIE9wdGlvbmFsLiBBIHNsaWRlIGluZGV4LlxcclxcbiAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSB3aXRob3V0R2FwIC0gT3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG8gZXhjbHVkZSB0aGUgZ2FwIGFtb3VudCBvciBub3QuXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEByZXR1cm4gVGhlIHNpemUgb2YgdGhlIHNwZWNpZmllZCBzbGlkZSBlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudCBpbiBwaXhlbC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU2l6ZSggaW5kZXg/OiBudW1iZXIsIHdpdGhvdXRHYXA/OiBib29sZWFuICk6IG51JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21iZXIge1xcclxcbiAgICBjb25zdCBTbGlkZSA9IGdldEF0KCBpbmRleCB8fCAwICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gU2xpZGVcXHJcXG4gICAgICA/IHJlY3QoIFNsaWRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzbGlkZSApWyByZXNvbHZlKCAnd2lkdGgnICkgXSArICggd2l0aG91dEdhcCA/IDAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogZ2V0R2FwKCkgKVxcclxcbiAgICAgIDogMDtcXHJcXG4gIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIHRvdGFsIHdpZHRoIG9yIGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQgb2Ygc2xpZGVzIGZyb20gdGhlIGhlYWQgb2YgdGhlIHNsaWRlciB0byB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIHNwZWNpZmllZCBpbmRleC5cXHJcXG4gICAqIFRoaXMgaW5jbHVkZXMgc2l6ZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29mIGNsb25lcyBiZWZvcmUgdGhlIGZpcnN0IHNsaWRlLlxcclxcbiAgICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBAcGFyYW0gaW5kZXggICAgICAtIEEgc2xpZGUgaW5kZXguIElmIG9taXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVkLCB1c2VzIHRoZSBsYXN0IGluZGV4LlxcclxcbiAgICogQHBhcmFtIHdpdGhvdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR2FwIC0gT3B0aW9uYWwuIERldGVybWluZXMgd2hldGhlciB0byBleGNsdWRlIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgbGFzdCBnYXAgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB0b3RhbCB3aWR0aCBvZiBzbGlkZXMgaW4gdGhlIGhvcml6b250YWwgc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciwgb3IgdGhlIGhlaWdodCBpbiB0aGUgdmVydGljYWwgb25lLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgZnVuY3Rpb24gdG90YWxTaXplKCBpbmRleDogbnVtYmVyLCB3aXRobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dEdhcD86IGJvb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4gICAgY29uc3QgU2xpZGUgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0QXQoIGluZGV4ICk7XFxyXFxuXFxyXFxuICAgIGlmICggU2xpZGUgKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGNvbnN0IHJpZ2h0ID0gcmVjdCggU2xpZGUuc2xpZGUgKVsgcmVzb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidmUoICdyaWdodCcgKSBdO1xcclxcbiAgICAgIGNvbnN0IGxlZnQgID0gcmVjdCggbGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3QgKVsgcmVzb2x2ZSggJ2xlZnQnICkgXTtcXHJcXG4gICAgICByZXR1cm4gYWJzKCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlnaHQgLSBsZWZ0ICkgKyAoIHdpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCkgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIDA7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBzbGlkZXIgc2l6ZSB3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aG91dCBjbG9uZXMgYmVmb3JlIHRoZSBmaXJzdCBzbGlkZS5cXHJcXG4gICAqIERvICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJub3QgdXNlIHRoZSBjbG9uZSdzIHNpemUgYmVjYXVzZSBpdCdzIHVuc3RhYmxlIHciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlsZSBpbml0aWFsaXppbmcgYW5kIHJlZnJlc2hpbmcgcHJvY2Vzcy5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQHBhcmFtIHdpdGhvdXRHYXAgLSBPcHRpb25hbC4gRGV0ZXJtaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgd2hldGhlciB0byBleGNsdWRlIHRoZSBsYXN0IGdhcCBvciBub3QuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIHdpZHRoIG9yIGhlaWdodCBvZiB0aGUgc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlciB3aXRob3V0IGNsb25lcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlclNpemUoIHdpdGhvdXRHYXA/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gdG90YWxTaXplKCBTcGxpZGUubGVuZ3RoIC0gMSApIC0gdG90YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsU2l6ZSggMCApICsgc2xpZGVTaXplKCAwLCB3aXRob3V0R2FwICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBnYXAgdmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlIGluIHBpeGVsIGJ5IHVzaW5nIHRoZSBjb21wdXRlZCBzdHlsZSBvZiB0aGUgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcnN0IHNsaWRlLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIGdhcCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUgaW4gcGl4ZWwuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldEdhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3AoKTogbnVtYmVyIHtcXHJcXG4gICAgY29uc3QgU2xpZGUgPSBnZXRBdCggMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcXHJcXG4gICAgcmV0dXJuIFNsaWRlICYmIHBhcnNlRmxvYXQoIHN0eWxlKCBTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZGUuc2xpZGUsIHJlc29sdmUoICdtYXJnaW5SaWdodCcgKSApICkgfHwgMDtcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIHBhZGRpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhbHVlLlxcclxcbiAgICogVGhpcyBtZXRob2QgcmVzb2x2ZXMgdGhlIGRpZmZlcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIG9mIHRoZSBkaXJlY3Rpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByaWdodCAtIERldGVybWluZXMgd2hldGhlciB0byBnZXQgYHBhZGRpbmdSaWdodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvQm90dG9tYCBvciBgcGFkZGluZ0xlZnQvVG9wYC5cXHJcXG4gICAqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHJldHVybiBUaGUgcGFkZGluZyB2YWx1ZSBpbiBwaXhlbC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldFBhZGRpbmcoIHJpZ2h0OiBib29sZWFuICk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIge1xcclxcbiAgICByZXR1cm4gcGFyc2VGbG9hdCggc3R5bGUoIHRyYWNrLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgcmVzb2x2ZSggYHBhZGRpbmckeyByaWdodCA/ICdSaWdodCcgOiAnTGVmdCcgfWAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkgKSApIHx8IDA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDaGVja3MgaWYgdGhlIGNhcm91c2VsIGlzIHdpZGVyIHRoYW4gdGhlIGxpc3QuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICogVGhpcyBtZXRob2QgYWx3YXlzIHJldHVybnMgYHRydWVgIGZvciBhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWRlIGNhcm91c2VsLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGUgY2Fyb3VzZWwgaXMgd2lkZXIgdGhhbiB0aGUgbGlzdCwgb3Igb3RoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vyd2lzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc092ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmxvdygpOiBib29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIFNwbGlkZS5pcyggRkFERScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSB8fCBzbGlkZXJTaXplKCB0cnVlICkgPiBsaXN0U2l6ZSgpO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVzaXplLFxcclxcbiAgICBsaXN0U2l6ZSxcXHJcXG4gICAgc2xpZGVTaXplLFxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgc2xpZGVyU2l6ZSxcXHJcXG4gICAgdG90YWxTaXplLFxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0UGFkZGluZyxcXHJcXG4gICAgaXNPdmVyZmxvdyxcXHJcXG4gIH07XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbn1cXHJcXG4iLCJpbXBvcnQgeyBBbnlGdW5jdGlvbiB9IGZyb20gXCcuLi8uLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvdHlwZXMnO1xcclxcbmltcG9ydCB7IFJlcXVlc3RJbnRlcnZhbCB9IGZyb20gJy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJSZXF1ZXN0SW50ZXJ2YWwvUmVxdWVzdEludGVydmFsJztcXHJcXG5cXHJcXG5cXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdGhlIHJldHVybmluZyB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2YgdGhlIFJlcXVlc3RJbnRlcnZhbC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIFRocm90dGxlSW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhbmNlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4gZXh0ZW5kcyBGdW5jdGlvbiB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgKCAuLi5hcmdzOiBQYXJhbWV0ZXJzPEY+ICk6IHZvaWQ7XFxyXFxufVxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4vKipcXHJcXG4gKiBSZXR1cm5zIHRoZSB0aHJvdHRsZWQgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uLlxcclxcbiAqXFxyXFxuICogQHBhcmFtIGZ1bmMgICAgIC0gQSBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gdG8gdGhyb3R0bGUuXFxyXFxuICogQHBhcmFtIGR1cmF0aW9uIC0gT3B0aW9uYWwuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBUaHJvdHRsZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXFxyXFxuICpcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICogQHJldHVybiBBIHRocm90dGxlZCBmdW5jdGlvbi5cXHJcXG4gKi9cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0IGZ1bmN0aW9uIFRocm90dGxlPEYgZXh0ZW5kcyBBbnlGdW5jdGlvbj4oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuYzogRixcXHJcXG4gIGR1cmF0aW9uPzogbnVtYmVyXFxyXFxuKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Rocm90dGxlSW5zdGFuY2U8Rj4ge1xcclxcbiAgY29uc3QgaW50ZXJ2YWwgPSBSZXF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdEludGVydmFsKCBkdXJhdGlvbiB8fCAwLCBmdW5jLCBudWxsLCAxICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgcmV0dXJuICgpID0+IHtcXHJcXG4gICAgaW50ZXJ2YWwuaXNQYXVzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKCkgJiYgaW50ZXJ2YWwuc3RhcnQoKTtcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbXBvcnQgeyBFVkVOVF9SRUZSRVNILCBFVkVOVF9SRVNJWkUsIEVWRU5UX1VQREEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVEVEIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIExPT1AgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIieyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFkZENsYXNzLCBhIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BwZW5kLCBiZWZvcmUsIGNlaWwsIGVtcHR5LCBpc1VuZGVmaW5lZCwgcGFkLCBwdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzaCwgcmVjdCwgcmVtb3ZlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgQ2xvbmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIENsb25lc0NvbXBvbmVudCBleHRlbmRzIEInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNlQ29tcG9uZW50IHtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtdWx0aXBsaWVyIHRvIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGNsb25lcy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IE1VTFRJUExJRVIgPSAyO1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50IHRoYXQgZ2VuZXJhdGVzIGNsb25lcyBmb3IgdGhlIGxvb3Agc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcmV0dXJuIEEgQ2xvbmVzIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbmV4cG9ydCBmdW5jdGlvbiBDbG9uZXMoIFNwbGlkZTogU3BsaWRlLCBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW9ucyApOiBDbG9uZXNDb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50IHtcXHJcXG4gIGNvbnN0IGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUgKTtcXHJcXG4gIGNvbnN0IHsgb24gfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3sgRWxlbWVudHMsIFNsaWRlcyB9ID0gQ29tcG9uZW50cztcXHJcXG4gIGNvbnN0IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc29sdmUgfSA9IENvbXBvbmVudHMuRGlyZWN0aW9uO1xcclxcblxcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogU3RvcmVzIGFsbCBjbG9uZWQgZWxlbWVudHMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBjb25zdCBjbG9uZXM6IEhUTUxFbGVtZW50W10gPSBbXTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEtlZXBzIHRoZSBjdXJyZW50IG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb2YgY2xvbmVzLlxcclxcbiAgICovXFxyXFxuICBsZXQgY2xvbmVDb3VudDogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICAqIE5lZWRzIHRvIHJlbW91bnQgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBjb21wb25lbnQgb24gcmVmcmVzaCwgb3RoZXJ3aXNlIGByZWZyZXNoYCBldmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qgd2lsbCBiZSB0cmlnZ2VyZWQgYWdhaW4gd2hpbGUgcmVmcmVzaGluZy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xcclxcbiAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIEVWRU5UX1JFRlJFU0gsIHJlbW91bnQgKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQREFURUQsIEVWRU5UX1JFU0laRSBdLCBvYnNlcnZlICk7XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoICggY2xvbmVDb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50KCkgKSApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgZ2VuZXJhdGUoIGNsb25lQ291bnQgKTtcXHJcXG4gICAgICBDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50cy5MYXlvdXQucmVzaXplKCB0cnVlICk7XFxyXFxuICAgIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJlbW91bnRzIHRoZSBjb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiByZW1vdW50KCk6IHZvaWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgZGVzdHJveSgpO1xcclxcbiAgICBtb3VudCgpO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgY2xvbmVzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZGVzdHJveSgpOiB2b2lkIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIHJlbW92ZSggY2xvbmVzICk7XFxyXFxuICAgIGVtcHR5KCBjbG9uZXMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgIGV2ZW50LmRlc3Ryb3koKTtcXHJcXG4gIH1cXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIE9ic2VydmVzIHRoZSByZXF1aXJlZCBjbG9uZSBjb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYW5kIHJlZnJlc2hlcyB0aGUgc2xpZGVyIGlmIG5lY2Vzc2FyeS5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIG9ic2VydmUoKTogdm9pZCB7XFxyXFxuICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBjb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50KCk7XFxyXFxuXFxyXFxuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoIGNsb25lQ291bnQgIT09IGNvdW50ICkge1xcclxcbiAgICAgIGlmICggY2xvbmVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgPCBjb3VudCB8fCAhIGNvdW50ICkge1xcclxcbiAgICAgICAgZXZlbnQuZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIEVWRU5UX1JFRlJFU0ggKTtcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEdlbmVyYXRlcyB0aGUgc3BlY2lmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2llZCBudW1iZXIgb2YgY2xvbmVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY291bnQgLSBUaGUgbnVtYmVyIG9mIGNsb25lcyB0byBnZW5lcmF0ZSBmb3IgZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ggc2lkZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2VuZXJhdGUoIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VudDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBzbGlkZXMgPSBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmdldCgpLnNsaWNlKCk7XFxyXFxuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzO1xcclxcblxcclxcbiAgICBpZiAoIGxlbmd0aCApIHtcXHJcXG4gICAgICB3aGlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKCBzbGlkZXMubGVuZ3RoIDwgY291bnQgKSB7XFxyXFxuICAgICAgICBwdXNoKCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzLCBzbGlkZXMgKTtcXHJcXG4gICAgICB9XFxyXFxuXFxyXFxuICAgICAgcHVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2goIHNsaWRlcy5zbGljZSggLWNvdW50ICksIHNsaWRlcy5zbGljZSggMCwgY291bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ICkgKS5mb3JFYWNoKCAoIFNsaWRlLCBpbmRleCApID0+IHtcXHJcXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBpc0hlYWQgPSBpbmRleCA8IGNvdW50O1xcclxcbiAgICAgICAgY29uc3QgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lICA9IGNsb25lRGVlcCggU2xpZGUuc2xpZGUsIGluZGV4ICk7XFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaXNIZWFkID8gYmVmb3JlKCBjbG9uZSwgc2xpZGVzWyAwIF0uc2xpZGUgKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBhcHBlbmQoIEVsZW1lbnRzLmxpc3QsIGNsb25lICk7XFxyXFxuICAgICAgICBwdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCggY2xvbmVzLCBjbG9uZSApO1xcclxcbiAgICAgICAgU2xpZGVzLnJlZ2lzdGVyKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xvbmUsIGluZGV4IC0gY291bnQgKyAoIGlzSGVhZCA/IDAgOiBsZW5ndGggKSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlLmluZGV4ICk7XFxyXFxuICAgICAgfSApO1xcclxcbiAgICB9XFxyXFxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBEZWVwbHkgY2xvbmVzIHRoZSBwcm92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZWQgZWxlbWVudCB3aXRoIHJlbW92aW5nIHRoZSBJRCBhdHRyaWJ1dGUuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEBwYXJhbSBlbG0gICAtIEFuIGVsZW1lbnQgdG8gY2xvbmUuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4gaW5kZXggb2YgdGhlIGNsb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgY2xvbmVkIGVsZW1lbnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjbG9uZURlZXAoIGVsbTogSFRNTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbGVtZW50LCBpbmRleDogbnVtYmVyICk6IEhUTUxFbGVtZW50IHtcXHJcXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IGNsb25lID0gZWxtLmNsb25lTm9kZSggdHJ1ZSApIGFzIEhUTUxFbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcXHJcXG4gICAgYWRkQ2xhc3MoIGNsb25lLCBvcHRpb25zLmNsYXNzZXMuY2xvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICAgIGNsb25lLmlkID0gYCR7IFNwbGlkZS5yb290LmlkIH0tY2xvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJHsgcGFkKCBpbmRleCArIDEgKSB9YDtcXHJcXG4gICAgcmV0dXJuIGNsb25lOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciBvZiBlbGVtZW50cyB0byBnZW5lcmF0ZS5cXHJcXG4gICAqIFRoaXMgYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIid2F5cyByZXR1cm5zIDAgaWYgdGhlIHNsaWRlciB0eXBlIGlzIG5vdCBgJ2xvb3AnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2AuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIGNsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCgpOiBudW1iZXIge1xcclxcbiAgICBsZXQgeyBjbG9uZXMgfSA9IG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xcclxcblxcclxcbiAgICBpZiAoICEgU3BsaWRlLmlzKCBMT09QICkgKSB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIGNsb25lcyA9IDA7XFxyXFxuICAgIH0gZWxzZSBpZiAoIGlzVW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VmaW5lZCggY2xvbmVzICkgKSB7XFxyXFxuICAgICAgY29uc3QgZml4ZWRTaXplICA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBvcHRpb25zWyByZXNvbHZlKCAnZml4ZWRXaWR0aCcgKSBdICYmIENvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLkxheW91dC5zbGlkZVNpemUoIDAgKTtcXHJcXG4gICAgICBjb25zdCBmaXhlZENvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9IGZpeGVkU2l6ZSAmJiBjZWlsKCByZWN0KCBFbGVtZW50cy50cmFjayApWyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmVzb2x2ZSggJ3dpZHRoJyApIF0gLyBmaXhlZFNpemUgKTtcXHJcXG4gICAgICBjbG8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibmVzID0gZml4ZWRDb3VudCB8fCAoIG9wdGlvbnNbIHJlc29sdmUoICdhdXRvV2lkIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRoJyApIF0gJiYgU3BsaWRlLmxlbmd0aCApIHx8IG9wdGlvbnMucGVyUGFnZSAqICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNVUxUSVBMSUVSO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiBjbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgICBkZXN0cm95LFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ydCB7XFxyXFxuICBFVkVOVF9NT1VOVEVELFxcclxcbiAgRVZFTlRfTU9WRSxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBFVkVOVF9NT1ZFRCxcXHJcXG4gIEVWRU5UX1JFRlJFU0gsXFxyXFxuICBFVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfUkVTSVpFRCxcXHJcXG4gIEVWRU5UX1NISUZURUQsXFxyXFxuICBFVkVOVF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVVBEQVRFRCxcXHJcXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG5pbXBvcnQgeyBJRExFLCBNT1ZJTkcgfSBmcm9tICcuLi8uLi9jb25zdGFudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzL3N0YXRlcyc7XFxyXFxuaW1wb3J0IHsgRkFERSwgTE9PUCwgU0xJREUgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29uc3RhbnRzL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgeyBBbnlGdW5jdGlvbiwgQmFzZUNvbXBvbmVudCwgQ29tcG9uZW50cywgT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibnMsIFRyYW5zaXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmltcG9ydCB7IGFicywgY2VpbCwgY2xhbXAsIGlzVW5kZWZpbmVkLCByZWN0LCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInR5bGUgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBNb3ZlIGNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IGludGVyZmFjZSBNb3ZlQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qge1xcclxcbiAgbW92ZSggZGVzdDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBwcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyLCBjYWxsYmFjaz86IEFueUZ1bmN0aW9uICk6IHZvaWQ7XFxyXFxuICBqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtcCggaW5kZXg6IG51bWJlciApOiB2b2lkO1xcclxcbiAgdHJhbnNsYXRlKCBwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb246IG51bWJlciwgcHJldmVudExvb3A/OiBib29sZWFuICk6IHZvaWQ7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgc2hpZnQoIHBvc2l0aW9uOiBudW1iZXIsIGJhY2t3YXJkczogYm9vbGVhbiApOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyO1xcclxcbiAgY2FuY2VsKCk6IHZvaWQ7XFxyXFxuICB0b0luZGV4KCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9zaXRpb246IG51bWJlciApOiBudW1iZXI7XFxyXFxuICB0b1Bvc2l0aW9uKCBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXg6IG51bWJlciwgdHJpbW1pbmc/OiBib29sZWFuICk6IG51bWJlcjtcXHJcXG4gIGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRQb3NpdGlvbigpOiBudW1iZXI7XFxyXFxuICBnZXRMaW1pdCggbWF4OiBib29sZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiApOiBudW1iZXI7XFxyXFxuICBleGNlZWRlZExpbWl0KCBtYXg/OiBib29sZWFuIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHVuZGVmaW5lZCwgcG9zaXRpb24/OiBudW1iZXIgKTogYm9vbGVhbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKiogQGludGVybmFsICovXFxyXFxuICByZXBvc2l0aW9uKCk6IHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2lkO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgbW92aW5nIHRoZSBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBIE1vdmUgY29tcG9uZW50IG9iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIE1vdmUoIFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgKTogTW92ZUNvbXBvbmVudCB7XFxyXFxuICBjb25zdCB7IG9uLCBlbWl0IH0gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBzZXQgfSA9IFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUuc3RhdGU7XFxyXFxuICBjb25zdCB7IHNsaWRlU2l6ZSwgZ2V0UGFkZGluZywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvdGFsU2l6ZSwgbGlzdFNpemUsIHNsaWRlclNpemUgfSA9IENvbXBvbmVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xheW91dDtcXHJcXG4gIGNvbnN0IHsgcmVzb2x2ZSwgb3JpZW50IH0gPSBDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cy5EaXJlY3Rpb247XFxyXFxuICBjb25zdCB7IGxpc3QsIHRyYWNrIH0gPSBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50cy5FbGVtZW50cztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUcmFuc2l0aW9uOiBUcmFuc2l0aW9uQ29tcG9uZW50O1xcclxcblxcclxcbiAgLyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogdm9pZCB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICBUcmFuc2l0aW9uID0gQ29tcG9uZW50cy5UcmFuc2l0aW9uO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgb24oIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVTSVpFRCwgRVZFTlRfVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQREFURUQsIEVWRU5UX1JFRlJFU0ggXSwgcmVwb3NpdGlvbiApO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVwb3NpdGlvbnMgdGhlIHNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuXFxyXFxuICAgKiAtIERvIG5vdCBjYWxsIGBjYW5jZWwoKWAgaGVyZSBiZWNhdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBMYXp5TG9hZCBtYXkgZW1pdCByZXNpemUgd2hpbGUgdHJhbnNpdGlvbmluZy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiAtIGlPUyBTYWZhcmkgZW1pdHMgd2luZG93IHJlc2l6ZSBldmVudCB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbGUgdGhlIHVzZXIgc3dpcGVzIHRoZSBzbGlkZXIgYmVjYXVzZSBvZiB0aGUgYm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHRvbSBiYXIuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHJlcG9zaXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgQ29tcG9uZW50cy5Db250cm9sbGVyLmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J1c3koKSApIHtcXHJcXG4gICAgICBDb21wb25lbnRzLlNjcm9sbC5jYW5jZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XFxyXFxuICAgICAganVtcCggU3BsaWRlLmluZGV4ICk7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMuU2xpZGVzLnVwZGF0ZSgpO1xcclxcbiAgICB9XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBNb3ZlcyB0aGUgc2xpZGVyIHRvIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdCBpbmRleCB3aXRoIHRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIGRlc3QgICAgIC0gQSBkZXN0aW5hdGlvbiBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgdG8gZ28gdG8sIGluY2x1ZGluZyBjbG9uZXMnLlxcclxcbiAgICogQHBhcmFtIGluZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCAgICAtIEEgc2xpZGUgaW5kZXguXFxyXFxuICAgKiBAcGFyYW0gcHJldiAgICAgLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQSBwcmV2aW91cyBpbmRleC5cXHJcXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25hbC4gQSBjYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGFmdGVyIHRyYW5zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGVuZHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdmUoIGRlc3Q6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIsIGluZGV4OiBudW1iZXIsIHByZXY6IG51bWJlciwgY2FsbGJhY2s/OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIGlmICggZGVzdCAhPT0gaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ICYmIGNhblNoaWZ0KCBkZXN0ID4gcHJldiApICkge1xcclxcbiAgICAgIGNhbmNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcXHJcXG4gICAgICB0cmFuc2xhdGUoIHNoaWZ0KCBnZXRQb3NpdGlvbigpLCBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCA+IHByZXYgKSwgdHJ1ZSApO1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIE1PVklORyApO1xcclxcbiAgICBlbWl0KCBFVkVOVF9NT1ZFLCBpbmRleCwgcHJldicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGRlc3QgKTtcXHJcXG5cXHJcXG4gICAgVHJhbnNpdGlvbi5zdGFydCggaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAoKSA9PiB7XFxyXFxuICAgICAgc2V0KCBJRExFICk7XFxyXFxuICAgICAgZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QoIEVWRU5UX01PVkVELCBpbmRleCwgcHJldiwgZGVzdCApO1xcclxcbiAgICAgIGNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsYmFjayAmJiBjYWxsYmFjaygpO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBKdW1wcyB0byB0aGUgc2xpZGUgYXQgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGVjaWZpZWQgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCAtIEFuIGluZGV4IHRvIGp1bXAgdG8uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBqdW1wKCBpbmRleDogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICB0cmFuc2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKCB0b1Bvc2l0aW9uKCBpbmRleCwgdHJ1ZSApICk7XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBNb3ZlcyB0aGUgc2xpZGVyIHRvIHRoZSBwcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmlkZWQgcG9zaXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHBvc2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiAgICAtIFRoZSBwb3NpdGlvbiB0byBtb3ZlIHRvLlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcmV2ZW50TG9vcCAtIE9wdGlvbmFsLiBJZiBgdHJ1ZWAsIHNldHMgdGhlIHBybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aWRlZCBwb3NpdGlvbiBhcyBpcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRyYW5zbGF0ZSggcG9zaXRpb246IG51bWJlciwgcHJldmVudExvb3A/OiBib29sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VhbiApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAhIFNwbGlkZS5pcyggRkFERSApICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHByZXZlbnRMb29wID8gcG9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uIDogbG9vcCggcG9zaXRpb24gKTtcXHJcXG4gICAgICBzdHlsZSggbGlzdCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIid0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlJHsgcmVzb2x2ZSggJ1gnICkgfSgkeyBkZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGluYXRpb24gfXB4KWAgKTtcXHJcXG4gICAgICBwb3NpdGlvbiAhPT0gZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uICYmIGVtaXQoIEVWRU5UX1NISUZURUQgKTtcXHJcXG4gICAgfVxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogTG9vcHMgdGhlIHByb3ZpZGVkIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbiBpZiBpdCBleGNlZWRzIGJvdW5kcyAobGltaXQgaW5kaWNlcykuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIEEgcG9zaXRpb24gdG8gbG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3AuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGxvb3AoIHBvc2l0aW9uOiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyICk6IG51bWJlciB7XFxyXFxuICAgIGlmICggU3BsaWRlLmlzKCBMT09QICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIGNvbnN0IGluZGV4ICAgICAgID0gdG9JbmRleCggcG9zaXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uICk7XFxyXFxuICAgICAgY29uc3QgZXhjZWVkZWRNYXggPSBpbmRleCA+IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzLkNvbnRyb2xsZXIuZ2V0RW5kKCk7XFxyXFxuICAgICAgY29uc3QgZXhjZWVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkTWluID0gaW5kZXggPCAwO1xcclxcblxcclxcbiAgICAgIGlmICggZXhjZWVkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkTWluIHx8IGV4Y2VlZGVkTWF4ICkge1xcclxcbiAgICAgICAgcG9zaXRpb24gPSBzaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZnQoIHBvc2l0aW9uLCBleGNlZWRlZE1heCApO1xcclxcbiAgICAgIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQWRkcyBvciBzdWJ0cmFjdHMgdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXIgd2lkdGggdG8gdGhlIHByb3ZpZGVkIHBvc2l0aW9uLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcGFyYW0gcG9zaXRpb24gIC0gQSBwb3NpdGlvbiB0byBzaGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKiBAcGFyYW0gYmFja3dhcmRzIC0gRGV0ZXJtaW5lcyB3aGV0aGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0byBzaGlmdCB0aGUgc2xpZGVyIGJhY2t3YXJkcyBvciBmb3J3YXJkcy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQHJldHVybiBUaGUgc2hpZnRlZCBwb3NpdGlvbi5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNoaWZ0KCBwb3NpdGlvbjogbnVtYmVyLCBiYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidja3dhcmRzOiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IGV4Y2VzcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBwb3NpdGlvbiAtIGdldExpbWl0KCBiYWNrd2FyZHMgKTtcXHJcXG4gICAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHNpemUgICA9IHNsaWRlclNpemUoKTtcXHJcXG4gICAgcG9zaXRpb24gLT0gb3JpZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCggc2l6ZSAqICggY2VpbCggYWJzKCBleGNlc3MgKSAvIHNpemUgKSB8fCAxICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkgKiAoIGJhY2t3YXJkcyA/IDEgOiAtMSApO1xcclxcbiAgICByZXR1cm4gcG9zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYW5jZWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmFuc2l0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjYW5jZWwoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHZvaWQge1xcclxcbiAgICB0cmFuc2xhdGUoIGdldFBvc2l0aW9uKCksIHRydWUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIFRyYW5zaXRpb24uY2FuY2VsKCk7XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBjbG9zZXN0IGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byB0aGUgcG9zaXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHBvc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAtIEEgcG9zaXRpb24gdG8gY29udmVydC5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHJldHVybiBUaGUgY2xvc2VzdCBpbmRleCB0byB0aGUgcG9zaXRpb24uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICovXFxyXFxuICBmdW5jdGlvbiB0b0luZGV4KCBwb3NpdGlvbjogbnVtYmVyICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIge1xcclxcbiAgICBjb25zdCBTbGlkZXMgPSBDb21wb25lbnRzLlNsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MuZ2V0KCk7XFxyXFxuXFxyXFxuICAgIGxldCBpbmRleCAgICAgICA9IDA7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsZXQgbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcXHJcXG5cXHJcXG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvciAoIGxldCBpID0gMDsgaSA8IFNsaWRlcy5sZW5ndGg7IGkrKyApIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgY29uc3Qgc2xpZGVJbmRleCA9IFNsaWRlc1sgaSBdLmluZGV4O1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBjb25zdCBkaXN0YW5jZSAgID0gYWJzKCB0b1Bvc2l0aW9uKCBzbGlkZUluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCwgdHJ1ZSApIC0gcG9zaXRpb24gKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YW5jZSA8PSBtaW5EaXN0YW5jZSApIHtcXHJcXG4gICAgICAgIG1pbkRpc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGRpc3RhbmNlO1xcclxcbiAgICAgICAgaW5kZXggICAgICAgPSBzbGlkZUluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgYnJlYWs7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gaW5kZXg7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDb252ZXJ0cyB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlIGluZGV4IHRvIHRoZSBwb3NpdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHBhcmFtIGluZGV4ICAgIC0gQW4gaW5kZXggdG8gY29udmVydC5cXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gdHJpbW1pbmcgLSBPcHRpb25hbC4gV2hldGhlciB0byB0cmltIGVkZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNwYWNlcyBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uIGNvcnJlc3BvbmRpbmcgd2l0aCB0aGUgaW5kZXguXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBmdW5jdGlvbiB0b1Bvc2l0aW9uKCBpbmRleDogbnVtYmVyLCB0cmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW1pbmc/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IHBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9yaWVudCggdG90YWxTaXplKCBpbmRleCAtIDEgKSAtIG9mZnNldCggaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ICkgKTtcXHJcXG4gICAgcmV0dXJuIHRyaW1taW5nID8gdHJpbSggcG9zaXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgOiBwb3NpdGlvbjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24uXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gVGhlIHBvc2l0aW9uIG9mIHRoZSBsaXN0IGVsZW1lbnQuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBnZXRQb3NpdGlvbigpOiBudW1iZXIgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgY29uc3QgbGVmdCA9IHJlc29sdmUoICdsZWZ0JyApO1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIHJlY3QoIGxpc3QgKVsgbGVmdCBdIC0gcmVjdCggdHJhY2sgKVsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlZnQgXSArIG9yaWVudCggZ2V0UGFkZGluZyggZmFsc2UgKSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVHJpbXMgc3BhY2VzIG9uIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWRnZSBvZiB0aGUgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24gLSBBIHBvc2l0aW9uIHRvIHRyaW0uXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEByZXR1cm4gQSB0cmltbWVkIHBvc2l0aW9uLlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gdHJpbSggcG9zaXRpb246IG51bWJlciApOiBudW1iZXIge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKCBvcHRpb25zLnRyaW1TcGFjZSAmJiBTcGxpZGUuaXMoIFNMSURFICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIHBvc2l0aW9uID0gY2xhbXAoIHBvc2l0aW9uLCAwLCBvcmllJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KCBzbGlkZXJTaXplKCB0cnVlICkgLSBsaXN0U2l6ZSgpICkgKTtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xcclxcbiAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgb2Zmc2V0IGFtb3VudC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4gaW5kZXguXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBmdW5jdGlvbiBvZmZzZXQoIGluZGV4OiBudW1iZXIgKTogbnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWJlciB7XFxyXFxuICAgIGNvbnN0IHsgZm9jdXMgfSA9IG9wdGlvbnM7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICByZXR1cm4gZm9jdXMgPT09ICdjZW50ZXInID8gKCBsaXN0U2l6ZSgpIC0gcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlU2l6ZSggaW5kZXgsIHRydWUgKSApIC8gMiA6ICtmb2N1cyAqIHNsaWRlU2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInemUoIGluZGV4ICkgfHwgMDtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIFJldHVybnMgdGhlIGxpbWl0IG51bWJlciB0aGF0IHRoZSBzbGlkZXIgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiBtb3ZlIHRvLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBtYXggLSBEZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJtaW5lcyB3aGV0aGVyIHRvIHJldHVybiB0aGUgbWF4aW11bSBvciBtaW5pbXVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBsaW1pdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIFRoZSBib3JkZXIgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlci5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0TGltaXQoIG1heDonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJvb2xlYW4gKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIHRvUG9zaXRpb24oIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXggPyBDb21wb25lbnRzLkNvbnRyb2xsZXIuZ2V0RW5kKCkgOiAwLCAhISBvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucy50cmltU3BhY2UgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIENoZWNrcyBpZiB0aGVyZSBpcyBlbm91Z2ggd2lkdGggdG8gc2hpZnQgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGJhY2t3YXJkcyAtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBgdHJ1ZWAgZm9yIGNoZWNraW5nIGJhY2t3YXJkcywgb3IgYGZhbHNlYCBmb3IgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvaW5nIGZvcndhcmRzLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYCBpZiB0aGUgc2xpZGVyIGNhbiBiZSBzaGlmdGVkIGZvciB0aGUgc3BlY2lmaWVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkaXJlY3Rpb24sIG9yIG90aGVyd2lzZSBgZmFsc2VgLlxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZnVuY3Rpb24gY2FuU2hpZnQoIGJhY2t3YXJkczogYm9vbGVhbiApOiBib28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVhbiB7XFxyXFxuICAgIGNvbnN0IHNoaWZ0ZWQgPSBvcmllbnQoIHNoaWZ0KCBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUG9zaXRpb24oKSwgYmFja3dhcmRzICkgKTtcXHJcXG4gICAgcmV0dXJuIGJhY2t3YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHNcXHJcXG4gICAgICA/IHNoaWZ0ZWQgPj0gMFxcclxcbiAgICAgIDogc2hpZnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImQgPD0gbGlzdFsgcmVzb2x2ZSggJ3Njcm9sbFdpZHRoJyApIF0gLSByZWN0KCB0ciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhY2sgKVsgcmVzb2x2ZSggJ3dpZHRoJyApIF07XFxyXFxuICB9XFxyXFxuXFxyXFxuICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLyoqXFxyXFxuICAgKiBDaGVja3MgaWYgdGhlIHByb3ZpZGVkIHBvc2l0aW9uIGV4YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZWRzIHRoZSBtaW5pbXVtIG9yIG1heGltdW0gbGltaXQgb3Igbm90LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gbWF4ICAgICAgLSBPcHRpb25hbC4gYHRydWVgIGZvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGVzdGluZyBtYXgsIGBmYWxzZWAgZm9yIG1pbiwgYW5kIGB1bmRlZmluZWRgIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgYm90aC5cXHJcXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIE9wdGlvbmFsLiBBIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbiB0byB0ZXN0LiBJZiBvbWl0dGVkLCB0ZXN0cyB0aGUgY3VycmVudCBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBwb3NpdGlvbiBleGNlZWRzIHRoZSBsaW1pdCwgb3Igb3RoZXJ3aXNlIGBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBleGNlZWRlZExpbWl0KCBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F4PzogYm9vbGVhbiB8IHVuZGVmaW5lZCwgcG9zaXRpb24/OiBudW1iZXIgKTogYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb2xlYW4ge1xcclxcbiAgICBwb3NpdGlvbiA9IGlzVW5kZWZpbmVkKCBwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSA/IGdldFBvc2l0aW9uKCkgOiBwb3NpdGlvbjtcXHJcXG4gICAgY29uc3QgZXhjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZGVkTWluID0gbWF4ICE9PSB0cnVlICYmIG9yaWVudCggcG9zaXRpb24gKSA8IG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmllbnQoIGdldExpbWl0KCBmYWxzZSApICk7XFxyXFxuICAgIGNvbnN0IGV4Y2VlZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZE1heCA9IG1heCAhPT0gZmFsc2UgJiYgb3JpZW50KCBwb3NpdGlvbiApID4gb3JpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCggZ2V0TGltaXQoIHRydWUgKSApO1xcclxcbiAgICByZXR1cm4gZXhjZWVkZWRNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luIHx8IGV4Y2VlZGVkTWF4O1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICBtb3ZlLFxcclxcbiAgICBqdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcCxcXHJcXG4gICAgdHJhbnNsYXRlLFxcclxcbiAgICBzaGlmdCxcXHJcXG4gICAgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbmNlbCxcXHJcXG4gICAgdG9JbmRleCxcXHJcXG4gICAgdG9Qb3NpdGlvbixcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIGdldFBvc2l0aW9uLFxcclxcbiAgICBnZXRMaW1pdCxcXHJcXG4gICAgZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2VlZGVkTGltaXQsXFxyXFxuICAgIHJlcG9zaXRpb24sXFxyXFxuICB9O1xcclxcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuIiwiaW1wb3J0IHsgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQsIEVWRU5UX1InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRUZSRVNILCBFVkVOVF9SRVNJWkVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IE1PVklORywgU0NST0xMIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIklORyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9zdGF0ZXMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBMT09QLCBTTElERSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IEV2ZW50SW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0byIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQW55RnVuY3Rpb24sIEJhc2VDb21wb25lbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbXBvcnQgeyBhcHBseSwgYXBwcm94aW1hdGVseUVxdWFsLCBiZXR3ZWVuLCBjbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibXAsIGZsb29yLCBpc1N0cmluZywgaXNVbmRlZmluZWQsIG1pbiB9IGZyb20gJy4uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi8uLi91dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2UgZm9yIHRoZSBDb250cm9sbGVyIGNvbXBvbmVudC5cXHJcXG4gKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDb250cm9sbGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZ28oIGNvbnRyb2w6IG51bWJlciB8IHN0cmluZywgYWxsb3dTYW1lSW5kZXg/OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYm9vbGVhbiwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkO1xcclxcbiAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjcm9sbCggZGVzdGluYXRpb246IG51bWJlciwgZHVyYXRpb24/OiBudW1iZXIsIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmFwPzogYm9vbGVhbiwgY2FsbGJhY2s/OiBBbnlGdW5jdGlvbiApOiB2b2lkO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIGdldE5leHQoIGRlc3RpbmF0aW9uPzogYm9vbGVhbiApOiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgZ2V0UHJldiggZGVzdGluYXRpb24/OiBib29sZWFuICk6IG51bWJlcjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBnZXRFbmQoKTogbnVtYmVyO1xcclxcbiAgc2V0SW5kZXgoIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogbnVtYmVyICk6IHZvaWQ7XFxyXFxuICBnZXRJbmRleCggcHJldj86IGJvb2xlYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IG51bWJlcjtcXHJcXG4gIHRvSW5kZXgoIHBhZ2U6IG51bWJlciApOiBudW1iZXI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgdG9QYWdlKCBpbmRleDogbnVtYmVyICk6IG51bWJlcjtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b0Rlc3QoIHBvc2l0aW9uOiBudW1iZXIgKTogbnVtYmVyO1xcclxcbiAgaGFzRm9jdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCk6IGJvb2xlYW47XFxyXFxuICBpc0J1c3koKTogYm9vbGVhbjtcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKiogQGludGVybmFsICovXFxyXFxuICBnZXRBZGphY2VudCggcHJldjogYm9vbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYW4sIGRlc3RpbmF0aW9uPzogYm9vbGVhbiApOiBudW1iZXI7XFxyXFxufVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW50IGZvciBjb250cm9sbGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cgdGhlIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgQ29udHJvbGxlciBjb21wb25lbnQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gQ29udHJvbGxlciggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9ucyApOiBDb250cm9sbGVyQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBlbWl0IH0gPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgeyBNb3ZlIH0gPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBnZXRQb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGdldExpbWl0LCB0b1Bvc2l0aW9uIH0gPSBNb3ZlO1xcclxcbiAgY29uc3QgeyBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbm91Z2gsIGdldExlbmd0aCB9ID0gQ29tcG9uZW50cy5TbGlkZXM7XFxyXFxuICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgeyBvbWl0RW5kIH0gPSBvcHRpb25zO1xcclxcbiAgY29uc3QgaXNMb29wICA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUuaXMoIExPT1AgKTtcXHJcXG4gIGNvbnN0IGlzU2xpZGUgPSBTcGxpZGUuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCBTTElERSApO1xcclxcbiAgY29uc3QgZ2V0TmV4dCA9IGFwcGx5KCBnZXRBZGphYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsIGZhbHNlICk7XFxyXFxuICBjb25zdCBnZXRQcmV2ID0gYXBwbHkoIGdldEFkaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2VudCwgdHJ1ZSApO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgY3VycicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGxldCBjdXJySW5kZXggPSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5zdGFydCB8fCAwO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVzdCBlbmQgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGxldCBlbmRJbmRleDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHByZXZpb3VzIGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHByZXZJbmRleCA9IGN1cnJJbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBsYXRlc3QgbnVtYmVyIG9mICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZXMuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBzbGlkZUNvdW50OiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGF0ZXN0IGBwZXJNb3ZlYCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwZXJNb3ZlOiBudW1iZXI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgbGF0ZXN0IGBwZXJNb3ZlYCB2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwZXJQYWdlOiBudW1iZXI7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdm9pZCB7XFxyXFxuICAgIGluaXQoKTtcXHJcXG4gICAgb24oIFsgRVZFTlRfVVAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX0VORF9JTkRFWF9DSEFOR0VEIF0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbml0ICk7XFxyXFxuICAgIG9uKCBFVkVOVF9SRVNJWkVELCBvblJlc2l6ZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluaXRpYWxpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3plcyBzb21lIHBhcmFtZXRlcnMuXFxyXFxuICAgKiBOZWVkcyB0byBjaGVjayB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciBvZiBzbGlkZXMgc2luY2UgdGhlIGN1cnJlbnQgaW5kZXggbWF5IGJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdXQgb2YgdGhlIHJhbmdlIGFmdGVyIHJlZnJlc2guXFxyXFxuICAgKiBUaGUgcHJvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Mgb3JkZXIgbXVzdCBiZSBFbGVtZW50cyAtPiBDb250cm9sbGVyIC0+IE1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc2xpZGVDb3VudCA9IGdldExlbmd0aCggdHJ1ZSApO1xcclxcbiAgICBwZXJNb3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSAgICA9IG9wdGlvbnMucGVyTW92ZTtcXHJcXG4gICAgcGVyUGFnZSAgICA9IG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLnBlclBhZ2U7XFxyXFxuICAgIGVuZEluZGV4ICAgPSBnZXRFbmQoKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIGNvbnN0IGluZGV4ID0gY2xhbXAoIGN1cnJJbmRleCwgMCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9taXRFbmQgPyBlbmRJbmRleCA6IHNsaWRlQ291bnQgLSAxICk7XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBpZiAoIGluZGV4ICE9PSBjdXJySW5kZXggKSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnJJbmRleCA9IGluZGV4O1xcclxcbiAgICAgIE1vdmUucmVwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQ2FsbGVkIHdoZW4gdGhlIHZpZXdwb3J0IHdpZHRoIGlzIGNoYW5nZWQuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogVGhlIGVuZCBpbmRleCBjYW4gY2hhbmdlIGlmIGBhdXRvV2lkdGhgIG9yIGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZml4ZWRXaWR0aGAgaXMgZW5hYmxlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIG9uUmVzaXplZCgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBlbmRJbmRleCAhPT0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEVuZCgpICkge1xcclxcbiAgICAgIGVtaXQoIEVWRU5UX0VORF9JTkRFWF9DSEFOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dFRCApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBNb3ZlcyB0aGUgc2xpZGVyIGJ5IHRoZSBjb250cm9sIHBhdHRlcm4uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIEBzZWUgYFNwbGlkZSNnbygpYFxcclxcbiAgICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gY29udHJvbCAgICAgICAgLSBBIGNvbnRyb2wgcGF0dGVybi5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBAcGFyYW0gYWxsb3dTYW1lSW5kZXggLSBPcHRpb25hbC4gRGV0ZXJtaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZXMgd2hldGhlciB0byBhbGxvdyBnb2luZyB0byB0aGUgY3VycmVudCBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3Igbm90LlxcclxcbiAgICogQHBhcmFtIGNhbGxiYWNrICAgICAgIC0gT3B0aW9uYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgdHJhbnNpdGlvbiBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kcy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ28oIGNvbnRyb2w6IG51bScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiZXIgfCBzdHJpbmcsIGFsbG93U2FtZUluZGV4PzogYm9vbGVhbiwgY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPzogQW55RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIGlmICggISBpc0J1c3koKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgY29uc3QgZGVzdCAgPSBwYXJzZSggY29udHJvbCApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBjb25zdCBpbmRleCA9IGxvb3AoIGRlc3QgKTtcXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgaWYgKCBpbmRleCA+IC0xICYmICggYWxsb3dTYW1lSW5kZXggfHwgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4ICE9PSBjdXJySW5kZXggKSApIHtcXHJcXG4gICAgICAgIHNldEluZGV4KCBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggKTtcXHJcXG4gICAgICAgIE1vdmUubW92ZSggZGVzdCwgaW5kZXgsIHByZXZJbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXgsIGNhbGxiYWNrICk7XFxyXFxuICAgICAgfVxcclxcbiAgICB9XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTY3JvbGxzIHRoZSBzbGlkZXIgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIHRoZSBzcGVjaWZpZWQgZGVzdGluYXRpb24gd2l0aCB1cGRhdGluZyBpbmRpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gLSBUaGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Bvc2l0aW9uIHRvIHNjcm9sbCB0aGUgc2xpZGVyIHRvLlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkdXJhdGlvbiAgICAtIE9wdGlvbmFsLiBTcGVjaWZpZXMgdGhlIHNjcm9sbCBkdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRpb24uXFxyXFxuICAgKiBAcGFyYW0gc25hcCAgICAgICAgLSBPcHRpb25hbC4gVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZXRoZXIgdG8gc25hcCB0aGUgc2xpZGVyIHRvIHRoZSBjbG9zZXN0IHNsaWRlIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBub3QuXFxyXFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgICAgLSBPcHRpb25hbC4gQSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBhZnRlciBzY3JvbGwgZW5kcy5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNjcm9sbCggZGVzdGluYXRpb246IG51bWJlciwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGR1cmF0aW9uPzogbnVtYmVyLCBzbmFwPzogYm9vbGVhbiwgY2FsbGJhY2s/OiBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ255RnVuY3Rpb24gKTogdm9pZCB7XFxyXFxuICAgIENvbXBvbmVudHMuU2Nyb2xsLnNjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvbGwoIGRlc3RpbmF0aW9uLCBkdXJhdGlvbiwgc25hcCwgKCkgPT4ge1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjb25zdCBpbmRleCA9IGxvb3AoIE1vdmUudG9JbmRleCggZ2V0UG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCkgKSApO1xcclxcbiAgICAgIHNldEluZGV4KCBvbWl0RW5kID8gbWluKCBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGVuZEluZGV4ICkgOiBpbmRleCApO1xcclxcbiAgICAgIGNhbGxiYWNrICYmIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjaygpO1xcclxcbiAgICB9ICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBQYXJzZXMgdGhlIGNvbnRyb2wgYW5kIHJldHVybnMgYSBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGNvbnRyb2wgLSBBIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sIHBhdHRlcm4gdG8gcGFyc2UuXFxyXFxuICAgKlxcclxcbiAgICogQHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gQSBgZGVzdGAgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJzZSggY29udHJvbDogbnVtYmVyIHwgc3RyaW5nICk6IG51bWJlciB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBsZXQgaW5kZXggPSBjdXJySW5kZXg7XFxyXFxuXFxyXFxuICAgIGlmICggaXNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaW5nKCBjb250cm9sICkgKSB7XFxyXFxuICAgICAgY29uc3QgWyAsIGluZGljYXRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IsIG51bWJlciBdID0gY29udHJvbC5tYXRjaCggLyhbK1xcXFwtPD5dKShcXFxcZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrKT8vICkgfHwgW107XFxyXFxuXFxyXFxuICAgICAgaWYgKCBpbmRpY2F0b3IgPT0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPSAnKycgfHwgaW5kaWNhdG9yID09PSAnLScgKSB7XFxyXFxuICAgICAgICBpbmRleCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBjb21wdXRlRGVzdEluZGV4KCBjdXJySW5kZXggKyArYCR7IGluZGljYXRvciB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyR7ICtudW1iZXIgfHwgMSB9YCwgY3VyckluZGV4ICk7XFxyXFxuICAgICAgfSBlbHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBpZiAoIGluZGljYXRvciA9PT0gJz4nICkge1xcclxcbiAgICAgICAgaW5kZXggPSBuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyID8gdG9JbmRleCggK251bWJlciApIDogZ2V0TmV4dCggdHJ1ZSApO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm4gICAgICB9IGVsc2UgaWYgKCBpbmRpY2F0b3IgPT09ICc8JyApIHtcXHJcXG4gICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpbmRleCA9IGdldFByZXYoIHRydWUgKTtcXHJcXG4gICAgICB9XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9IGVsc2Uge1xcclxcbiAgICAgIGluZGV4ID0gaXNMb29wID8gY29udHJvbCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFtcCggY29udHJvbCwgMCwgZW5kSW5kZXggKTtcXHJcXG4gICAgfVxcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgcmV0dXJuIGluZGV4O1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogUmV0dXJucyBhbiBhZGphY2VudCBkZXN0aW5hdGlvbiBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXguXFxyXFxuICAgKlxcclxcbiAgICogQGludGVybmFsXFxyXFxuICAgKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEBwYXJhbSBwcmV2ICAgICAgICAtIERldGVybWluZXMgd2hldGhlciB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIGEgcHJldmlvdXMgb3IgbmV4dCBpbmRleC5cXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdGluYXRpb24gLSBPcHRpb25hbC4gRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXQgYSBkZXN0aW5hdGlvbiBpbmRleCBvciBhIHNsaWRlIG9uZS5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHJldHVybiBBbiBhZGphY2VudCBpbmRleCBpZiBhdmFpbGFibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBvciBvdGhlcndpc2UgYC0xYC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldEFkamFjZW50KCBwcmV2OiBib29sZWFuLCBkZXN0aW5hdGlvbj86IGJvb2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuICk6IG51bWJlciB7XFxyXFxuICAgIGNvbnN0IG51bWJlciA9IHBlck1vdmUgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggaGFzRm9jdXMoKSA/IDEgOiBwZXJQYWdlICk7XFxyXFxuICAgIGNvbnN0IGRlc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgPSBjb21wdXRlRGVzdEluZGV4KCBjdXJySW5kZXggKyBudW1iZXIgKiAoIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ID8gLTEgOiAxICksIGN1cnJJbmRleCwgISAoIHBlck1vdmUgfHwgaGFzRm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkgKSApO1xcclxcblxcclxcbiAgICBpZiAoIGRlc3QgPT09IC0xICYmIGlzU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlICkge1xcclxcbiAgICAgIGlmICggISBhcHByb3hpbWF0ZWx5RXF1YWwoIGdldFBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbigpLCBnZXRMaW1pdCggISBwcmV2ICksIDEgKSApIHtcXHJcXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gcHJldiA/IDAgOiBlbmRJbmRleDtcXHJcXG4gICAgICB9XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XFxyXFxuXFxyXFxuICAgIHJldHVybiBkZXN0aW5hdGlvbiA/IGRlc3QgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG9vcCggZGVzdCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQ29udmVydHMgdGhlIGRlc2lyZWQgZGVzdGluYXRpb24gaW5kZXggdG8gdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWxpZCBvbmUuXFxyXFxuICAgKiAtIElmIHRoZSBgbW92ZWAgb3B0aW9uIGlzIGB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZWAsIGZpbmRzIHRoZSBkZXN0IGluZGV4IHdob3NlIHBvc2l0aW9uIGlzIGRpZmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJlbnQgd2l0aCB0aGUgY3VycmVudCBvbmUuXFxyXFxuICAgKiAtIFRoaXMgbWF5IHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gY2xvbmUgaW5kaWNlcyBpZiB0aGUgZWRpdG9yIGlzIHRoZSBsb29wIG1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLFxcclxcbiAgICogICBvciBgLTFgIGlmIHRoZXJlIGlzIG5vIHNsaWRlIHRvIGdvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqIC0gVGhlcmUgYXJlIHN0aWxsIHNsaWRlcyB3aGVyZSB0aGUgY2FyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291c2VsIGNhbiBnbyBpZiBib3JkZXJzIGFyZSBiZXR3ZWVuIGBmcm9tYCBhbmQgYCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0YC5cXHJcXG4gICAqIC0gSWYgYGZvY3VzYCBpcyBhdmFpbGFibGUsIG5lZWRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0byBjYWxjdWxhdGUgdGhlIGRlc3QgaW5kZXggZXZlbiBpZiB0aGVyZSBhcmUgZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VnaCBudW1iZXIgb2Ygc2xpZGVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20gZGVzdCAgICAgLSBUaGUgZGVzaXJlZCBkZXN0aW5hdGlvbiBpbmRleC5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gZnJvbSAgICAgLSBBIGJhc2UgaW5kZXguXFxyXFxuICAgKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIHNuYXBQYWdlIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8gc25hcCBhIHBhZ2UgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgY29udmVydGVkIGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXN0aW5hdGlvbiBpbmRleCwgaW5jbHVkaW5nIGNsb25lcy5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dGVEZXN0SW5kZXgoIGRlc3Q6IG51bWJlciwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb206IG51bWJlciwgc25hcFBhZ2U/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAoIGlzRW5vdWdoKCkgfHwgaGFzRm9jdXMoKSApIHtcXHJcXG4gICAgICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgaW5kZXggPSBjb21wdXRlTW92YWJsZURlc3RJbmRleCggZGVzdCApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBpZiAoIGluZGV4ICE9PSBkZXN0ICkge1xcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZyb20gICAgID0gZGVzdDtcXHJcXG4gICAgICAgIGRlc3QgICAgID0gaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4O1xcclxcbiAgICAgICAgc25hcFBhZ2UgPSBmYWxzZTtcXHJcXG4gICAgICB9XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgICAgIGlmICggZGVzdCA8IDAgfHwgZGVzdCA+IGVuZEluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApIHtcXHJcXG4gICAgICAgIGlmICggISBwZXJNb3ZlICYmICggYmV0d2VlbiggMCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QsIGZyb20sIHRydWUgKSB8fCBiZXR3ZWVuKCBlbmRJbmRleCwgZnJvbSwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3QsIHRydWUgKSApICkge1xcclxcbiAgICAgICAgICBkZXN0ID0gdG9JbmRleCggdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvUGFnZSggZGVzdCApICk7XFxyXFxuICAgICAgICB9IGVsc2Uge1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKCBpc0xvb3AgKSB7XFxyXFxuICAgICAgICAgICAgZGVzdCA9IHNuYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGFnZVxcclxcbiAgICAgICAgICAgICAgPyBkZXN0IDwgMCA/IC0gKCBzbGlkZUNvdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCAlIHBlclBhZ2UgfHwgcGVyUGFnZSApIDogc2xpZGVDb3VudFxcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIDogZGVzdDtcXHJcXG4gICAgICAgICAgfSBlbHNlIGlmICggb3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV3aW5kICkge1xcclxcbiAgICAgICAgICAgIGRlc3QgPSBkZXN0IDwgMCA/IGVuZEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCA6IDA7XFxyXFxuICAgICAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGRlc3QgPSAtMTtcXHJcXG4gICAgICAgICAgfVxcclxcbiAgICAgICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgICB9IGVsc2Uge1xcclxcbiAgICAgICAgaWYgKCBzbmFwUGFnZSAmJiBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAhPT0gZnJvbSApIHtcXHJcXG4gICAgICAgICAgZGVzdCA9IHRvSW5kZXgoIHRvUGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoIGZyb20gKSArICggZGVzdCA8IGZyb20gPyAtMSA6IDEgKSApO1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH1cXHJcXG4gICAgICB9XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSAtMTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gZGVzdDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEZpbmRzIHRoZSBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzdCBpbmRleCB3aG9zZSBwb3NpdGlvbiBpcyBkaWZmZXJlbnQgd2l0aCB0aGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ1cnJlbnQgb25lIGZvciBgdHJpbVNwYWNlOiAnbW92ZSdgLlxcclxcbiAgICogVGhpcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FuIGJlIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBgbGVuZ3RoIC0gMWAuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBkZXN0IC0gQSBkZXN0IGluZGV4LlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgZGVzdCBpbmRleC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG4gIGZ1bmN0aW9uIGNvbXB1dGVNb3ZhYmxlRGVzdEluZGV4KCBkZXN0OiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtYmVyICk6IG51bWJlciB7XFxyXFxuICAgIGlmICggaXNTbGlkZSAmJiBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi50cmltU3BhY2UgPT09ICdtb3ZlJyAmJiBkZXN0ICE9PSBjdXJySW5kZXggKSB7XFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb24oKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgICAgd2hpbGUgKCBwb3NpdGlvbiA9PT0gdG9Qb3NpdGlvbiggZGVzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWUgKSAmJiBiZXR3ZWVuKCBkZXN0LCAwLCBTcGxpZGUubGVuZ3RoIC0gMSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyEgb3B0aW9ucy5yZXdpbmQgKSApIHtcXHJcXG4gICAgICAgIGRlc3QgPCBjdXJySW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID8gLS1kZXN0IDogKytkZXN0O1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG4gICAgcmV0dXJuIGRlc3Q7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBMb29wcyB0aGUgcHJvdmlkZWQgaW5kZXggb25seSBpbiB0aGUgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3AgbW9kZS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXggdG8gbG9vcC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIEEgbG9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlZCBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbG9vcCggaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4OiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGlzTG9vcCA/ICggaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4ICsgc2xpZGVDb3VudCApICUgc2xpZGVDb3VudCB8fCAwIDogaW5kZXg7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kIGluZGV4IHdoZXJlIHRoZSBzbGlkZXIgY2FuIGdvLlxcclxcbiAgICogRm9yIGV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtcGxlLCBpZiB0aGUgc2xpZGVyIGhhcyAxMCBzbGlkZXMgYW5kIHRoZSBgcGVyUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2VgIG9wdGlvbiBpcyAzLFxcclxcbiAgICogdGhlIHNsaWRlciBjYW4gZ28gdG8gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzbGlkZSA4ICh0aGUgaW5kZXggaXMgNykuXFxyXFxuICAgKiBJZiB0aGUgYG9taScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0RW5kYCBvcHRpb24gaXMgYXZhaWxhYmxlLCBjb21wdXRlcyB0aGUgaW5kZXggZnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb20gdGhlIHNsaWRlIHBvc2l0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIEFuIGVuZCBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZCgpOiBudW1iZXIge1xcclxcbiAgICBsZXQgZW5kID0gc2xpZGVDb3VudCAtICggaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc0ZvY3VzKCkgfHwgKCBpc0xvb3AgJiYgcGVyTW92ZSApID8gMSA6IHBlclBhZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuXFxyXFxuICAgIHdoaWxlICggb21pdEVuZCAmJiBlbmQtLSA+IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xcclxcbiAgICAgIGlmICggdG9Qb3NpdGlvbiggc2xpZGVDb3VudCAtIDEsIHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlICkgIT09IHRvUG9zaXRpb24oIGVuZCwgdHJ1ZSApICkge1xcclxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZCsrO1xcclxcbiAgICAgICAgYnJlYWs7XFxyXFxuICAgICAgfVxcclxcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICByZXR1cm4gY2xhbXAoIGVuZCwgMCwgc2xpZGVDb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLSAxICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbnYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ0cyB0aGUgcGFnZSBpbmRleCB0byB0aGUgc2xpZGUgaW5kZXguXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBwYWdlIC0gQSBwYWdlIGluZGV4IHRvIGNvbnZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBzbGlkZSBpbmRleC5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRvSW5kZXgoIHBhZ2U6IG51bWJlciApOiBudScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGNsYW1wKCBoYXNGb2N1cygpID8gcGFnZSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZXJQYWdlICogcGFnZSwgMCwgZW5kSW5kZXggKTtcXHJcXG4gIH1cXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIENvbnZlcnRzIHRoZSBzbGlkZSBpbmRleCB0byB0aGUgcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2UgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluZGV4IHRvIGNvbnZlcnQuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYWdlIGluZGV4LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB0b1BhZ2UoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleDogbnVtYmVyICk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiBoYXNGb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKVxcclxcbiAgICAgID8gbWluKCBpbmRleCwgZW5kSW5kZXggKVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICA6IGZsb29yKCAoIGluZGV4ID49IGVuZEluZGV4ID8gc2xpZGVDb3VudCAtIDEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogaW5kZXggKSAvIHBlclBhZ2UgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIENvbnZlcnRzIHRoZSBkZXN0aW5hdGlvbiBwb3NpdGlvbiB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIGRlc3QgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGRlc3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbiAtIEEgcG9zaXRpb24gdG8gY29udmVydC5cXHJcXG4gICAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHJldHVybiBBIGRlc3QgaW5kZXguXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiB0b0Rlc3QoIGRlc3RpbmF0aW9uOiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNvbnN0IGNsb3Nlc3QgPSBNb3ZlLnRvSW5kZXgoIGRlc3RpbmF0aW9uICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gaXNTbGlkZSA/IGNsYW1wKCBjbG9zZXN0LCAwLCBlbmRJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXggKSA6IGNsb3Nlc3Q7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKiBTZXRzIGEgbmV3IGluZGV4IGFuZCByZXRhaW5zIG9sZCBvbmUuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBpbmRleCAtIEEgbmV3IGluZGV4IHRvIHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHNldEluZGV4KCBpbmRleDogbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBpbmRleCAhPT0gY3VyckluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcXHJcXG4gICAgICBwcmV2SW5kZXggPSBjdXJySW5kZXg7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnJJbmRleCA9IGluZGV4O1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50L3ByZXZpb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyBpbmRleC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gcHJldiAtIE9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hbC4gV2hldGhlciB0byByZXR1cm4gcHJldmlvdXMgaW5kZXggb3Igbm90LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gZ2V0SW5kZXgoIHByZXY/OiBib29sZWFuICk6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIge1xcclxcbiAgICByZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFZlcmlmaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyBpZiB0aGUgZm9jdXMgb3B0aW9uIGlzIGF2YWlsYWJsZSBvciBub3QuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSBzbGlkZXIgaGFzIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9jdXMgb3B0aW9uLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBoYXNGb2MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXMoKTogYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiAhIGlzVW5kZWZpbmVkKCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5mb2N1cyApIHx8IG9wdGlvbnMuaXNOYXZpZ2F0aW9uO1xcclxcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2hlY2tzIGlmIHRoZSBzbGlkZXIgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIG1vdmluZy9zY3JvbGxpbmcgb3Igbm90LlxcclxcbiAgICpcXHJcXG4gICAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGB0cnVlYCBpZiB0aGUgc2xpZGVyIGNhbiBtb3ZlLCBvciBvdGhlcndpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzQnVzeSgpOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYm9vbGVhbiB7XFxyXFxuICAgIHJldHVybiBTcGxpZGUuc3RhdGUuaXMoIFsgTU9WSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidORywgU0NST0xMSU5HIF0gKSAmJiAhISBvcHRpb25zLndhaXRGb3JUcmFuc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gICAgZ28sXFxyXFxuICAgIHNjcm9sbCxcXHJcXG4gICAgZ2V0TmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHQsXFxyXFxuICAgIGdldFByZXYsXFxyXFxuICAgIGdldEFkamFjZW50LFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZ2V0RW5kLFxcclxcbiAgICBzZXRJbmRleCxcXHJcXG4gICAgZ2V0SW5kZXgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0b0luZGV4LFxcclxcbiAgICB0b1BhZ2UsXFxyXFxuICAgIHRvRGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsXFxyXFxuICAgIGhhc0ZvY3VzLFxcclxcbiAgICBpc0J1c3ksXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQUxMX0FUVFJJQlVURVMsIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkNPTlRST0xTLCBBUklBX0xBQkVMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2F0dCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyaWJ1dGVzJztcXHJcXG5pbXBvcnQgeyBDTEFTU19BUlJPV1MgfSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBFVkVOVF8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1dTX01PVU5URUQsXFxyXFxuICBFVkVOVF9BUlJPV1NfVVBEQVRFRCxcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCxcXHJcXG4gIEVWRU5UX01PVU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVEVELFxcclxcbiAgRVZFTlRfTU9WRUQsXFxyXFxuICBFVkVOVF9SRUZSRVNILFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIEVWRU5UX1NDUk9MTEVELFxcclxcbiAgRVZFTlRfVVBEQVRFRCxcXHJcXG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBFdmVuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQge1xcclxcbiAgYWRkQ2xhc3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxcclxcbiAgYXBwZW5kLFxcclxcbiAgYXBwbHksXFxyXFxuICBhc3NpZ24sXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgYmVmb3JlLFxcclxcbiAgY3JlYXRlLFxcclxcbiAgZGlzcGxheSxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBwYXJzZUh0bWwsXFxyXFxuICByZW1vdmUsXFxyXFxuICByZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlLFxcclxcbiAgcmVtb3ZlQ2xhc3MsXFxyXFxuICBzZXRBdHRyaWJ1dGUsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiclxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IFBBVEgsIFMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSVpFLCBYTUxfTkFNRV9TUEFDRSB9IGZyb20gJy4vcGF0aCc7XFxyXFxuXFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBBcnJvd3MgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIEFycm93c0NvbXBvbmVudCBleHRlbmRzIEJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlQ29tcG9uZW50IHtcXHJcXG4gIGFycm93czogeyBwcmV2PzogSFRNTEJ1dHRvbkVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50LCBuZXh0PzogSFRNTEJ1dHRvbkVsZW1lbnQgfTtcXHJcXG5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKiogQGludGVybmFsICovXFxyXFxuICB1cGRhdGUoKTogdm9pZDtcXHJcXG59XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIGhhbmRsaW5nIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV2aW91cyBhbmQgbmV4dCBhcnJvd3MuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMuMC4wXFxyXFxuICpcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLlxcclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBBcnJvd3MgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIEFycm93cyggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9ucyApOiBBcnJvd3NDb21wb25lbnQge1xcclxcbiAgY29uc3QgZXZlbnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyBvbiwgYmluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGVtaXQgfSA9IGV2ZW50O1xcclxcbiAgY29uc3QgeyBjbGFzc2VzLCBpMThuIH0gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucztcXHJcXG4gIGNvbnN0IHsgRWxlbWVudHMsIENvbnRyb2xsZXIgfSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBhcnJvd3M6IHBsYWNlaG9sZGVyLCB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2sgfSA9IEVsZW1lbnRzO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXBwZXIgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHdyYXBwZXIgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxhY2Vob2xkZXI7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBwcmV2aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXMgYXJyb3cgZWxlbWVudC5cXHJcXG4gICAqL1xcclxcbiAgbGV0IHByZXYgPSBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudHMucHJldjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIG5leHQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93IGVsZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBuZXh0ID0gRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLm5leHQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldGhlciB0aGUgY29tcG9uZW50IGNyZWF0ZXMgYXJyb3dzIG9yIHJldHJpZXZlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnJvbSB0aGUgRE9NLlxcclxcbiAgICovXFxyXFxuICBsZXQgY3JlYXRlZDogYm9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG1vZGlmaWVyIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzLlxcclxcbiAgICovXFxyXFxuICBsZXQgd3JhcHBlckNsYXNzZXM6IHN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmc7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEFuIG9iamVjdCB3aXRoIHByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aW91cyBhbmQgbmV4dCBhcnJvd3MuXFxyXFxuICAgKi9cXHJcXG4gIGNvbnN0IGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicnJvd3M6IEFycm93c0NvbXBvbmVudFsgJ2Fycm93cycgXSA9IHt9O1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGNvbXBvbmVudCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMgbW91bnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gbW91bnQoKTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZvaWQge1xcclxcbiAgICBpbml0KCk7XFxyXFxuICAgIG9uKCBFVkVOVF9VUERBVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRCwgcmVtb3VudCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogUmVtb3VudHMgdGhlIGNvbXBvbmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHJlbW91bnQoKTogdm9pZCB7XFxyXFxuICAgIGRlc3Ryb3koKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIG1vdW50KCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gaW5pdCgpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgZW5hYmxlZCA9IG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmFycm93cztcXHJcXG5cXHJcXG4gICAgaWYgKCBlbmFibGVkICYmICEgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJldiAmJiBuZXh0ICkgKSB7XFxyXFxuICAgICAgY3JlYXRlQXJyb3dzKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB9XFxyXFxuXFxyXFxuICAgIGlmICggcHJldiAmJiBuZXh0ICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgICBhc3NpZ24oIGFycm93cywgeyBwcmV2LCBuZXh0IH0gKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI7XFxyXFxuICAgICAgZGlzcGxheSggd3JhcHBlciwgZW5hYmxlZCA/ICcnIDogJ25vbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlJyApO1xcclxcbiAgICAgIGFkZENsYXNzKCB3cmFwcGVyLCAoIHdyYXBwZXJDbGFzcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyA9IGAkeyBDTEFTU19BUlJPV1MgfS0tJHsgb3B0aW9ucy5kaXJlY3Rpb24gfWAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICkgKTtcXHJcXG5cXHJcXG4gICAgICBpZiAoIGVuYWJsZWQgKSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbGlzdGVuKCk7XFxyXFxuICAgICAgICB1cGRhdGUoKTtcXHJcXG4gICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXRBdHRyaWJ1dGUoIFsgcHJldiwgbmV4dCBdLCBBUklBX0NPTlRST0xTLCB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2suaWQgKTtcXHJcXG4gICAgICAgIGVtaXQoIEVWRU5UX0FSUk9XU19NT1VOVEVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcHJldiwgbmV4dCApO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGVzdHJveXMgdGhlIGNvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKTogdm9pZCB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICBldmVudC5kZXN0cm95KCk7XFxyXFxuICAgIHJlbW92ZUNsYXNzKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd3JhcHBlciwgd3JhcHBlckNsYXNzZXMgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYXRlZCApIHtcXHJcXG4gICAgICByZW1vdmUoIHBsYWNlaG9sZGVyID8gWyBwcmV2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgbmV4dCBdIDogd3JhcHBlciApO1xcclxcbiAgICAgIHByZXYgPSBuZXh0ID0gbnVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2w7XFxyXFxuICAgIH0gZWxzZSB7XFxyXFxuICAgICAgcmVtb3ZlQXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgWyBwcmV2LCBuZXh0IF0sIEFMTF9BVFRSSUJVVEVTICk7XFxyXFxuICAgIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbWUgZXZlbnRzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsaXN0ZW4oKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZvaWQge1xcclxcbiAgICBvbiggWyBFVkVOVF9NT1VOVEVELCBFVkVOVF9NT1ZFRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9FTkRfSU5ERVhfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkNIQU5HRUQgXSwgdXBkYXRlICk7XFxyXFxuICAgIGJpbmQoIG5leHQsICdjbGljaycsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBhcHBseSggZ28sICc+JyApICk7XFxyXFxuICAgIGJpbmQoIHByZXYsICdjbGljaycsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBhcHBseSggZ28sICc8JyApICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKioiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBUaGUgd3JhcHBlciBmdW5jdGlvbiBvZiBDb250cm9sbGVyI2dvKCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBjb250cm9sIC0gVGhlIGNvbnRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sIHBhdHRlcm4uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdvKCBjb250cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbDogc3RyaW5nICk6IHZvaWQge1xcclxcbiAgICBDb250cm9sbGVyLmdvKCBjb250cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbCwgdHJ1ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ3JlYXRlIGFycm93cyBhbmQgYXBwZW5kIHRoZW0gdG8gdGhlIHNsaWRlci5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycm93cygpOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIHdyYXBwZXIgPSBwbGFjZWhvbGRlciB8fCBjcmVhdGUoICdkaXYnLCBjbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3Nlcy5hcnJvd3MgKTtcXHJcXG4gICAgcHJldiAgICA9IGNyZWF0ZUFycm93KCB0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSApO1xcclxcbiAgICBuZXh0ICAgID0gY3JlYXRlQXJyb3coIGZhbHNlICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBjcmVhdGVkID0gdHJ1ZTtcXHJcXG5cXHJcXG4gICAgYXBwZW5kKCB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhcHBlciwgWyBwcmV2LCBuZXh0IF0gKTtcXHJcXG4gICAgISBwbGFjZWhvbGRlciAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgYmVmb3JlKCB3cmFwcGVyLCB0cmFjayApO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogQ3JlYXRlcyBhbiBhcnJvdyBidXR0b24uXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgSW4gSUUsIEEgU1ZHIGVsZW1lbnQgaXMgZm9jdXNhYmxlLlxcclxcbiAgICpcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBAcGFyYW0gcHJldiAtIERldGVybWluZXMgd2hldGhlciB0byBjcmVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlIGEgcHJldmlvdXMgb3IgbmV4dCBhcnJvdy5cXHJcXG4gICAqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQHJldHVybiBBIGNyZWF0ZWQgYnV0dG9uIGVsZW1lbnQuXFxyXFxuICAgKi9cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJvdyggcHJldjogYm9vbGVhbiApOiBIVE1MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J1dHRvbkVsZW1lbnQge1xcclxcbiAgICBjb25zdCBhcnJvdyA9IGA8YnV0dG9uIGNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzcz1cXCIkeyBjbGFzc2VzLmFycm93IH0gJHsgcHJldiA/IGNsYXNzZXMucHJldiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBjbGFzc2VzLm5leHQgfVxcIiB0eXBlPVxcImJ1dHRvblxcIj5gXFxyXFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICtcXHRgPHN2ZyB4bWxucz1cXCIkeyBYTUxfTkFNRV9TUEFDRSB9XFwiIHZpZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3Qm94PVxcIjAgMCAkeyBTSVpFIH0gJHsgU0laRSB9XFwiIHdpZHRoPVxcIiR7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTSVpFIH1cXCIgaGVpZ2h0PVxcIiR7IFNJWkUgfVxcIiBmb2N1c2FibGU9XFwiZmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHNlXFwiPmBcXHJcXG4gICAgICArIGA8cGF0aCBkPVxcIiR7IG9wdGlvbnMuYXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293UGF0aCB8fCBQQVRIIH1cXCIgLz5gO1xcclxcblxcclxcbiAgICByZXR1cm4gcGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnNlSHRtbDxIVE1MQnV0dG9uRWxlbWVudD4oIGFycm93ICk7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBVcGRhdGVzIHN0YXR1cyBvZiBhcnJvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBzdWNoIGFzIGBkaXNhYmxlZGAgYW5kIGBhcmlhLWxhYmVsYC5cXHJcXG4gICAqLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHJldiAmJiBuZXh0ICkge1xcclxcbiAgICAgIGNvbnN0IGluZGV4ICAgICA9IFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUuaW5kZXg7XFxyXFxuICAgICAgY29uc3QgcHJldkluZGV4ID0gQ29udHJvbGxlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0UHJldigpO1xcclxcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IENvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmdldE5leHQoKTtcXHJcXG4gICAgICBjb25zdCBwcmV2TGFiZWwgPSBwcmV2SW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID4gLTEgJiYgaW5kZXggPCBwcmV2SW5kZXggPyBpMThuLmxhc3QgOiBpMThuLnByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2O1xcclxcbiAgICAgIGNvbnN0IG5leHRMYWJlbCA9IG5leHRJbmRleCA+IC0xICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbmRleCA+IG5leHRJbmRleCA/IGkxOG4uZmlyc3QgOiBpMThuLm5leHQ7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIHByZXYuZGlzYWJsZWQgPSBwcmV2SW5kZXggPCAwO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBuZXh0LmRpc2FibGVkID0gbmV4dEluZGV4IDwgMDtcXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgc2V0QXR0cmlidXRlKCBwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGFiZWwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBuZXh0LCBBUklBX0xBQkVMLCBuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xhYmVsICk7XFxyXFxuXFxyXFxuICAgICAgZW1pdCggRVZFTlRfQVJST1dTX1VQRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVEVELCBwcmV2LCBuZXh0LCBwcmV2SW5kZXgsIG5leHRJbmRleCApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgYXJyb3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyxcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3ksXFxyXFxuICAgIHVwZGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCIvKipcXHJcXG4gKiBUaGUgbmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzcGFjZSBmb3IgU1ZHIGVsZW1lbnRzLlxcclxcbiAqL1xcclxcbmV4cG9ydCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuc3QgWE1MX05BTUVfU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgYXJyb3cgcGF0aC5cXHJcXG4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiovXFxyXFxuZXhwb3J0IGNvbnN0IFBBVEggPSAnbTE1LjUgMC45MzItNC4zIDQuMzggIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAxNC42LTE0LjYgNC40LTQuMy00LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI0LTQuNC0xNC42LTE0LjZ6JztcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBTVkcgd2lkdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoIGFuZCBoZWlnaHQuXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IFNJWkUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNDA7XFxyXFxuIiwiaW1wb3J0IHsgQVJJQV9DT05UUk9MUywgQVJJQV9MQUJFTCB9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicm9tICcuLi8uLi9jb25zdGFudHMvYXR0cmlidXRlcyc7XFxyXFxuaW1wb3J0IHsgQ0wiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQVNTX0FDVElWRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jbGFzc2VzJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1wb3J0IHtcXHJcXG4gIEVWRU5UX0FVVE9QTEFZX1BBVVNFLFxcclxcbiAgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0FVVE9QTEFZX1BMQVksXFxyXFxuICBFVkVOVF9BVVRPUExBWV9QTEFZSU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxcXHJcXG4gIEVWRU5UX01PVkUsXFxyXFxuICBFVkVOVF9SRUZSRVNILFxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIEVWRU5UX1NDUk9MTCxcXHJcXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSwgUmVxdWVzdEludGVydmFsIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInlwZXMnO1xcclxcbmltcG9ydCB7IGdldEF0dHJpYnV0ZSwgc2V0QXR0cmlidXRlLCBzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInR5bGUsIHRvZ2dsZUNsYXNzIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSB9IGZyb20gJy4vY29uc3RhbnRzJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBBdXRvcGxheSBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBBdXRvcGxheUNvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIHBsYXkoKTogdm9pZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBwYXVzZSgpOiB2b2lkO1xcclxcbiAgaXNQYXVzZWQoKTogYm9vbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW47XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvciBhdXRvcGxheSwgaGFuZGxpbmcgYSBwcm9ncmVzcyBiYXIgYW5kIGEgdG9nZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZSBidXR0b24uXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gKiBAcGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5cXHJcXG4gKiBAcGFyYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50cy5cXHJcXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAqXFxyXFxuICogQHJldHVybiBBbiBBdXRvcGxheSBjb21wb25lbnQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gQXV0b3BsYXkoIFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGU6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMgKTogQXV0b3BsYXlDb21wb25lbnQge1xcclxcbiAgY29uc3QgeyBvbiwgYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbCggb3B0aW9ucy5pbnRlcnZhbCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIFNwbGlkZS5nby5iaW5kKCBTcGxpZGUsICc+JyApLCBvbkFuaW1hdGlvbkZyYW1lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgY29uc3QgeyBpc1BhdXNlZCB9ID0gaW50ZXJ2YWw7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgeyBFbGVtZW50cywgRWxlbWVudHM6IHsgcm9vdCwgdG9nZ2xlIH0gfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBhdXRvcGxheSB9ID0gb3B0aW9uczsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVyIGlzIGhvdmVyZWQgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBsZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hvdmVyZWQ6IGJvb2xlYW47XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZXMgd2hldGhlciBvbmUgb2Ygc2xpZGVyIGVsZW1lbnRzIGhhcyBmb2N1cyBvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgbm90LlxcclxcbiAgICovXFxyXFxuICBsZXQgZm9jdXNlZDogYm9vbGVhbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBhdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BsYXkgaXMgc3RvcHBlZCBvciBub3QuXFxyXFxuICAgKiBJZiBzdG9wcGVkLCBhdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib3BsYXkgd29uJ3Qgc3RhcnQgYXV0b21hdGljYWxseSB1bmxlc3MgYHBsYXkoKWAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzIGV4cGxpY2l0bHkgY2FsbGVkLlxcclxcbiAgICovXFxyXFxuICBsZXQgc3RvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwZWQgPSBhdXRvcGxheSA9PT0gJ3BhdXNlJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIENhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xcclxcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBhdXRvcGxheSApIHtcXHJcXG4gICAgICBsaXN0ZW4oKTtcXHJcXG4gICAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29nZ2xlICYmIHNldEF0dHJpYnV0ZSggdG9nZ2xlLCBBUklBX0NPTlRST0xTLCBFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMudHJhY2suaWQgKTtcXHJcXG4gICAgICBzdG9wcGVkIHx8IHBsYXkoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgICAgdXBkYXRlKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAvKipcXHJcXG4gICAqIExpc3RlbnMgdG8gc29tZSBldmVudHMuXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICovXFxyXFxuICBmdW5jdGlvbiBsaXN0ZW4oKTogdm9pZCB7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoIG9wdGlvbnMucGF1c2VPbkhvdmVyICkge1xcclxcbiAgICAgIGJpbmQoIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib290LCAnbW91c2VlbnRlciBtb3VzZWxlYXZlJywgZSA9PiB7XFxyXFxuICAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaG92ZXJlZCA9IGUudHlwZSA9PT0gJ21vdXNlZW50ZXInO1xcclxcbiAgICAgICAgYXUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9Ub2dnbGUoKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGlmICggb3B0aW9ucy5wYXVzZU9uRm9jdXMgKSB7XFxyXFxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGJpbmQoIHJvb3QsICdmb2N1c2luIGZvY3Vzb3V0JywgZSA9PiB7XFxyXFxuICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgZm9jdXNlZCA9IGUudHlwZSA9PT0gJ2ZvY3VzaW4nO1xcclxcbiAgICAgICAgYXUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG9Ub2dnbGUoKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH1cXHJcXG5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIGlmICggdG9nZ2xlICkge1xcclxcbiAgICAgIGJpbmQoIHRvZ2dsZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICdjbGljaycsICgpID0+IHtcXHJcXG4gICAgICAgIHN0b3BwZWQgPyBwbGF5KCkgOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2UoIHRydWUgKTtcXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIG9uKCBbIEVWRU5UX01PVkUsIEVWRU5UX1NDUk9MTCwgRVZFTlRfUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRlJFU0ggXSwgaW50ZXJ2YWwucmV3aW5kICk7XFxyXFxuICAgIG9uKCBFVkVOVF9NTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWRSwgb25Nb3ZlICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBTdGFydHMgYXV0b3BsYXkgYW5kIGNsZWFycyBhbGwgZmxhZ3MuXFxyXFxuICAgKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBmdW5jdGlvbiBwbGF5KCk6IHZvaWQge1xcclxcbiAgICBpZiAoIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BhdXNlZCgpICYmIENvbXBvbmVudHMuU2xpZGVzLmlzRW5vdWdoKCkgKSB7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGludGVydmFsLnN0YXJ0KCAhIG9wdGlvbnMucmVzZXRQcm9ncmVzcyApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICBmb2N1c2VkID0gaG92ZXJlZCA9IHN0b3BwZWQgPSBmYWxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XFxyXFxuICAgICAgdXBkYXRlKCk7XFxyXFxuICAgICAgZW1pdCggRVZFTlRfQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVVE9QTEFZX1BMQVkgKTtcXHJcXG4gICAgfVxcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogUGF1c2VzIGF1dG9wbGF5LlxcclxcbiAgICpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gc3RvcCAtIElmIGB0cnVlYCwgYXV0b3BsYXkga2VlcHMgcGF1c2VkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1bnRpbCBgcGxheSgpYCBpcyBleHBsaWNpdGx5IGNhbGxlZC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIHBhdXNlKCBzdG9wID0gdHJ1ZSApOiB2b2lkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHN0b3BwZWQgPSAhISBzdG9wO1xcclxcbiAgICB1cGRhdGUoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgIGlmICggISBpc1BhdXNlZCgpICkge1xcclxcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcnZhbC5wYXVzZSgpO1xcclxcbiAgICAgIGVtaXQoIEVWRU5UX0FVVE9QTEFZX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVVTRSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBUb2dnbGVzIHBsYXkvcGF1c2UgYWNjb3JkaW5nIHRvIGN1cnJlbnQgZmxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dzLlxcclxcbiAgICogSWYgYXV0b3BsYXkgaXMgbWFudWFsbHkgcGF1c2VkLCB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB3aWxsIGRvIG5vdGhpbmcuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGF1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvVG9nZ2xlKCk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgc3RvcHBlZCApIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgICAgaG92ZXJlZCB8fCBmb2N1c2VkID8gcGF1c2UoIGZhbHNlICkgOiBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xheSgpO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBVcGRhdGVzIHRoZSB0b2dnbGUgYnV0dG9uIHN0YXR1cy5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggdG9nZ2xlICkge1xcclxcbiAgICAgIHRvZ2dsZUNsYXNzKCB0b2dnbGUsIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BQ1RJVkUsICEgc3RvcHBlZCApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggdG9nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImdsZSwgQVJJQV9MQUJFTCwgb3B0aW9ucy5pMThuWyBzdG9wcGVkID8gJ3BsYXknICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6ICdwYXVzZScgXSApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICAgKiBDYWxsZWQgb24gZXZlcnkgYW5pbWF0aW9uIGZyYW1lIHdoaWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBhdXRvcGxheSBpcyBhY3RpdmUuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByYXRlIC0gVGhlIHByb2dyZXNzIHJhdGUgYmV0d2VlbiAwIGFuZCAxLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZSggcmF0ZTogbnVtYmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBiYXIgfSA9IEVsZW1lbnRzO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAgYmFyICYmIHN0eWxlKCBiYXIsICd3aWR0aCcsIGAkeyByYXRlICogMTAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCB9JWAgKTtcXHJcXG4gICAgZW1pdCggRVZFTlRfQVVUT1BMQVlfUExBWUlORywgcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGUgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Mgb3IgcmVzdG9yZXMgdGhlIGludGVydmFsIGR1cmF0aW9uLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBbiBpbmRleCB0byBtb3ZlIHRvLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gb25Nb3ZlKCBpbmRleDogbnVtYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgU2xpZGUgPSBDb21wb25lbnRzLlNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuZ2V0QXQoIGluZGV4ICk7XFxyXFxuICAgIGludGVydmFsLnNldCggU2xpZGUgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICtnZXRBdHRyaWJ1dGUoIFNsaWRlLnNsaWRlLCBJTlRFUlZBTF9EQVRBX0FUVFJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JVVEUgKSB8fCBvcHRpb25zLmludGVydmFsICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIGRlc3Ryb3k6IGludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZhbC5jYW5jZWwsXFxyXFxuICAgIHBsYXksXFxyXFxuICAgIHBhdXNlLFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaXNQYXVzZWQsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBFVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfTEFaWUxPQURfTE9BREVELCBFVkVOVF9NT1VOVEVELCBFVkVOVF9SRUZSRVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSCwgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjtcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXBvIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBhcHBseSwgY2hpbGQsIGRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImltcG9ydCB7IFNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi4vU2xpZGVzL1NsaWRlJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoZSBDb3ZlciBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBDb3ZlckNvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG59XFxyXFxuXFxyXFxuLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIHNldHRpbmcgdGhlIGltYWdlIGFzIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugc2xpZGUgYmFja2dyb3VuZC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgQ292ZXIgY29tcG9uZW50IG9iamVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIENvdmVyKCBTcGxpZGU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk6IENvdmVyQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgb24gfSA9IEV2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZSggU3BsaWRlICk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5jb3ZlciApIHtcXHJcXG4gICAgICBvbiggRVZFTlRfTEFaWUxPQURfTE9BREUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCwgYXBwbHkoIHRvZ2dsZSwgdHJ1ZSApICk7XFxyXFxuICAgICAgb24oIFsgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX01PVU5URUQsIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0ggXSwgYXBwbHkoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb3ZlciwgdHJ1ZSApICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIFNldHMvcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBpbWFnZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8vZnJvbSBhbGwgc2xpZGVzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY292ZXIgLSBJZiBgZmFsc2VgLCByZW1vdmVzIHRoZSBiYWNrZ3JvdW5kIGltYWdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY292ZXIoIGNvdmVyOiBib29sZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiApOiB2b2lkIHtcXHJcXG4gICAgQ29tcG9uZW50cy5TbGlkZXMuZm9yRWFjaCggUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlID0+IHtcXHJcXG4gICAgICBjb25zdCBpbWcgPSBjaGlsZDxIVE1MSW1hZ2VFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlbWVudD4oIFNsaWRlLmNvbnRhaW5lciB8fCBTbGlkZS5zbGlkZSwgJ2ltZycgKTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgICAgaWYgKCBpbWcgJiYgaW1nLnNyYyApIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB0b2dnbGUoIGNvdmVyLCBpbWcsIFNsaWRlICk7XFxyXFxuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU2V0cy9yZW1vdmVzIHRoZSBiYWNrZ3JvdW5kIGltYWdlIHRvL2Zyb20gdGhlIHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQgZWxlbWVudC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gY292ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gSWYgYGZhbHNlYCwgcmVtb3ZlcyB0aGUgYmFja2dyb3VuZCBpbWFnZS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcGFyYW0gaW1nICAgLSBBIHRhcmdldCBpbWFnZSBlbGVtZW50LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBTbGlkZSAtIEEgU2xpZGVDb21wb25lbnQgb2JqZWN0IHdoZXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgaW1hZ2UgYmVsb25ncy5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2dsZSggY292ZXI6IGJvb2xlYW4sIGltZzogSFRNTEltYWdlRWxlbWVudCwgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlOiBTbGlkZUNvbXBvbmVudCApOiB2b2lkIHtcXHJcXG4gICAgU2xpZGUuc3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAnYmFja2dyb3VuZCcsIGNvdmVyID8gYGNlbnRlci9jb3ZlciBuby1yZXBlYXQgdSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybChcXCIkeyBpbWcuc3JjIH1cXCIpYCA6IFwnXCcsIHRydWUgKTtcXHJcXG4gICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpc3BsYXkoIGltZywgY292ZXIgPyAnbm9uZScgOiAnJyApO1xcclxcbiAgfVxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcclxcbiAgICBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveTogYXBwbHkoIGNvdmVyLCBmYWxzZSApLFxcclxcbiAgfTtcXHJcXG59XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiIsImltcG9ydCB7IEVWRU5UX01PVkUsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQ1JPTEwsIEVWRU5UX1NDUk9MTEVELCBFVkVOVF9VUERBVEVEIH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IElETEUsIFNDUk9MTElOIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkcgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBTIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkxJREUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmltcG9ydCB7IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBFdmVudEludGVyZmFjZSwgUmVxdWVzdEludGVydmFsLCBSZXF1ZXN0SW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaW1wb3J0IHsgQW55RnVuY3Rpb24sIEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFicywiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGFwcGx5LCBhcHByb3hpbWF0ZWx5RXF1YWwsIGZsb29yLCBtYXgsIHNpZ24gfSBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJvbSAnLi4vLi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IEJBU0VfVkVMT0NJVFksIEJPIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VOQ0VfRElGRl9USFJFU0hPTEQsIEJPVU5DRV9EVVJBVElPTiwgRlJJQ1RJT05fRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJBQ1RPUiwgTUlOX0RVUkFUSU9OIH0gZnJvbSAnLi9jb25zdGFudHMnO1xcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgU2NyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sbCBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBTY3JvbGxDb21wb25lbnQgZXh0ZW5kcyBCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FzZUNvbXBvbmVudCB7XFxyXFxuICBzY3JvbGwoIHBvc2l0aW9uOiBudW1iZXIsIGR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhdGlvbj86IG51bWJlciwgc25hcD86IGJvb2xlYW4sIGNhbGxiYWNrPzogQW55RicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uICk6IHZvaWQ7XFxyXFxuICBjYW5jZWwoKTogdm9pZDtcXHJcXG59XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIHNjcm9sbGluZyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgU2Nyb2xsIGNvbXBvbmVudCBvYmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0LlxcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBTY3JvbGwoIFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IFNwbGlkZSwgQ29tcG9uZW50czogQ29tcG9uZW50cywgb3B0aW9uczogT3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMgKTogU2Nyb2xsQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgb24sIGVtaXQgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBFdmVudEludGVyZmFjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCB7IHN0YXRlOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBzZXQgfSB9ID0gU3BsaWRlO1xcclxcbiAgY29uc3QgeyBNb3ZlIH0gPSBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cztcXHJcXG4gIGNvbnN0IHsgZ2V0UG9zaXRpb24sIGdldExpbWl0LCBleGNlZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWRMaW1pdCwgdHJhbnNsYXRlIH0gPSBNb3ZlO1xcclxcbiAgY29uc3QgaXNTbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBTcGxpZGUuaXMoIFNMSURFICk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRhaW5zIHRoZSBhY3RpdmUgUmVxdWVzdEludGVydmFsIG9iamVjdC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGxldCBpbnRlcnZhbDogUmVxdWVzdEludGVydmFsSW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSG9sZHMgdGhlIGNhbGxiYWNrICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGNhbGxiYWNrOiBBbnlGdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb247XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBjdXJyZW50IGZyaWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiAoPD0gMSkuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBmcmljdGlvbiA9IDE7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTogdm9pZCB7XFxyXFxuICAgIG9uKCBFVkVOVF9NT1ZFLCBjbGVhciApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgb24oIFsgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCBdLCBjYW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFNjcm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHRoZSBzbGlkZXIgdG8gdGhlIHByb3ZpZGVkIGRlc3RpbmF0aW9uLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gLSBUaGUgZGVzdGluYXRpb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvIHNjcm9sbCB0aGUgc2xpZGVyIHRvLlxcclxcbiAgICogQHBhcmFtIGR1cmF0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAtIE9wdGlvbmFsLiBUaGUgc2Nyb2xsIGR1cmF0aW9uLiBJZiBvbWl0dGVkLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsY3VsYXRlcyBpdCBieSB0aGUgZGlzdGFuY2UuXFxyXFxuICAgKiBAcGFyYW0gc24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXAgICAgICAgIC0gT3B0aW9uYWwuIFdoZXRoZXIgdG8gc25hcCB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0byB0aGUgY2xvc2VzdCBzbGlkZSBvciBub3QuXFxyXFxuICAgKiBAcGFyYW0gb25TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nyb2xsZWQgIC0gT3B0aW9uYWwuIEEgY2FsbGJhY2sgaW52b2tlZCBhZnRlciBzYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb2xsIGVuZHMuXFxyXFxuICAgKiBAcGFyYW0gbm9Db25zdHJhaW4gLSBPcHRpb25hbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuIFdoZXRoZXIgdG8gc3VwcHJlc3MgY29uc3RyYWludCBwcm9jZXNzIHdoZW4gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXIgZXhjZWVkcyBib3VuZHMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBzY3JvbGwoXFxyXFxuICAgIGRlc3RpbmF0aW9uOiBudW1iZXIsXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBkdXJhdGlvbj86IG51bWJlcixcXHJcXG4gICAgc25hcD86IGJvb2xlYW4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBvblNjcm9sbGVkPzogQW55RnVuY3Rpb24sXFxyXFxuICAgIG5vQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0cmFpbj86IGJvb2xlYW5cXHJcXG4gICk6IHZvaWQge1xcclxcbiAgICBjb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgZnJvbSA9IGdldFBvc2l0aW9uKCk7XFxyXFxuXFxyXFxuICAgIGNsZWFyKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoIHNuYXAgJiYgKCAhIGlzU2xpZGUgfHwgISBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZWVkZWRMaW1pdCgpICkgKSB7XFxyXFxuICAgICAgY29uc3Qgc2l6ZSAgID0gQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMuTGF5b3V0LnNsaWRlclNpemUoKTtcXHJcXG4gICAgICBjb25zdCBvZmZzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID0gc2lnbiggZGVzdGluYXRpb24gKSAqIHNpemUgKiBmbG9vciggYWJzKCBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGluYXRpb24gKSAvIHNpemUgKSB8fCAwO1xcclxcbiAgICAgIGRlc3RpbmF0aW9uID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUudG9Qb3NpdGlvbiggQ29tcG9uZW50cy5Db250cm9sbGVyLnRvRGVzdCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3RpbmF0aW9uICUgc2l6ZSApICkgKyBvZmZzZXQ7XFxyXFxuICAgIH1cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIGNvbnN0IG5vRGlzdGFuY2UgPSBhcHByb3hpbWF0ZWx5RXF1YWwoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmcm9tLCBkZXN0aW5hdGlvbiwgMSApO1xcclxcblxcclxcbiAgICBmcmljdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSAxO1xcclxcbiAgICBkdXJhdGlvbiA9IG5vRGlzdGFuY2UgPyAwIDogZHVyYXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IG1heCggYWJzKCBkZXN0aW5hdGlvbiAtIGZyb20gKSAvIEJBU0VfVkVMT0NJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RZLCBNSU5fRFVSQVRJT04gKTtcXHJcXG4gICAgY2FsbGJhY2sgPSBvblNjcm9sbGVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG4gICAgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoIGR1cmF0aW9uLCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25FbmQsIGFwcGx5KCB1cGRhdGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaW4gKSwgMSApO1xcclxcblxcclxcbiAgICBzZXQoIFNDUk9MTElORyApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZW1pdCggRVZFTlRfU0NST0xMICk7XFxyXFxuICAgIGludGVydmFsLnN0YXJ0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW4gc2Nyb2xsIGVuZHMgb3IgaGFzIGJlZW4ganVzdCBjYW5jZWxlZC5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIGZ1bmN0aW9uIG9uRW5kKCk6IHZvaWQge1xcclxcbiAgICBzZXQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBJRExFICk7XFxyXFxuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbWl0KCBFVkVOVF9TQ1JPTExFRCApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAgICogQ2FsbGVkIHdoZW5ldmVyIHRoZSBpbnRlcnZhbCB0aW1lciBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdXBkYXRlZC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZnJvbSAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC0gQSBwb3NpdGlvbiB3aGVyZSBzY3JvbGwgc3RhcnRzLlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSB0byAgICAgICAgICAtIEEgZGVzdGluYXRpb24gd2hlcmUgdGhlIHNsaWRlciBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29lcy5cXHJcXG4gICAqIEBwYXJhbSBub0NvbnN0cmFpbiAtIFdoZXRoZXIgdG8gc3VwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXNzIGNvbnN0cmFpbnQgcHJvY2VzcyB3aGVuIHRoZSBzbGlkZXIgZXhjZWVkcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYm91bmRzLlxcclxcbiAgICogQHBhcmFtIHJhdGUgICAgICAgIC0gQSBjdXJyZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiB1cGRhdGUoIGZyb206IG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW1iZXIsIHRvOiBudW1iZXIsIG5vQ29uc3RyYWluOiBib29sZWFuIHwgdW5kZWZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lZCwgcmF0ZTogbnVtYmVyICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gPSBnZXRQb3NpdGlvbigpO1xcclxcbiAgICBjb25zdCB0YXJnZXQgICA9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgKCB0byAtIGZyb20gKSAqIGVhc2luZyggcmF0ZSApO1xcclxcbiAgICBjb25zdCBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmZiAgICAgPSAoIHRhcmdldCAtIHBvc2l0aW9uICkgKiBmcmljdGlvbjtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAgIHRyYW5zbGF0ZSggcG9zaXRpb24gKyBkaWZmICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBpZiAoIGlzU2xpZGUgJiYgISBub0NvbnN0cmFpbiAmJiBleGNlZWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RMaW1pdCgpICkge1xcclxcbiAgICAgIGZyaWN0aW9uICo9IEZSSUNUSU9OX0ZBQ1RPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1I7XFxyXFxuXFxyXFxuICAgICAgaWYgKCBhYnMoIGRpZmYgKSA8IEJPVU5DRV9ESScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGRl9USFJFU0hPTEQgKSB7XFxyXFxuICAgICAgICBzY3JvbGwoIGdldExpbWl0KCBleCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZWVkZWRMaW1pdCggdHJ1ZSApICksIEJPVU5DRV9EVVJBVElPTiwgZmFsc2UsIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxsYmFjaywgdHJ1ZSApO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2xlYXJzIHRoZSBhY3RpdmUgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjbGVhcigpOiB2b2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCB7XFxyXFxuICAgIGlmICggaW50ZXJ2YWwgKSB7XFxyXFxuICAgICAgaW50ZXJ2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsLmNhbmNlbCgpO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBDYW5jZWxzIHRoZSBhY3RpdmUgaW50ZXJ2YWwgYW5kIGVtaXRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgYHNjcm9sbGVkYCBldmVudC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbmNlbCgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBpbnRlcnZhbCAmJiAhIGludGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnZhbC5pc1BhdXNlZCgpICkge1xcclxcbiAgICAgIGNsZWFyKCk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9uRW5kKCk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIFRoZSBlYXNpbmcgZnVuY3Rpb24uXFxyXFxuICAgKlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSB0IC0gQSB2YWx1ZSB0byBlYXNlLlxcclxcbiAgICpcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcmV0dXJuIEFuIGVhc2VkIHZhbHVlLlxcclxcbiAgICovXFxyXFxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gZWFzaW5nKCB0OiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3sgZWFzaW5nRnVuYyB9ID0gb3B0aW9ucztcXHJcXG4gICAgcmV0dXJuIGVhc2luZ0Z1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jID8gZWFzaW5nRnVuYyggdCApIDogMSAtIE1hdGgucG93KCAxIC0gdCwgNCApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIHJldHVybiB7XFxyXFxuICAgIG1vdW50LFxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgZGVzdHJveTogY2xlYXIsXFxyXFxuICAgIHNjcm9sbCxcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhbmNlbCxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsIi8qKlxcclxcbiAqIFRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnZ2VycyB0aGUgYm91bmNlIGVmZmVjdCB3aGVuIHRoZSBkaWZmIGJlY29tZXMgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3MgdGhhbiB0aGlzIHZhbHVlLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zdCBCT1VOQ0VfRElGRl9USFJFU0hPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xEID0gMTA7XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGR1cmF0aW9uIG9mIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgYm91bmNlIGVmZmVjdC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKi9cXHJcXG5leHBvcnQgY29uc3QgQk9VTkNFX0RVUkFUSU9OID0gNjAwO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgZnJpY3Rpb24gZmFjdG9yLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgRlJJQ1RJT05fRkFDVE9SID0gMC42O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgdmVsb2NpdHkgdG8gY2FsY3VsYXRlIHRoZSBzY3JvbGwgZHVyYXRpb24uXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBCQVNFX1ZFTE9DSVRZID0gMS41O1xcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luaW11bSBkdXJhdGlvbiBvZiBzY3JvbGwuXFxyXFxuICpcXHJcXG4gKiBAc2luYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IE1JTl9EVVJBVElPTiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSA4MDA7XFxyXFxuIiwiaW1wb3J0IHsgQ0xBU1NfQVJST1csIENMQVNTX1BBR0lOQVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiSU9OX1BBR0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3Nlcyc7XFxyXFxuaW0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9ydCB7IEVWRU5UX0RSQUcsIEVWRU5UX0RSQUdHRUQsIEVWRU5UX0RSQUdHSU5HJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRCB9IGZyb20gJy4uLy4uL2NvbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBTQ1JPTExfTElTVEVORVJfT1BUSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbGlzdGVuZXItb3B0aW9ucyc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbmltcG9ydCB7IERSQUdHSU5HLCBJRExFLCBNT1ZJTkcsIFNDUk9MTElORyB9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicm9tICcuLi8uLi9jb25zdGFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBGQURFLCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiTE9PUCwgU0xJREUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdHlwZXMnO1xcclxcbmkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7IGFicywgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzT2JqZWN0LCBtYXRjaGVzLCBtaW4sIG5vb3AsIHByZXZlbnQsIHNpZ24sIHRpbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlT2YgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuaW1wb3J0IHsgRlJJQ1RJT04sICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMT0dfSU5URVJWQUwsIFBPSU5URVJfRE9XTl9FVkVOVFMsIFBPSU5URVJfTU9WRV8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiRVZFTlRTLCBQT0lOVEVSX1VQX0VWRU5UUyB9IGZyb20gJy4vY29uc3RhbnRzJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZSBmb3IgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBEcmFnIGNvbXBvbmVudC5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKi9cXHJcXG5leHBvcnQgaW50ZXJmYWNlIERyYWdDb21wb25lbnQgZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZHMgQmFzZUNvbXBvbmVudCB7XFxyXFxuICBkaXNhYmxlKCBkaXNhYmxlZDogYm9vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlYW4gKTogdm9pZDtcXHJcXG4gIGlzRHJhZ2dpbmcoKTogYm9vbGVhbjtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidufVxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIGRyYWdnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyB0aGUgc2xpZGVyLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKlxcclxcbiAqIEByZXR1cm4gQSBEcmFnIGNvbXBvbmVudCBvYmplY3QuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqL1xcclxcbmV4cG9ydCBmdW5jdGlvbiBEcmFnKCBTcGxpZGU6IFNwbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIERyYWdDb21wb25lbnQge1xcclxcbiAgY29uc3QgeyBvbiwgZW1pdCwgYmluZCwgdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmluZCB9ID0gRXZlbnRJbnRlcmZhY2UoIFNwbGlkZSApO1xcclxcbiAgY29uc3QgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhdGUgfSA9IFNwbGlkZTtcXHJcXG4gIGNvbnN0IHsgTW92ZSwgU2Nyb2xsLCBDb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJvbGxlciwgRWxlbWVudHM6IHsgdHJhY2sgfSwgTWVkaWE6IHsgcmVkdWNlIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyByZXNvbHZlLCBvcmllbnQgfSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDb21wb25lbnRzLkRpcmVjdGlvbjtcXHJcXG4gIGNvbnN0IHsgZ2V0UG9zaXRpb24sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBleGNlZWRlZExpbWl0IH0gPSBNb3ZlO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogVGhlIGJhc2Ugc2xpZGVyIHBvc2l0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgZGVsdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhIG9mIGNvb3Jkcy5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGJhc2VQb3NpdGlvbjonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlcjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGJhc2UgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9iamVjdCBzYXZlZCBwZXIgc3BlY2lmaWMgc2FtcGxpbmcgaW50ZXJ2YWwuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICovXFxyXFxuICBsZXQgYmFzZUV2ZW50OiBUb3VjaEV2ZW50IHwgTW91c2VFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIHRoZSBwcmV2aW91cyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmFzZSBldmVudCBvYmplY3QuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBwcmV2QmFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VFdmVudDogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQ7XFxyXFxuXFxyXFxuICAvKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZHJhZyBtb2RlIGlzIGBmcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZWAgb3Igbm90LlxcclxcbiAgICovXFxyXFxuICBsZXQgaXNGcmVlOiBib29sZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSB1c2VyIGlzIGRyYWdnaW5nIHRoZSBzbGlkZXIgb3Igbm90LlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgbGV0IGRyYWdnaW5nOiBib29sZWFuO1xcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNsaWRlciBleGNlZWRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBsaW1pdHMgb3Igbm90LlxcclxcbiAgICogVGhpcyBtdXN0IG5vdCBiZSBgdW5kZWZpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lZGAgZm9yIHN0cmljdCBjb21wYXJpc29uLlxcclxcbiAgICovXFxyXFxuICBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGV4Y2VlZGVkID0gZmFsc2U7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiducyBpbnRvIGB0cnVlYCB3aGVuIHRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWRlci5cXHJcXG4gICAqL1xcclxcbiAgbGV0IGNsaWNrUHJldmVudGVkOiBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29vbGVhbjtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyIHRoZSBkcmFnIGNvbXBvbmVudCBpcyBub3cgZGlzYWJsZWQgb3Igbm90LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgbGV0IGRpc2FibGVkOiBib29sZWFuO1xcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogVGhlIHRhcmdldCBlbGVtZW50IHRvIGF0dGFjaCBsaXN0ZW5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JzLlxcclxcbiAgICovXFxyXFxuICBsZXQgdGFyZ2V0OiBXaW5kb3cgfCBIVE1MRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW1lbnQ7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgYmluZCggdHJhY2ssIFBPSU5URVJfTU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVfRVZFTlRTLCBub29wLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgYmluZCggdHJhY2ssIFBPSU5URVJfVVBfRVZFTlRTLCBub29wLCBTQ1JPTExfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xJU1RFTkVSX09QVElPTlMgKTtcXHJcXG4gICAgYmluZCggdHJhY2ssIFBPSU5URVJfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RPV05fRVZFTlRTLCBvblBvaW50ZXJEb3duLCBTQ1JPTExfTElTVEVORVJfT1BUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJPTlMgKTtcXHJcXG4gICAgYmluZCggdHJhY2ssICdjbGljaycsIG9uQ2xpY2ssIHsgYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhcHR1cmU6IHRydWUgfSApO1xcclxcbiAgICBiaW5kKCB0cmFjaywgJ2RyYWdzdGFydCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLCBwcmV2ZW50ICk7XFxyXFxuICAgIG9uKCBbIEVWRU5UX01PVU5URUQsIEVWRU5UXyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidVUERBVEVEIF0sIGluaXQgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQuXFxyXFxuICAgKi9cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBmdW5jdGlvbiBpbml0KCk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFnIH0gPSBvcHRpb25zO1xcclxcbiAgICBkaXNhYmxlKCAhIGRyYWcgKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIGlzRnJlZSA9IGRyYWcgPT09ICdmcmVlJztcXHJcXG4gIH1cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IgdG91Y2hlcyB0aGUgc2xpZGVyLlxcclxcbiAgICogLSBOZWVkcyB0byBwcmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgd2hlbiB0aGUgc2xpZGVyIGlzIGJ1c3kgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGRlbnkgYW55IGFjdGlvbiwgc3VjaCBhcyBkcmFnZ2luZyBpbWFnZXNcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiAtIElFIGRvZXMgbm90IHN1cHBvcnQgTW91c2VFdmVudCBhbmQgVG91Y2hFdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgY29uc3RydWN0b3JzXFxyXFxuICAgKiAtIFRoZSBgZHJhZ2dpbmdgIHN0YXRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHdheXMgYmVjb21lcyBgdHJ1ZWAgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nIHdoaWxlIHRoZSBzbGlkZXIgaXMgbW92aW5nXFxyXFxuICAgKlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEBwYXJhbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKCBlOiBUb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hFdmVudCB8IE1vdXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgIGNsaWNrUHJldmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlZCA9IGZhbHNlO1xcclxcblxcclxcbiAgICBpZiAoICEgZGlzYWJsZWQgKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIGNvbnN0IGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQoIGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAgICAgaWYgKCBpc0RyYWdnYWJsZSggZS50YXJnZXQgKSAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgKCBpc1RvdWNoIHx8ICEgZS5idXR0b24gKSApIHtcXHJcXG4gICAgICAgIGlmICggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyEgQ29udHJvbGxlci5pc0J1c3koKSApIHtcXHJcXG4gICAgICAgICAgdGFyZ2V0ICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgPSBpc1RvdWNoID8gdHJhY2sgOiB3aW5kb3c7XFxyXFxuICAgICAgICAgIGRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZ2luZyAgICAgID0gc3RhdGUuaXMoIFsgTU9WSU5HLCBTQ1JPTExJTkcgXSApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICAgICAgcHJldkJhc2VFdmVudCA9IG51bGw7XFxyXFxuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICBiaW5kKCB0YXJnZXQsIFBPSU5URVJfTU9WRV9FVkVOVFMsIG9uUG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW50ZXJNb3ZlLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyApO1xcclxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgYmluZCggdGFyZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXAsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyApO1xcclxcbiAgICAgICAgICBNb3ZlLmNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jZWwoKTtcXHJcXG4gICAgICAgICAgU2Nyb2xsLmNhbmNlbCgpO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgc2F2ZSggZSApO1xcclxcbiAgICAgICAgfSBlbHNlIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHByZXZlbnQoIGUsIHRydWUgKTtcXHJcXG4gICAgICAgIH1cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgfVxcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBDYWxsZWQgd2hpbGUgdGhlIHVzZXIgbW92ZXMgdGhlIHBvaW50ZXIgb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvdWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFxyXFxuICAgKi9cXHJcXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBvblBvaW50ZXJNb3ZlKCBlOiBUb3VjaEV2ZW50IHwgTW91c2VFdmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTogdm9pZCB7XFxyXFxuICAgIGlmICggISBzdGF0ZS5pcyggRFJBR0dJTkcgKSApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgICAgc3RhdGUuc2V0KCBEUkFHR0lORyApO1xcclxcbiAgICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBFVkVOVF9EUkFHICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgaWYgKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5jYW5jZWxhYmxlICkge1xcclxcbiAgICAgIGlmICggZHJhZ2dpbmcgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoIGJhc2VQb3NpdGlvbiArIGNvbnN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhaW4oIGRpZmZDb29yZCggZSApICkgKTtcXHJcXG5cXHJcXG4gICAgICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBleHBpcmVkICAgICA9IGRpZmZUaW1lKCBlICkgPiBMT0dfSU5URVJWQUw7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgICAgY29uc3QgaGFzRXhjZWVkZWQgPSBleGNlZWRlZCAhPT0gKCBleGNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkZWQgPSBleGNlZWRlZExpbWl0KCkgKTtcXHJcXG5cXHJcXG4gICAgICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIGV4cGlyZWQgfHwgaGFzRXhjZWVkZWQgKSB7XFxyXFxuICAgICAgICAgIHNhdmUoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlICk7XFxyXFxuICAgICAgICB9XFxyXFxuXFxyXFxuICAgICAgICBjbGlja1ByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWQgPSB0cnVlO1xcclxcbiAgICAgICAgZW1pdCggRVZFTlRfRFJBR0dJTkcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgICAgICBwcmV2ZW50KCBlICk7XFxyXFxuICAgICAgfSBlbHNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAoIGlzU2xpZGVyRGlyZWN0aW9uKCBlICkgKSB7XFxyXFxuICAgICAgICBkcmFnZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcgPSBzaG91bGRTdGFydCggZSApO1xcclxcbiAgICAgICAgcHJldmVudCggZSApOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAgICB9XFxyXFxuICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzIHBvaW50aW5nICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXZpY2VzLlxcclxcbiAgICogTmVlZHMgdG8gbW92ZSB0aGUgc2xpZGVyIHdoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuOlxcclxcbiAgICogLSBUaGUgdXNlciBkcmFncyB0aGUgc2xpZGVyIGFuZCB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3RhbmNlIGV4Y2VlZHMgdGhlIHRocmVzaG9sZFxcclxcbiAgICogLSBUaGUgdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYWJvcnRlZCB0aGUgc2xpZGVyIG1vdmluZyBieSBwb2ludGVyZG93biBhbmQgaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1c3QgcmVsZWFzZWQgaXQgd2l0aG91dCBkcmFnZ2luZyB0aGUgc2xpZGVyXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICpcXHJcXG4gICAqIEBwYXJhbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IG9iamVjdFxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvblBvaW50ZXJVcCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGU6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6IHZvaWQge1xcclxcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBzdGF0ZS5pcyggRFJBR0dJTkcgKSApIHtcXHJcXG4gICAgICBzdGF0ZS5zZXQoIEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRExFICk7XFxyXFxuICAgICAgZW1pdCggRVZFTlRfRFJBR0dFRCApO1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgICBpZiAoIGRyYWdnaW5nICkge1xcclxcbiAgICAgIG1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlKCBlICk7XFxyXFxuICAgICAgcHJldmVudCggZSApO1xcclxcbiAgICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB1bmJpbmQoIHRhcmdldCwgUE9JTlRFUl9NT1ZFX0VWRU5UUywgb25QJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29pbnRlck1vdmUgKTtcXHJcXG4gICAgdW5iaW5kKCB0YXJnZXQsIFBPSU5URVJfVVBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UUywgb25Qb2ludGVyVXAgKTtcXHJcXG4gICAgZHJhZ2dpbmcgPSBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2U7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlbiB0aGUgdHJhY2sgZWxlbWVudCBpcyBjbGlja2VkLlxcclxcbiAgICogRGlzYWJsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzIGNsaWNrIGFueSBlbGVtZW50cyBpbnNpZGUgaXQgd2hpbGUgZHJhZ2dpbmcuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlIC0gQSBNb3VzZUV2ZW50IG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG9uQ2xpY2soIGU6IE1vdXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50ICk6IHZvaWQge1xcclxcbiAgICBpZiAoICEgZGlzYWJsZWQgJiYgY2xpY2tQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldmVudGVkICkge1xcclxcbiAgICAgIHByZXZlbnQoIGUsIHRydWUgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIH1cXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogU2F2ZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGRhdGEgYXQgdGhlIHNwZWNpZmljIG1vbWVudC5cXHJcXG4gICAqXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIGUgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCBvYmplY3QuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzYXZlKCBlOiBUb3VjaEV2ZW50IHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdXNlRXZlbnQgKTogdm9pZCB7XFxyXFxuICAgIHByZXZCYXNlRXZlbnQgPSBiYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUV2ZW50O1xcclxcbiAgICBiYXNlRXZlbnQgICAgID0gZTtcXHJcXG4gICAgYmFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VQb3NpdGlvbiAgPSBnZXRQb3NpdGlvbigpO1xcclxcbiAgfVxcclxcblxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8qKlxcclxcbiAgICogQ2FsY3VsYXRlcyB0aGUgZGVzdGluYXRpb24gYnkgdGhlIGRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnIHZlbG9jaXR5IGFuZCBtb3ZlcyB0aGUgY2Fyb3VzZWwuXFxyXFxuICAgKiBJZiBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290aW9uIGlzIHJlZHVjZWQsIHJlc3RvcmVzIHRyYW5zaXRpb24gc3BlZWQgdG8gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBpbml0aWFsIHZhbHVlXFxyXFxuICAgKiBiZWNhdXNlIGl0XCdzIFxcImVzc2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRpYWxcXCIgbW90aW9uIGZvciB0aGUgdXNlciB0byByZWNvZ25pemUgd2hhdCBoYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcGVucyBvbiB0aGUgY2Fyb3VzZWwuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0LlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgZnVuY3Rpb24gbW92ZSggZTogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk6IHZvaWQge1xcclxcbiAgICBjb25zdCB2ZWxvY2l0eSAgICA9IGNvbXB1dGVWZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2NpdHkoIGUgKTtcXHJcXG4gICAgY29uc3QgZGVzdGluYXRpb24gPSBjb21wdXRlRGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RpbmF0aW9uKCB2ZWxvY2l0eSApO1xcclxcbiAgICBjb25zdCByZXdpbmQgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBvcHRpb25zLnJld2luZCAmJiBvcHRpb25zLnJld2luZEJ5RHJhZztcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXFxyXFxuICAgIHJlZHVjZSggZmFsc2UgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGcmVlICkge1xcclxcbiAgICAgIENvbnRyb2xsZXIuc2Nyb2xsKCBkZXN0aW5hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIDAsIG9wdGlvbnMuc25hcCApO1xcclxcbiAgICB9IGVsc2UgaWYgKCBTcGxpZGUuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKCBGQURFICkgKSB7XFxyXFxuICAgICAgQ29udHJvbGxlci5nbyggb3JpZW50KCBzaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJnbiggdmVsb2NpdHkgKSApIDwgMCA/ICggcmV3aW5kID8gJzwnIDogJy0nICkgOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiKCByZXdpbmQgPyAnPicgOiAnKycgKSApO1xcclxcbiAgICB9IGVsc2UgaWYgKCBTcGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLmlzKCBTTElERSApICYmIGV4Y2VlZGVkICYmIHJld2luZCApIHtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgQ29udHJvbGxlci5nbyggZXhjZWVkZWRMaW1pdCggdHJ1ZSApID8gJz4nIDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIic8JyApO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIENvbnRyb2xsZXIuZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvKCBDb250cm9sbGVyLnRvRGVzdCggZGVzdGluYXRpb24gKSwgdHJ1ZSApO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxcclxcblxcclxcbiAgICByZWR1Y2UoIHRydWUgKTtcXHJcXG4gIH1cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgZHJhZyBkaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2UgZXhjZWVkcyB0aGUgZGVmaW5lZCB0aHJlc2hvbGQuXFxyXFxuICAgKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIEBwYXJhbSBlIC0gQSBUb3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3RhbmNlIGV4Y2VlZHMgdGhlIHRocmVzaG9sZCwgb3IgYGZhbHNlYCBpZiBubycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzaG91bGRTdGFydCggZTogVG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6IGJvb2xlYW4ge1xcclxcbiAgICBjb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyBkcmFnTWluVGhyZXNob2xkOiB0aHJlc2hvbGRzIH0gPSBvcHRpb25zO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgY29uc3QgaXNPYmogPSBpc09iamVjdCggdGhyZXNob2xkcyApO1xcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3QgbW91c2UgPSBpc09iaiAmJiB0aHJlc2hvbGRzLm1vdXNlIHx8IDA7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICBjb25zdCB0b3VjaCA9ICggaXNPYmogPyB0aHJlc2hvbGRzLnRvdWNoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyt0aHJlc2hvbGRzICkgfHwgMTA7XFxyXFxuICAgIHJldHVybiBhYnMoIGRpZmZDb29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QoIGUgKSApID4gKCBpc1RvdWNoRXZlbnQoIGUgKSA/IHRvdWNoIDogbW91c2UgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyB3aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhlciBkcmFnZ2luZyB0b3dhcmRzIHRoZSBzbGlkZXIgb3IgdGhlIHNjcm9sbCBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lyZWN0aW9uLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkcmFnZ2luZyB0b3dhcmRzIHRoZSBzbGlkZXIgZGlyZWN0aW9uLCBvciBvdGhlcncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNlIGBmYWxzZWAuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGUgLSBBIFRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VjaEV2ZW50IG9yIE1vdXNlRXZlbnQgb2JqZWN0XFxyXFxuICAgKi9cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBpc1NsaWRlckRpcmVjdGlvbiggZTogVG91Y2hFdmVudCB8IE1vdXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUV2ZW50ICk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gYWJzKCBkaWZmQ29vcmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCBlICkgKSA+IGFicyggZGlmZkNvb3JkKCBlLCB0cnVlICkgKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbXB1dGVzIHRoZSBkcmFnIHZlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvY2l0eS5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgVG91Y2hFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgb3IgTW91c2VFdmVudCBvYmplY3RcXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBUaGUgZHJhZyB2ZWxvY2l0eS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGNvbXB1dGVWZWxvY2l0eSggZTogVG91Y2hFdmVudCB8IE1vdXNlRXZlbnQgKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG51bWJlciB7XFxyXFxuICAgIGlmICggU3BsaWRlLmlzKCBMT09QICkgfHwgISBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWQgKSB7XFxyXFxuICAgICAgY29uc3QgdGltZSA9IGRpZmZUaW1lKCBlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcblxcclxcbiAgICAgIGlmICggdGltZSAmJiB0aW1lIDwgTE9HX0lOVEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUlZBTCApIHtcXHJcXG4gICAgICAgIHJldHVybiBkaWZmQ29vcmQoIGUgKSAvIHRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xcclxcbiAgICAgIH1cXHJcXG4gICAgfVxcclxcblxcclxcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENvbXB1dGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgZGVzdGluYXRpb24gYnkgdGhlIHZlbG9jaXR5IGFuZCB0aGUgYGZsaWNrUG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2VyYCBvcHRpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZlbG9jaXR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAtIFRoZSBkcmFnIHZlbG9jaXR5LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIFRoZSBkZXN0aW5hdGlvbi5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXB1dGVEZXN0aW5hdGlvbiggdmVsb2NpdHk6IG51bWJlciApOiBudW1iZXIge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKCkgKyBzaWduKCB2ZWxvY2l0eSApICogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pbihcXHJcXG4gICAgICBhYnMoIHZlbG9jaXR5ICkgKiAoIG9wdGlvbnMuZmxpY2tQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293ZXIgfHwgNjAwICksXFxyXFxuICAgICAgaXNGcmVlID8gSW5maW5pdHkgOiBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50cy5MYXlvdXQubGlzdFNpemUoKSAqICggb3B0aW9ucy5mbGlja01heFBhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyB8fCAxIClcXHJcXG4gICAgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFJldHVybnMgdGhlIGNvb3JkIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3ZpZGVkIGFuZCBiYXNlIGV2ZW50cy5cXHJcXG4gICAqXFxyXFxuICAgKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIGUgICAgICAgICAgLSBBIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudCBvYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0LlxcclxcbiAgICogQHBhcmFtIG9ydGhvZ29uYWwgLSBPcHRpb25hbC4gSWYgYCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlYCwgcmV0dXJucyB0aGUgY29vcmQgb2YgdGhlIG9ydGhvZ29uYWwgYXhpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdhaW5zdCB0aGUgZHJhZyBvbmUuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gVGhlIGRpZmZlcmVuY2Ugb2YgdGhlIGNvb3JkLlxcclxcbiAgICovXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gZGlmZkNvb3JkKCBlOiBUb3VjaEV2ZW50IHwgTW91c2VFdmVudCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9ydGhvZ29uYWw/OiBib29sZWFuICk6IG51bWJlciB7XFxyXFxuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29vcmRPZiggZSwgb3J0aG9nb25hbCApIC0gY29vcmRPZiggZ2V0QmFzZUV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggZSApLCBvcnRob2dvbmFsICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKionCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgKiBSZXR1cm5zIHRoZSBlbGFwc2VkIHRpbWUgZnJvbSB0aGUgYmFzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQgdG8gYGVgLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlIC0gQSBUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291Y2hFdmVudCBvciBNb3VzZUV2ZW50IG9iamVjdC5cXHJcXG4gICAqXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICogQHJldHVybiBUaGUgZWxhcHNlZCB0aW1lIGluIG1pbGxpc2Vjb25kcy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGRpZmZUaW1lKCBlOiBUb3VjaEV2ZW50IHwgTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdXNlRXZlbnQgKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIHRpbWVPZiggZSApICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIHRpbWVPZiggZ2V0QmFzZUV2ZW50KCBlICkgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGJhc2UgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogSWYgdGhlIGJhc2UgZXZlbnQgaXMgc2FtZSB3aXRoIGBlYCwgcmV0dXJucyBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldmlvdXMgb25lLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBlIC0gQSBUbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1Y2hFdmVudCBvciBNb3VzZUV2ZW50IG9iamVjdC5cXHJcXG4gICAqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHJldHVybiBBIGJhc2UgZXZlbnQuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBnZXRCYXNlRXZlbnQoIGU6IFRvdWNoRXZlbnQgfCBNb3VzZUV2ZW50ICk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUb3VjaEV2ZW50IHwgTW91c2VFdmVudCB7XFxyXFxuICAgIHJldHVybiBiYXNlRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ID09PSBlICYmIHByZXZCYXNlRXZlbnQgfHwgYmFzZUV2ZW50O1xcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgYHBhZ2VYYCBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kIGBwYWdlWWAgY29vcmRpbmF0ZXMgcHJvdmlkZWQgYnkgdGhlIGV2ZW50LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEJlIGF3YXJlIHRoYXQgSUUgZG9lcyBub3Qgc3VwcG9ydCBib3RoIFRvdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaEV2ZW50IGFuZCBNb3VzZUV2ZW50IGNvbnN0cnVjdG9ycy5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHBhcmFtIGUgICAgICAgICAgLSBBIFRvdWNoRXZlbnQgb3IgTW91JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlRXZlbnQgb2JqZWN0LlxcclxcbiAgICogQHBhcmFtIG9ydGhvZ29uYWwgLSBPcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uYWwuIElmIGB0cnVlYCwgcmV0dXJucyB0aGUgY29vcmQgb2YgdGhlIG9ydGhvZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmFsIGF4aXMgYWdhaW5zdCB0aGUgZHJhZyBvbmUuXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gQSBwYWdlWCBvciBwYWdlWSBjb29yZGluYXRlLlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgZnVuY3Rpb24gY29vcmRPZiggZTogVG91Y2hFdmVudCB8IE1vdXNlRXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBvcnRob2dvbmFsPzogYm9vbGVhbiApOiBudW1iZXIge1xcclxcbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuICggaXNUb3VjaEV2ZW50KCBlICkgPyBlLmNoYW5nZWRUb3VjaGVzWyAwIF0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjogZSApWyBgcGFnZSR7IHJlc29sdmUoIG9ydGhvZ29uYWwgPyAnWScgOiAnWCcgKSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfWAgXTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVkdWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgdGhlIGRpc3RhbmNlIHRvIG1vdmUgYnkgdGhlIHByZWRlZmluZWQgZnJpY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uLlxcclxcbiAgICogVGhpcyBkb2VzIG5vdGhpbmcgd2hlbiB0aGUgc2xpZGVyIHR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlIGlzIG5vdCBgc2xpZGVgLCBvciB0aGUgcG9zaXRpb24gaXMgaW5zaWRlIGJvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXJzLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBkaWZmIC0gRGlmZiB0byAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29uc3RyYWluLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gVGhlIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhaW5lZCBkaWZmLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjb25zdHJhaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKCBkaWZmOiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4gICAgcmV0dXJuIGRpZmYgLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKCBleGNlZWRlZCAmJiBTcGxpZGUuaXMoIFNMSURFICkgPyBGUklDVElPTiA6IDEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2B0cnVlYCBpZiB0aGUgdXNlciBjYW4gZHJhZyB0aGUgdGFyZ2V0LlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqXFxyXFxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gQW4gZXZlbnQgdGFyZ2V0LicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0cnVlYCBpZiB0aGUgdGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBkcmFnZ2FibGUuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGlzRHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dnYWJsZSggdGFyZ2V0OiBFdmVudFRhcmdldCApOiBib29sZWFuIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IHsgbm9EcmFnIH0gPSBvcHRpb25zO1xcclxcblxcclxcbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICEgbWF0Y2hlcyggdGFyZ2V0LCBgLiR7IENMQVNTX1BBR0lOQVRJT05fUEFHRSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSwgLiR7IENMQVNTX0FSUk9XIH1gIClcXHJcXG4gICAgICAmJiAoICEgbm9EcmFnIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCAhIG1hdGNoZXMoIHRhcmdldCwgbm9EcmFnICkgKTtcXHJcXG4gIH1cXHJcXG5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBpZiB0aGUgcHJvdmlkZWQgZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IGlzIFRvdWNoRXZlbnQgb3IgTW91c2VFdmVudC5cXHJcXG4gICAqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQHBhcmFtIGUgLSBBbiBldmVudCB0byBjaGVjay5cXHJcXG4gICAqXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGBlYCBpcyBUb3VjaEV2ZW50LlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gaXNUb3VjaEV2ZW50KCBlOiBUb3VjaEV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8IE1vdXNlRXZlbnQgKTogZSBpcyBUb3VjaEV2ZW50IHtcXHJcXG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiB0eXBlb2YgVG91Y2hFdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZSBpbnN0YW5jZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZiBUb3VjaEV2ZW50O1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogQ2hlY2tzIGlmIG5vdyB0aGUgdXNlciBpcyBkcmFnZ2luZyB0aGUgc2xpZGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvciBub3QuXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSB1c2VyIGlzIGRyYWdnaW5nIHRoZSBzbGlkZXIgb3Igb3RoZXJ3aXNlIGBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VgLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBpc0RyYWdnaW5nKCk6IGJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29sZWFuIHtcXHJcXG4gICAgcmV0dXJuIGRyYWdnaW5nO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGlzYWJsZXMgdGhlIGNvbXBvbmVudC5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIHZhbHVlIC0gU2V0IGB0cnVlYCB0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGlzYWJsZSB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gZGlzYWJsZSggdmFsdWU6IGJvb2xlYW4gKTogdm9pZCB7XFxyXFxuICAgIGRpc2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlZCA9IHZhbHVlO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgIG1vdW50LFxcclxcbiAgICBkaXNhYmxlLFxcclxcbiAgICBpc0RyYWdnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IENMQVNTX0xPQURJTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJHIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Qge1xcclxcbiAgRVZFTlRfTEFaWUxPQURfTE9BREVELFxcclxcbiAgRVZFTlRfTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPVkVELFxcclxcbiAgRVZFTlRfUkVGUkVTSCxcXHJcXG4gIEVWRU5UX1JFU0laRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICBFVkVOVF9TQ1JPTExFRCxcXHJcXG59IGZyb20gJy4uLy4uL2NvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFudHMvZXZlbnRzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG5pbXBvcnQge1xcclxcbiAgYWRkQ2xhc3MsXFxyXFxuICBhcHBseSxcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjaGlsZCxcXHJcXG4gIGNyZWF0ZSxcXHJcXG4gIGRpc3BsYXksXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgZW1wdHksXFxyXFxuICBnZXRBdHRyaWJ1dGUsXFxyXFxuICBxdWVyeUFsbCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICByZW1vdmUsXFxyXFxuICByZW1vdmVBdHRyaWJ1dGUsXFxyXFxuICByZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib3ZlQ2xhc3MsXFxyXFxuICBzZXRBdHRyaWJ1dGUsXFxyXFxufSBmcm9tICcuLi8uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4vdXRpbHMnO1xcclxcbmltcG9ydCB7IFNsaWRlQ29tcG9uZW50IH0gZnJvbSAnLi4vIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlNsaWRlcy9TbGlkZSc7XFxyXFxuaW1wb3J0IHsgSU1BR0VfU0VMRUNUT1IsIFNSQ19EIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIkFUQV9BVFRSSUJVVEUsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSB9IGZyb20gJy4vYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvbnN0YW50cyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmZhY2UgZm9yIHRoZSBMYXp5TG9hZCBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHNpbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBMYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6eUxvYWRDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgQGludGVybmFsICovXFxyXFxuICBjaGVjaygpOiB2b2lkO1xcclxcbn1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIHR5cGUgZm9yIGVhY2ggZW50cnkuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFVzZSBhIHR1cGxlIGZvciBiZXR0ZXIgY29tcHJlc3Npb24uXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAqXFxyXFxuICogQHNpbmNlIDQuMC4wXFxyXFxuICovXFxyXFxudHlwZSBMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F6eUxvYWRFbnRyeSA9IFsgSFRNTEltYWdlRWxlbWVudCwgU2xpZGVDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBIVE1MU3BhbkVsZW1lbnQgXTtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudCBmb3IgbGF6aWx5IGxvYWRpbmcgaW1hZ2VzLlxcclxcbiAqXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqXFxyXFxuICogQHBhcmFtIFNwbGlkZSAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcmFtIENvbXBvbmVudHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICogQHBhcmFtIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEByZXR1cm4gQW4gTGF6eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMb2FkIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBMYXp5TG9hZCggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IExhenlMb2FkQ29tcG9uZW50IHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBjb25zdCB7IG9uLCBvZmYsIGJpbmQsIGVtaXQgfSA9IEV2ZW50SW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjZSggU3BsaWRlICk7XFxyXFxuICBjb25zdCBpc1NlcXVlbnRpYWwgPSBvcHRpb25zLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXp5TG9hZCA9PT0gJ3NlcXVlbnRpYWwnO1xcclxcbiAgY29uc3QgZXZlbnRzICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICA9IFsgRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEVEIF07XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgZGF0YSBvZiBpbWFnZXMuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBsZXQgZW50cmllczogTGF6eUxvYWRFbnRyeVtdID0gW107XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZCB7XFxyXFxuICAgIGlmICggb3B0aW9ucy5sYXp5TG9hZCApIHtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgICAgaW5pdCgpO1xcclxcbiAgICAgIG9uKCBFVkVOVF9SRUZSRVNILCBpbml0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJbml0aWFsaXplcyB0aGUgY29tcG9uZW50IGFuZCBzdGFydCBsb2FkaW5nIGltYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMuXFxyXFxuICAgKiBCZSBhd2FyZSB0aGF0IGByZWZyZXNoYCBhbHNvIGNhbGxzIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzIG1ldGhvZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgIGVtcHR5KCBlbnRyaWVzICk7XFxyXFxuICAgIHJlZ2lzdGVyKCk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBpZiAoIGlzU2VxdWVudGlhbCApIHtcXHJcXG4gICAgICBsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZE5leHQoKTtcXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICBvZmYoIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMgKTtcXHJcXG4gICAgICBvbiggZXZlbnRzLCBjaGVjayApO1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjaGVjaygpO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBGaW5kcyBpbWFnZXMgYW5kIHJlZ2lzdGVyIHRoZW0gYXMgZW50cmllcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgd2l0aCBjcmVhdGluZyBzcGlubmVyIGVsZW1lbnRzLlxcclxcbiAgICogTm90ZSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdCBzcGlubmVyIGNhbiBiZSBhbHJlYWR5IGF2YWlsYWJsZSBiZWNhdXNlIG9mIGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVmcmVzaCgpYC5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gcmVnaXN0ZXIoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBDb21wb25lbnRzLlNsaWRlcy5mb3JFYWNoKCBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPT4ge1xcclxcbiAgICAgIHF1ZXJ5QWxsPEhUTUxJbWFnZUVsZW1lbnQ+KCBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uuc2xpZGUsIElNQUdFX1NFTEVDVE9SICkuZm9yRWFjaCggaW1nID0+IHtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBjb25zdCBzcmMgICAgPSBnZXRBdHRyaWJ1dGUoIGltZywgU1JDX0RBVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBX0FUVFJJQlVURSApO1xcclxcbiAgICAgICAgY29uc3Qgc3Jjc2V0ID0gZ2V0QXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYnV0ZSggaW1nLCBTUkNTRVRfREFUQV9BVFRSSUJVVEUgKTtcXHJcXG5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBpZiAoIHNyYyAhPT0gaW1nLnNyYyB8fCBzcmNzZXQgIT09IGltZy5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jjc2V0ICkge1xcclxcbiAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jbGFzc2VzLnNwaW5uZXI7XFxyXFxuICAgICAgICAgIGNvbnN0IHBhcmVudCAgICA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbWcucGFyZW50RWxlbWVudDtcXHJcXG4gICAgICAgICAgY29uc3Qgc3Bpbm5lciAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGNoaWxkKCBwYXJlbnQsIGAuJHsgY2xhc3NOYW1lIH1gICkgfHwgY3JlYXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJ3NwYW4nLCBjbGFzc05hbWUsIHBhcmVudCApO1xcclxcblxcclxcbiAgICAgICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW50cmllcy5wdXNoKCBbIGltZywgU2xpZGUsIHNwaW5uZXIgXSApO1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgICAgICAgaW1nLnNyYyB8fCBkaXNwbGF5KCBpbWcsICdub25lJyApO1xcclxcbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIH1cXHJcXG4gICAgICB9ICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyBob3cgY2xvc2UgZWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW1hZ2UgaXMgZnJvbSB0aGUgYWN0aXZlIHNsaWRlLCBhbmQgZGV0ZXJtaW5lcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2hldGhlciB0byBzdGFydCBsb2FkaW5nIG9yIG5vdC5cXHJcXG4gICAqIFRoZSBsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBgKzFgIGlzIGZvciB0aGUgY3VycmVudCBwYWdlLlxcclxcbiAgICovXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gY2hlY2soKTogdm9pZCB7XFxyXFxuICAgIGVudHJpZXMgPSBlbnRyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2llcy5maWx0ZXIoIGRhdGEgPT4ge1xcclxcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMucGVyUGFnZSAqICggKCBvcHRpb25zLnByZWxvYWRQYWdlcyB8fCAxICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICsgMSApIC0gMTtcXHJcXG4gICAgICByZXR1cm4gZGF0YVsgMSBdLmlzV2l0aGluKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgU3BsaWRlLmluZGV4LCBkaXN0YW5jZSApID8gbG9hZCggZGF0YSApIDogdHJ1ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgZW50cmllcy5sZW5ndGggfHwgb2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiggZXZlbnRzICk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTdGFydHMgbG9hZGluZyB0aGUgaW1hZ2UgaW4gdGhlIHByb3ZpZGVkIGRhdGEuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBkYXRhIC0gQSBMYXp5TG9hZEVudHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSBvYmplY3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGxvYWQoIGRhdGE6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBMYXp5TG9hZEVudHJ5ICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBbIGltZyBdID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RhdGE7XFxyXFxuXFxyXFxuICAgIGFkZENsYXNzKCBkYXRhWyAxIF0uc2xpZGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJDTEFTU19MT0FESU5HICk7XFxyXFxuICAgIGJpbmQoIGltZywgJ2xvYWQgZXJyb3InLCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXBwbHkoIG9uTG9hZCwgZGF0YSApICk7XFxyXFxuXFxyXFxuICAgIHNldEF0dHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaWJ1dGUoIGltZywgJ3NyYycsIGdldEF0dHJpYnV0ZSggaW1nLCBTUkNfREFUQV9BIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRUUklCVVRFICkgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBpbWcsICdzcmNzZXQnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZ2V0QXR0cmlidXRlKCBpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSApICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICByZW1vdmVBdHRyaWJ1dGUoIGltZywgU1JDX0RBVEFfQVRUUklCVVRFICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICByZW1vdmVBdHRyaWJ1dGUoIGltZywgU1JDU0VUX0RBVEFfQVRUUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQlVURSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVkIHdoZW4gdGhlIGltYWdlIGlzIGxvYWRlZCBvciBhbnkgZXJyb3Igb2NjdXJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZGF0YSAtIEEgTGF6eUxvYWRFbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnkgb2JqZWN0LlxcclxcbiAgICogQHBhcmFtIGUgICAgLSBBbiBFdmVudCBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbkxvYWQoIGRhdGE6IExhenknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTG9hZEVudHJ5LCBlOiBFdmVudCApOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgWyBpbWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBTbGlkZSBdID0gZGF0YTtcXHJcXG5cXHJcXG4gICAgcmVtb3ZlQ2xhc3MoIFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSwgQ0xBU1NfTE9BRElORyApO1xcclxcblxcclxcbiAgICBpZiAoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlLnR5cGUgIT09ICdlcnJvcicgKSB7XFxyXFxuICAgICAgcmVtb3ZlKCBkYXRhWyAyICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJdICk7XFxyXFxuICAgICAgZGlzcGxheSggaW1nLCAnJyApO1xcclxcbiAgICAgIGUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KCBFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGltZywgU2xpZGUgKTtcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdCggRVZFTlRfUkVTSVpFICk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlzU2VxdWVudGlhbCAmJiBsb2FkTmV4dCgpO1xcclxcbiAgfVxcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIC8qKlxcclxcbiAgICogU3RhcnRzIGxvYWRpbmcgYSBuZXh0IGltYWdlLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gbG9hZE5leHQoKTogdm9pZCB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbnRyaWVzLmxlbmd0aCAmJiBsb2FkKCBlbnRyaWVzLnNoaWZ0KCkgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICB9XFxyXFxuXFxyXFxuICByZXR1cm4ge1xcclxcbiAgICBtb3VudCxcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGRlc3Ryb3k6IGFwcGx5KCBlbXB0eSwgZW50cmllcyApLFxcclxcbiAgICBjaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ssXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBBUlJPV19MRUZULCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQVJST1dfUklHSFQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvYXJyb3dzJztcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1wb3J0IHtcXHJcXG4gIEFSSUFfQ09OVFJPTFMsXFxyXFxuICBBUklBX0xBQkVMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIEFSSUFfT1JJRU5UQVRJT04sXFxyXFxuICBBUklBX1NFTEVDVEVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gIFJPTEUsXFxyXFxuICBUQUJfSU5ERVgsXFxyXFxufSBmcm9tICcuLi8uLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIvY29uc3RhbnRzL2F0dHJpYnV0ZXMnO1xcclxcbmltcG9ydCB7IENMQVNTX0FDVElWRSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIENMQVNTX1BBR0lOQVRJT04gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvY2xhc3MiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXMnO1xcclxcbmltcG9ydCB7IFRUQiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kaXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZWN0aW9ucyc7XFxyXFxuaW1wb3J0IHtcXHJcXG4gIEVWRU5UX0VORF9JTkRFWF9DIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0hBTkdFRCxcXHJcXG4gIEVWRU5UX01PVkUsXFxyXFxuICBFVkVOVF9QQUdJTkFUSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPTl9NT1VOVEVELFxcclxcbiAgRVZFTlRfUEFHSU5BVElPTl9VUERBVEVELFxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIEVWRU5UX1JFRlJFU0gsXFxyXFxuICBFVkVOVF9TQ1JPTEwsXFxyXFxuICBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfU0NST0xMRUQsXFxyXFxuICBFVkVOVF9VUERBVEVELFxcclxcbn0gZnJvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9ydCB7IEV2ZW50SW50ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyZmFjZSB9IGZyb20gJy4uLy4uL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgUyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJwbGlkZSB9IGZyb20gJy4uLy4uL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wbyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJydCB7IEJhc2VDb21wb25lbnQsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICciCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi4vLi4vdHlwZXMnO1xcclxcbmltcG9ydCB7XFxyXFxuICBhZGRDbGFzcyxcXHJcXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBhcHBseSxcXHJcXG4gIGNlaWwsXFxyXFxuICBjcmVhdGUsXFxyXFxuICBkaXNwbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSxcXHJcXG4gIGVtcHR5LFxcclxcbiAgZm9jdXMsXFxyXFxuICBmb3JtYXQsXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgcHJldmVudCxcXHJcXG4gIHJlbW92ZSxcXHJcXG4gIHJlbW92ZUF0dHJpYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dGUsXFxyXFxuICByZW1vdmVDbGFzcyxcXHJcXG4gIHNldEF0dHJpYnV0ZSxcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuICBzbGljZSxcXHJcXG59IGZyb20gJy4uLy4uL3V0aWxzJztcXHJcXG5pbXBvcnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIHsgbm9ybWFsaXplS2V5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZG9tL25vcm1hbGl6IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVLZXkvbm9ybWFsaXplS2V5JztcXHJcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgVGhlIGludGVyZmFjZSBmb3IgdGhlIFBhZ2luYXRpb24gY29tcG9uZW50LlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4cG9ydCBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICBpdGVtczogUGFnaW5hdGlvbkl0ZW1bXTtcXHJcXG4gIGdldEF0KCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg6IG51bWJlciApOiBQYWdpbmF0aW9uSXRlbTtcXHJcXG4gIHVwZGF0ZSgpOiB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29pZDtcXHJcXG59XFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmFjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZm9yIGRhdGEgb2YgdGhlIHBhZ2luYXRpb24uXFxyXFxuICpcXHJcXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbkRhdGEge1xcclxcbiAgbGlzdDogSFRNTFVMaXN0RWxlbWVudDtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVtczogUGFnaW5hdGlvbkl0ZW1bXTtcXHJcXG59XFxyXFxuXFxyXFxuLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIGVhY2ggcGFnaW5hdGlvbiBpdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbS5cXHJcXG4gKlxcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqL1xcclxcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgaW50ZXJmYWNlIFBhZ2luYXRpb25JdGVtIHtcXHJcXG4gIGxpOiBIVE1MTElFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudDtcXHJcXG4gIGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFnZTogbnVtYmVyO1xcclxcbn1cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbXBvbmVudCBmb3IgdGhlIHBhZ2luYXRpb24gVUkgKGEgc2xpZGUgcGlja2VyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykuXFxyXFxuICpcXHJcXG4gKiBAbGluayBodHRwczovL3d3dy53My5vcmcvVFIvMicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwMjEvTk9URS13YWktYXJpYS1wcmFjdGljZXMtMS4yLTIwMjExMTI5LyNncm91cGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZC1jYXJvdXNlbC1lbGVtZW50c1xcclxcbiAqIEBzaW5jZSAzLjAuMFxcclxcbiAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgUGFnaW5hdGlvbiBjb21wb25lbnQgb2InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdC5cXHJcXG4gKi9cXHJcXG5leHBvcnQgZnVuY3Rpb24gUGFnaW5hdGlvbiggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTogU3BsaWRlLCBDb21wb25lbnRzOiBDb21wb25lbnRzLCBvcHRpb25zOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgT3B0aW9ucyApOiBQYWdpbmF0aW9uQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IGV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXG4gIGNvbnN0IHsgb24sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWl0LCBiaW5kIH0gPSBldmVudDtcXHJcXG4gIGNvbnN0IHsgU2xpZGVzLCBFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMsIENvbnRyb2xsZXIgfSA9IENvbXBvbmVudHM7XFxyXFxuICBjb25zdCB7IGhhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGb2N1cywgZ2V0SW5kZXgsIGdvIH0gPSBDb250cm9sbGVyO1xcclxcbiAgY29uc3QgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVzb2x2ZSB9ID0gQ29tcG9uZW50cy5EaXJlY3Rpb247XFxyXFxuICBjb25zdCB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdpbmF0aW9uOiBwbGFjZWhvbGRlciB9ID0gRWxlbWVudHM7XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBTdG9yZXMgYWxsIHBhZ2luYXRpb24gaXRlbXMuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICovXFxyXFxuICBjb25zdCBpdGVtczogUGFnaW5hdGlvbkl0ZW1bXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBbXTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIHBhZ2luYXRpb24gZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsaXN0OiBIVE1MVUxpc3RFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCB8IG51bGw7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIEhvbGRzIG1vZGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2llciBjbGFzc2VzLlxcclxcbiAgICovXFxyXFxuICBsZXQgcGFnaW5hdGlvbkNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzOiBzdHJpbmc7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKi9cXHJcXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXHJcXG4gICAgZGVzdHJveSgpO1xcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAgb24oIFsgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUkVTSCwgRVZFTlRfRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidORF9JTkRFWF9DSEFOR0VEIF0sIG1vdW50ICk7XFxyXFxuXFxyXFxuICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBlbmFibGVkID0gb3B0aW9ucy5wYWdpbmF0aW9uO1xcclxcbiAgICBwbGFjZWhvbGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXIgJiYgZGlzcGxheSggcGxhY2Vob2xkZXIsIGVuYWJsZWQgPyAnJyA6ICdub25lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicgKTtcXHJcXG5cXHJcXG4gICAgaWYgKCBlbmFibGVkICkge1xcclxcbiAgICAgIG9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggWyBFVkVOVF9NT1ZFLCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVEIF0sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cGRhdGUgKTtcXHJcXG4gICAgICBjcmVhdGVQYWdpbmF0aW9uKCk7XFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHVwZGF0ZSgpO1xcclxcbiAgICAgIGVtaXQoIEVWRU5UX1BBR0lOQVRJT05fTU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVU5URUQsIHsgbGlzdCwgaXRlbXMgfSwgZ2V0QXQoIFNwbGlkZS5pbmRleCApICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cm95cyB0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdHJveSgpOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBsaXN0ICkge1xcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZW1vdmUoIHBsYWNlaG9sZGVyID8gc2xpY2UoIGxpc3QuY2hpbGRyZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgOiBsaXN0ICk7XFxyXFxuICAgICAgcmVtb3ZlQ2xhc3MoIGxpc3QsIHBhZ2luYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uQ2xhc3NlcyApO1xcclxcbiAgICAgIGVtcHR5KCBpdGVtcyApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBsaXN0ID0gbnVsbDtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBldmVudC5kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJveSgpO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlcyB0aGUgcGFnaW5hdGlvbiBlbGVtZW50IGFuZCBhcHBlbmRzIGl0IHRvIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Ugc2xpZGVyLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBjcmVhdGVQYWdpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbigpOiB2b2lkIHtcXHJcXG4gICAgY29uc3QgeyBsZW5ndGggfSA9IFNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgIGNvbnN0IHsgY2xhc3NlcywgaTE4biwgcGVyUGFnZSB9ID0gb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnM7XFxyXFxuICAgIGNvbnN0IG1heCA9IGhhc0ZvY3VzKCkgPyBDb250cm9sbGVyLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRFbmQoKSArIDEgOiBjZWlsKCBsZW5ndGggLyBwZXJQYWdlICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcclxcbiAgICBsaXN0ID0gcGxhY2Vob2xkZXIgfHwgY3JlYXRlKCAndWwnLCBjbGFzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Nlcy5wYWdpbmF0aW9uLCBFbGVtZW50cy50cmFjay5wYXJlbnRFbGVtZW50ICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgICBhZGRDbGFzcyggbGlzdCwgKCBwYWdpbmF0aW9uQ2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMgPSBgJHsgQ0xBU1NfUEFHSU5BVElPTiB9LS0keyBnZXREaXJlY3Rpb24oKSB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImAgKSApO1xcclxcbiAgICBzZXRBdHRyaWJ1dGUoIGxpc3QsIFJPTEUsICd0YWJsaXN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBsaXN0LCBBUklBX0xBQkVMLCBpMThuIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zZWxlY3QgKTtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCBsaXN0LCBBUklBX09SSUVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRBVElPTiwgZ2V0RGlyZWN0aW9uKCkgPT09IFRUQiA/ICd2ZXJ0aWNhbCcgOiAnJyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG5cXHJcXG4gICAgZm9yICggbGV0IGkgPSAwOyBpIDwgbWF4OyBpKysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICkge1xcclxcbiAgICAgIGNvbnN0IGxpICAgICAgID0gY3JlYXRlKCAnbGknLCBudWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibCwgbGlzdCApO1xcclxcbiAgICAgIGNvbnN0IGJ1dHRvbiAgID0gY3JlYXRlKCAnYnUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidHRvbicsIHsgY2xhc3M6IGNsYXNzZXMucGFnZSwgdHlwZTogJ2J1dHRvbicgfSwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpICk7XFxyXFxuICAgICAgY29uc3QgY29udHJvbHMgPSBTbGlkZXMuZ2V0SW4oIGkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykubWFwKCBTbGlkZSA9PiBTbGlkZS5zbGlkZS5pZCApO1xcclxcbiAgICAgIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0ZXh0ICAgICA9ICEgaGFzRm9jdXMoKSAmJiBwZXJQYWdlID4gMSA/IGkxOG4ucCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2VYIDogaTE4bi5zbGlkZVg7XFxyXFxuXFxyXFxuICAgICAgYmluZCggYnV0dG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibiwgJ2NsaWNrJywgYXBwbHkoIG9uQ2xpY2ssIGkgKSApO1xcclxcblxcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoIG9wdGlvbnMucGFnaW5hdGlvbktleWJvYXJkICkge1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgIGJpbmQoIGJ1dHRvbiwgJ2tleWRvd24nLCBhcHBseSggb25LZXlkb3duLCBpICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICk7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpLCBST0xFLCAncHJlc2VudGF0aW9uJyApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIoIGJ1dHRvbiwgUk9MRSwgJ3RhYicgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJidXR0b24sIEFSSUFfQ09OVFJPTFMsIGNvbnRyb2xzLmpvaW4oICcgJyApICk7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICAgIHNldEF0dHJpYnV0ZSggYnV0dG9uLCBBUklBX0xBQkVMLCBmb3JtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCB0ZXh0LCBpICsgMSApICk7XFxyXFxuICAgICAgc2V0QXR0cmlidXRlKCBidXR0b24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBUQUJfSU5ERVgsIC0xICk7XFxyXFxuXFxyXFxuICAgICAgaXRlbXMucHVzaCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3sgbGksIGJ1dHRvbiwgcGFnZTogaSB9ICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSB1c2VyIGNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidja3MgZWFjaCBwYWdpbmF0aW9uIGRvdC5cXHJcXG4gICAqIE1vdmVzIHRoZSBmb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdG8gdGhlIGFjdGl2ZSBzbGlkZSBmb3IgYWNjZXNzaWJpbGl0eS5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKlxcclxcbiAgICogQGxpbmsgaHR0cHM6Ly93d3cudzMub3JnL1dBSS90dXRvcmlhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xzL2Nhcm91c2Vscy9mdW5jdGlvbmFsaXR5L1xcclxcbiAgICpcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gcGFnZSAtIEEgY2xpY2tlZCBwYWdlIGluZGV4LlxcclxcbiAgICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgZnVuY3Rpb24gb25DbGljayggcGFnZTogbnVtYmVyICk6IHZvaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcXHJcXG4gICAgZ28oIGA+JHsgcGFnZSB9YCwgdHJ1ZSApO1xcclxcbiAgfVxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FsbGVkIHdoZW4gYW55IGtleSBpcyBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Jlc3NlZCBvbiB0aGUgcGFnaW5hdGlvbi5cXHJcXG4gICAqXFxyXFxuICAgKiBAbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmsgaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMjEvTk9URS13YWktYXJpYS1wcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3RpY2VzLTEuMi0yMDIxMTEyOS8ja2V5Ym9hcmQtaW50ZXJhY3Rpb24tMjFcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKlxcclxcbiAgICogQHBhcmFtIHBhZ2UgLSBBIHBhZ2UgaW5kZXguXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICogQHBhcmFtIGUgICAgLSBBIEtleWJvYXJkRXZlbnQgb2JqZWN0LlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZnVuY3Rpb24gb25LZXlkb3duKCBwYWdlOiBudW1iZXIsIGU6IEtlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lib2FyZEV2ZW50ICk6IHZvaWQge1xcclxcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0ZW1zO1xcclxcbiAgICBjb25zdCBrZXkgPSBub3JtYWxpemVLZXkoIGUgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGNvbnN0IGRpciA9IGdldERpcmVjdGlvbigpO1xcclxcblxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbGV0IG5leHRQYWdlID0gLTE7XFxyXFxuXFxyXFxuICAgIGlmICgga2V5ID09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gcmVzb2x2ZSggQVJST1dfUklHSFQsIGZhbHNlLCBkaXIgKSApIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgbmV4dFBhZ2UgPSArK3BhZ2UgJSBsZW5ndGg7XFxyXFxuICAgIH0gZWxzZSBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBrZXkgPT09IHJlc29sdmUoIEFSUk9XX0xFRlQsIGZhbHNlLCBkaXIgKSApIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgbmV4dFBhZ2UgPSAoIC0tcGFnZSArIGxlbmd0aCApICUgbGVuZ3RoOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgfSBlbHNlIGlmICgga2V5ID09PSAnSG9tZScgKSB7XFxyXFxuICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgIG5leHRQYWdlID0gMDtcXHJcXG4gICAgfSBlbHNlIGlmICgga2V5ID09PSAnRW4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZCcgKSB7XFxyXFxuICAgICAgbmV4dFBhZ2UgPSBsZW5ndGggLSAxO1xcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxcclxcblxcclxcbiAgICBjb25zdCBpdGVtID0gaXRlbXNbIG5leHRQYWdlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xcclxcblxcclxcbiAgICBpZiAoIGl0ZW0gKSB7XFxyXFxuICAgICAgZm9jdXMoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVtLmJ1dHRvbiApO1xcclxcbiAgICAgIGdvKCBgPiR7IG5leHRQYWdlIH1gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICAgIHByZXZlbnQoIGUsIHRydWUgKTtcXHJcXG4gICAgfVxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmV0dXJucyB0aGUgbGF0ZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkaXJlY3Rpb24gZm9yIHBhZ2luYXRpb24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjdGlvbiBnZXREaXJlY3Rpb24oKTogT3B0aW9uc1snZGlyZWN0aW9uJ10ge1xcclxcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIG9wdGlvbnMucGFnaW5hdGlvbkRpcmVjdGlvbiB8fCBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5kaXJlY3Rpb247XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBSZXR1cm5zIHRoZSBwYWdpbmF0aW9uIGl0ZW0gYXQgdGhlIHNwZWNpZmllZCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXguXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQW4gaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQSBwYWdpbmF0aW9uIGl0ZW0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29iamVjdCBpZiBhdmFpbGFibGUsIG9yIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGdldEF0KCBpbmRleDogbnVtYmVyICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBQYWdpbmF0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XFxyXFxuICAgIHJldHVybiBpdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXNbIENvbnRyb2xsZXIudG9QYWdlKCBpbmRleCApIF07XFxyXFxuICB9XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgLyoqXFxyXFxuICAgKiBVcGRhdGVzIHRoZSBwYWdpbmF0aW9uIHN0YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXMuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGNvbnN0IHByZXYgPSBnZXRBdCggZ2V0SW5kZXgoIHRydWUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKTtcXHJcXG4gICAgY29uc3QgY3VyciA9IGdldEF0KCBnZXRJbmRleCgpICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICBpZiAoIHByZXYgKSB7XFxyXFxuICAgICAgY29uc3QgeyBiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3V0dG9uIH0gPSBwcmV2O1xcclxcbiAgICAgIHJlbW92ZUNsYXNzKCBidXR0b24sIENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19BQ1RJVkUgKTtcXHJcXG4gICAgICByZW1vdmVBdHRyaWJ1dGUoIGJ1dHRvbiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSSUFfU0VMRUNURUQgKTtcXHJcXG4gICAgICBzZXRBdHRyaWJ1dGUoIGJ1dHRvbiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RBQl9JTkRFWCwgLTEgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICBpZiAoIGN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JyICkge1xcclxcbiAgICAgIGNvbnN0IHsgYnV0dG9uIH0gPSBjdXJyO1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBhZGRDbGFzcyggYnV0dG9uLCBDTEFTU19BQ1RJVkUgKTtcXHJcXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0QXR0cmlidXRlKCBidXR0b24sIEFSSUFfU0VMRUNURUQsIHRydWUgKTtcXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuICAgICAgc2V0QXR0cmlidXRlKCBidXR0b24sIFRBQl9JTkRFWCwgJycgKTtcXHJcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgIH1cXHJcXG5cXHJcXG4gICAgZW1pdCggRVZFTlRfUEFHSU5BVElPTl9VUEQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRFRCwgeyBsaXN0LCBpdGVtcyB9LCBwcmV2LCBjdXJyICk7XFxyXFxuICB9XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgaXRlbXMsXFxyXFxuICAgIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCxcXHJcXG4gICAgZGVzdHJveSxcXHJcXG4gICAgZ2V0QXQsXFxyXFxuICAgIHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGRhdGUsXFxyXFxuICB9O1xcclxcbn1cXHJcXG4iLCJpbXBvcnQgeyBTQ1JPTExfTEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiU1RFTkVSX09QVElPTlMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvbGlzdGVuZXItIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9wdGlvbnMnO1xcclxcbmltcG9ydCB7IE1PVklORyB9IGZyb20gJy4uLy4uL2NvbnN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFudHMvc3RhdGVzJztcXHJcXG5pbXBvcnQgeyBFdmVudEludGVyZmFjZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcclxcbmltcG9ydCB7IFNwbGlkZSB9IGZyb20gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIicuLi8uLi9jb3JlL1NwbGlkZS9TcGxpZGUnO1xcclxcbmltcG9ydCB7IEJhc2VDb21wIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm9uZW50LCBDb21wb25lbnRzLCBPcHRpb25zIH0gZnJvbSAnLi4vLi4vdHlwZXMnOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG5pbXBvcnQgeyBhYnMsIHByZXZlbnQsIHRpbWVPZiB9IGZyb20gJy4uLy4uLyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ1dGlscyc7XFxyXFxuXFxyXFxuXFxyXFxuLyoqXFxyXFxuICogVGhlIGludGVyZmEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgZm9yIHRoZSBXaGVlbCBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBXaGVlbENvbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcXHJcXG59XFxyXFxuXFxyXFxuLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIG9ic2VydmluZyB0aGUgbW91c2UgdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZWVsIGFuZCBtb3ZpbmcgdGhlIHNsaWRlci5cXHJcXG4gKlxcclxcbiAqIEBzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEBwYXJhbSBTcGxpZGUgICAgIC0gQSBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXJhbSBDb21wb25lbnRzIC0gQSBjb2xsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAqIEBwYXJhbSBvcHRpb25zICAgIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAcmV0dXJuIEEgV2hlZWwgY29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCBvYmplY3QuXFxyXFxuICovXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIFdoZWVsKCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBPcHRpb25zICk6IFdoZWVsQ29tcG9uZW50IHtcXHJcXG4gIGNvbnN0IHsgYmluZCB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIEhvbGRzIHRoZSBsYXN0IHRpbWUgd2hlbiB0aGUgd2hlZWwgbW92ZXMgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZSBzbGlkZXIuXFxyXFxuICAgKi9cXHJcXG4gIGxldCBsYXN0VGltZSA9IDA7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZCB7XFxyXFxuICAgIGlmICggb3B0aW9ucy53aGVlbCApIHtcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgYmluZCggQ29tcG9uZW50cy5FbGVtZW50cy50cmFjaywgJ3doZWVsJywgb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV2hlZWwsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TICk7XFxyXFxuICAgIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGUgdXNlciByb3RhdGVzIHRoZSBtb3VzZSB3aGVlbCBvbiB0aGUgc2xpZGVyLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZSAtIEEgV2hlZWxFdmVudCBvYmplYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBvbldoZWVsKCBlOiBXaGVlbEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCApOiB2b2lkIHtcXHJcXG4gICAgaWYgKCBlLmNhbmNlbGFibGUgKSB7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIGNvbnN0IHsgZGVsdGFZIH0gPSBlO1xcclxcbiAgICAgIGNvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBiYWNrd2FyZHMgPSBkZWx0YVkgPCAwO1xcclxcbiAgICAgIGNvbnN0IHRpbWVTdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXAgPSB0aW1lT2YoIGUgKTtcXHJcXG4gICAgICBjb25zdCBtaW4gICAgICAgPSBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy53aGVlbE1pblRocmVzaG9sZCB8fCAwO1xcclxcbiAgICAgIGNvbnN0IHNsZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncCAgICAgPSBvcHRpb25zLndoZWVsU2xlZXAgfHwgMDtcXHJcXG5cXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKCBhYnMoIGRlbHRhWSApID4gbWluICYmIHRpbWVTdGFtcCAtIGxhc3RUaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZSA+IHNsZWVwICkge1xcclxcbiAgICAgICAgU3BsaWRlLmdvKCBiYWNrd2FyZHMgPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgJzwnIDogJz4nICk7XFxyXFxuICAgICAgICBsYXN0VGltZSA9IHRpbWVTdGFtIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3A7XFxyXFxuICAgICAgfVxcclxcblxcclxcbiAgICAgIHNob3VsZFByZXZlbnQoIGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMgKSAmJiBwcmV2ZW50KCBlICk7XFxyXFxuICAgIH1cXHJcXG4gIH1cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENoZWNrcyB3aGV0aGVyIHRoZSBjb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50IHNob3VsZCBwcmV2ZW50IHRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWVsIGV2ZW50IG9yIG5vdC5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gYmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2t3YXJkcyAtIFNldCB0aGlzIHRvIGB0cnVlYCBmb3IgYmFja3dhcmRzIGRpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBgdHJ1ZWAgaWYgdGhlIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gc2hvdWxkIGJlIHByZXZlbnRlZC5cXHJcXG4gICAqL1xcclxcbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHNob3VsZFByZXZlbnQoIGJhY2t3YXJkczogYm9vbGVhbiApOiBib29sZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbiB7XFxyXFxuICAgIHJldHVybiAhIG9wdGlvbnMucmVsZWFzZVdoZWVsXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICAgIHx8IFNwbGlkZS5zdGF0ZS5pcyggTU9WSU5HIClcXHJcXG4gICAgICB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50cy5Db250cm9sbGVyLmdldEFkamFjZW50KCBiYWNrd2FyZHMgKSAhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09IC0xO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50LFxcclxcbiAgfTtcXHJcXG59XFxyXFxuIiwiaW1wb3J0IHsgQVJJQV9BVE9NSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJDLCBBUklBX0JVU1ksIEFSSUFfTElWRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYXR0cmlidXRlcyc7XFxyXFxuaW1wb3J0IHsgQ0xBU1NfU1IgfSBmcm9tICcuLi8uLi8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiY29uc3RhbnRzL2NsYXNzZXMnO1xcclxcbmltcG9ydCB7IEVWRU5UX0FVVE9QTEFZX1AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVVTRSwgRVZFTlRfQVVUT1BMQVlfUExBWSwgRVZFTlRfTU9WRUQsIEVWRU5UX1NDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlJPTExFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9ldmVudHMnO1xcclxcbmltcG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgeyBFdmVudEludGVyZmFjZSwgUmVxdWVzdEludGVydmFsIH0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvbnN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgU3BsaWRlIH0gZnJvbSAnLi4vLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIuL2NvcmUvU3BsaWRlL1NwbGlkZSc7XFxyXFxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIsIENvbXBvbmVudHMsIE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9ydCB7IGFwcGVuZCwgYXBwbHksIGNyZWF0ZSwgcmVtb3ZlLCByZW1vdmVBdHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicmlidXRlLCBzZXRBdHRyaWJ1dGUgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcblxcclxcblxcclxcbi8qKlxcclxcbiAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgTGl2ZSBjb21wb25lbnQuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgNC4wLjBcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICovXFxyXFxuZXhwb3J0IGludGVyZmFjZSBMaXZlQ29tcG9uZW50IGV4dGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRzIEJhc2VDb21wb25lbnQge1xcclxcbiAgZGlzYWJsZSggZGlzYWJsZWQ6IGJvb2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFuICk6IHZvaWQ7XFxyXFxufVxcclxcblxcclxcbi8qKlxcclxcbiAqIERlbGF5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIHJlbW92aW5nIHRoZSBTUiBmaWVsZCBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIFdpbmRvd3MgTmFycmF0b3IuXFxyXFxuICovXFxyXFxuY29uc3QgU1JfUkVNT1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUxfREVMQVkgPSA5MDtcXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCBmb3IgaW1wbGVtZW50aW5nIExpdmUgUmVnaW9uIHRvIHRoZSBzbGlkZXIuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAqXFxyXFxuICogQGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLVVTL2RvY3MvV2ViL0FjY2Vzc2liaWxpdHkvQVJJQS9BUklBX0xpdmVfUmVnaW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NcXHJcXG4gKlxcclxcbiAqIEBzaW5jZSA0LjAuMFxcclxcbiAqXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBTcGxpZGUgICAgIC0gQSBTcGxpZGUgaW5zdGFuY2UuXFxyXFxuICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBDb21wb25lbnRzIC0gQSBjb2xsZWN0aW9uIG9mIGNvbXBvbmVudHMuXFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqIEBwYXJhbSBvcHRpb25zICAgIC0gT3B0aW9ucy5cXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIEEgTGl2ZSBjb21wb25lbnQgb2JqZWN0LlxcclxcbiAqL1xcclxcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnQgZnVuY3Rpb24gTGl2ZSggU3BsaWRlOiBTcGxpZGUsIENvbXBvbmVudHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzLCBvcHRpb25zOiBPcHRpb25zICk6IExpdmVDb21wb25lbnQge1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIGNvbnN0IHsgb24gfSA9IEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICBjb25zdCB7IHRyYWNrIH0gPSBDb21wb25lbnRzLkVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBsaXZlIHJlZ2lvbiBpcyBlbmFibGVkIG9yIG5vdC5cXHJcXG4gICAqL1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGNvbnN0IGVuYWJsZWQgPSBvcHRpb25zLmxpdmUgJiYgISBvcHRpb25zLmlzTmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmlnYXRpb247XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZSBzcGFuIGVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50IGZvciB0aGUgU1Igb25seSB0ZXh0LlxcclxcbiAgICovXFxyXFxuICBjb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInQgc3IgPSBjcmVhdGUoICdzcGFuJywgQ0xBU1NfU1IgKTtcXHJcXG5cXHJcXG4gICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvKipcXHJcXG4gICAqIEhvbGRzIHRoZSBSZXF1ZXN0SW50ZXJ2YWwgaW5zdGFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlLlxcclxcbiAgICovXFxyXFxuICBjb25zdCBpbnRlcnZhbCA9IFJlcXVlc3RJbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXJ2YWwoIFNSX1JFTU9WQUxfREVMQVksIGFwcGx5KCB0b2dnbGUsIGZhbHNlICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICk7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIENhbGxlZCB3aGVuIHRoZSBjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50IGlzIG1vdW50ZWQuXFxyXFxuICAgKiAtIEpBV1MgbmVlZHMgYGFyaWEtYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21pY2AgdG8gbWFrZSB0aGUgYGFyaWEtYnVzeWAgd29yay5cXHJcXG4gICAqIC0gSW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVkaWF0ZWx5IHJlbW92aW5nIHRoZSBTUiBtYWtlcyBXaW5kb3dzIE5hcnJhdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzaWxlbnQsIGhlbmNlIHJlcXVpcmVzIHRoZSBkZWxheSBhcm91bmQgNTBtcy5cXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIG1vdW50KCk6IHZvaWQge1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCBlbmFibGVkICkge1xcclxcbiAgICAgIGRpc2FibGUoICEgQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuQXV0b3BsYXkuaXNQYXVzZWQoKSApO1xcclxcbiAgICAgIHNldEF0dHJpYnV0ZSggdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYWNrLCBBUklBX0FUT01JQywgdHJ1ZSApO1xcclxcbiAgICAgIHNyLnRleHRDb250ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJudCA9ICdceGUyXHg4MFx4YTYnO1xcclxcblxcclxcbiAgICAgIG9uKCBFVkVOVF9BIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VUT1BMQVlfUExBWSwgYXBwbHkoIGRpc2FibGUsIHRydWUgKSApO1xcclxcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvbiggRVZFTlRfQVVUT1BMQVlfUEFVU0UsIGFwcGx5KCBkaXNhYmxlLCBmYWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKSApO1xcclxcbiAgICAgIG9uKCBbIEVWRU5UX01PVkVELCBFVkVOVF9TQ1JPTExFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgXSwgYXBwbHkoIHRvZ2dsZSwgdHJ1ZSApICk7XFxyXFxuICAgIH1cXHJcXG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRvZ2dsZXMgdGhlIFNSIGZpZWxkIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQgYGFyaWEtYnVzeWAuXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gYWN0aXZhdGUgdGhlIGZpZWxkIG9yICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidub3QuXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIHRvZ2dsZSggYWN0aXZlOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYm9vbGVhbiApOiB2b2lkIHtcXHJcXG4gICAgc2V0QXR0cmlidXRlKCB0cmFjaywgQVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFfQlVTWSwgYWN0aXZlICk7XFxyXFxuXFxyXFxuICAgIGlmICggYWN0aXZlICkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcXHJcXG4gICAgICBhcHBlbmQoIHRyYWNrLCBzciApO1xcclxcbiAgICAgIGludCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZhbC5zdGFydCgpO1xcclxcbiAgICB9IGVsc2Uge1xcclxcbiAgICAgIHJlbW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoIHNyICk7XFxyXFxuICAgICAgaW50ZXJ2YWwuY2FuY2VsKCk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIERlc3Ryb3lzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGUgY29tcG9uZW50LlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpOiB2b2lkIHtcXHJcXG4gICAgcmVtb3ZlQXR0cmlidXRlKCB0cmFjaywgWyBBUkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQV9MSVZFLCBBUklBX0FUT01JQywgQVJJQV9CVVNZIF0gKTtcXHJcXG4gICAgcmVtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSggc3IgKTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogRGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FibGVzL2VuYWJsZXMgdGhlIGxpdmUgcmVnaW9uLlxcclxcbiAgICogRG9lcyBub3RoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZyB3aGVuIHRoZSBgbGl2ZWAgb3B0aW9uIGlzIG5vdCBlbmFibGVkLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcGFyYW0gZGlzYWJsZWQgLSBgdHJ1ZWAgdG8gZGlzYWJsZSB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlIGxpdmUgcmVnaW9uIG9yIGBmYWxzZWAgdG8gZW5hYmxlIGl0IGFnYWluLlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqL1xcclxcbiAgZnVuY3Rpb24gZGlzYWJsZSggZGlzYWJsZWQ6IGJvb2xlYW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk6IHZvaWQge1xcclxcbiAgICBpZiAoIGVuYWJsZWQgKSB7XFxyXFxuICAgICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJldEF0dHJpYnV0ZSggdHJhY2ssIEFSSUFfTElWRSwgZGlzYWJsZWQgPyAnb2ZmJyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiOiAncG9saXRlJyApO1xcclxcbiAgICB9XFxyXFxuICB9XFxyXFxuXFxyXFxuICByIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAgIGRpc2FibGUsXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0cm95LFxcclxcbiAgfTtcXHJcXG59IiwiaW1wb3J0IHsgT3B0aW9ucyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJmcm9tICcuLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgQ0xBU1NFUyB9IGZyb20gJy4vYyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJsYXNzZXMnO1xcclxcbmltcG9ydCB7IEkxOE4gfSBmcm9tICcuL2kxOG4nO1xcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG5cXHJcXG4vKipcXHJcXG4gKiBUaGUgY29sbGVjdGlvbiBvZiBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmYXVsdCBvcHRpb25zLlxcclxcbiAqIE5vdGUgdGhhdCB0aGlzIGNvbGxlY3Rpb24gZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZXMgbm90IGNvbnRhaW4gYWxsIG9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlIDMuMC4wXFxyXFxuICovXFxyXFxuZXhwb3J0IGNvbnN0IERFRkFVTFRTOiBPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInB0aW9ucyA9IHtcXHJcXG4gIHR5cGUgICAgICAgICAgICAgIDogJ3NsaWRlJywiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxyXFxuICByb2xlICAgICAgICAgICAgICA6ICdyZWdpb24nLFxcclxcbiAgc3BlIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkICAgICAgICAgICAgIDogNDAwLFxcclxcbiAgcGVyUGFnZSAgICAgICAgICAgOiAxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIGNsb25lU3RhdHVzICAgICAgIDogdHJ1ZSxcXHJcXG4gIGFycm93cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgICA6IHRydWUsXFxyXFxuICBwYWdpbmF0aW9uICAgICAgICA6IHRydScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLFxcclxcbiAgcGFnaW5hdGlvbktleWJvYXJkOiB0cnVlLFxcclxcbiAgaW50ZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsICAgICAgICAgIDogNTAwMCxcXHJcXG4gIHBhdXNlT25Ib3ZlciAgICAgIDogdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWUsXFxyXFxuICBwYXVzZU9uRm9jdXMgICAgICA6IHRydWUsXFxyXFxuICByZXNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInRQcm9ncmVzcyAgICAgOiB0cnVlLFxcclxcbiAgZWFzaW5nICAgICAgICAgICAgOiAnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImN1YmljLWJlemllcigwLjI1LCAxLCAwLjUsIDEpJyxcXHJcXG4gIGRyYWcgICAgICAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICAgICA6IHRydWUsXFxyXFxuICBkaXJlY3Rpb24gICAgICAgICA6ICdsdHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyxcXHJcXG4gIHRyaW1TcGFjZSAgICAgICAgIDogdHJ1ZSxcXHJcXG4gIGZvY3VzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImFibGVOb2RlcyAgICA6ICdhLCBidXR0b24sIHRleHRhcmVhLCBpbnB1dCwgc2VsZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJjdCwgaWZyYW1lJyxcXHJcXG4gIGxpdmUgICAgICAgICAgICAgIDogdHJ1ZSxcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICBjbGFzc2VzICAgICAgICAgICA6IENMQVNTRVMsXFxyXFxuICBpMThuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgICAgOiBJMThOLFxcclxcbiAgcmVkdWNlZE1vdGlvbjoge1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgc3BlZWQgICAgICA6IDAsXFxyXFxuICAgIHJld2luZFNwZWVkOiAwLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXHJcXG4gICAgYXV0b3BsYXkgICA6ICdwYXVzZScsXFxyXFxuICB9LFxcclxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ259OyIsIi8qKlxcclxcbiAqIFRoZSBjb2xsZWN0aW9uIG9mIGkxOG4gc3RyaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ3MuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKi9cXHJcXG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInhwb3J0IGNvbnN0IEkxOE4gPSB7XFxyXFxuICBwcmV2ICAgICAgOiAnUHJldmlvdXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInNsaWRlJyxcXHJcXG4gIG5leHQgICAgICA6ICdOZXh0IHNsaWRlJyxcXHJcXG4gICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJmaXJzdCAgICAgOiAnR28gdG8gZmlyc3Qgc2xpZGUnLFxcclxcbiAgbGFzdCAgICAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6ICdHbyB0byBsYXN0IHNsaWRlJyxcXHJcXG4gIHNsaWRlWCAgICA6ICdHbyB0byBzbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJpZGUgJXMnLFxcclxcbiAgcGFnZVggICAgIDogJ0dvIHRvIHBhZ2UgJXMnLFxcciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJcXG4gIHBsYXkgICAgICA6ICdTdGFydCBhdXRvcGxheScsXFxyXFxuICBwYXVzZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIgICAgIDogJ1BhdXNlIGF1dG9wbGF5JyxcXHJcXG4gIGNhcm91c2VsICA6ICdjYXJvdSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzZWwnLFxcclxcbiAgc2xpZGUgICAgIDogJ3NsaWRlJyxcXHJcXG4gIHNlbGVjdCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiICAgOiAnU2VsZWN0IGEgc2xpZGUgdG8gc2hvdycsXFxyXFxuICBzbGlkZUxhYmVsOiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiJyVzIG9mICVzJywgLy8gWyBzbGlkZSBudW1iZXIgXSAvIFsgc2xpZGUgc2l6ZSBdIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbn07XFxyXFxuIiwiaW1wb3J0IHsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJFRlJFU0ggfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZXZlbnRzJztcXHJcXG5pbXBvciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ0IHsgRXZlbnRJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb25zdHJ1Y3RvcnMnO1xcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJcXG5pbXBvcnQgeyBTcGxpZGUgfSBmcm9tICcuLi8uLi9jb3JlL1NwbGlkZS9TcGwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiaWRlJztcXHJcXG5pbXBvcnQgeyBDb21wb25lbnRzLCBPcHRpb25zLCBUcmFuc2l0aW8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBuZXgiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidFRpY2ssIG5vb3AgfSBmcm9tICcuLi8uLi91dGlscyc7XFxyXFxuXFxyXFxuXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbi8qKlxcclxcbiAqIFRoZSBjb21wb25lbnQgZm9yIHRoZSBmYWRlIHRyYW5zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLlxcclxcbiAqXFxyXFxuICogQHNpbmNlIDMuMC4wXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcmFtIFNwbGlkZSAgICAgLSBBIFNwbGlkZSBpbnN0YW5jZS5cXHJcXG4gKiBAcGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FtIENvbXBvbmVudHMgLSBBIGNvbGxlY3Rpb24gb2YgY29tcG9uZW50cy5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyogQHBhcmFtIG9wdGlvbnMgICAgLSBPcHRpb25zLlxcclxcbiAqXFxyXFxuICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gQSBUcmFuc2l0aW9uIGNvbXBvbmVudCBvYmplY3QuXFxyXFxuICovJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbmV4cG9ydCBmdW5jdGlvbiBGYWRlKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogVHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnQge1xcclxcbiAgY29uc3QgeyBTbGlkZXMgfSA9IENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudCBpcyBtb3VudGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQoKTogdm9pZCB7XFxyXFxuICAgIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKS5vbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIFsgRVZFTlRfTU9VTlRFRCwgRVZFTlRfUkVGUkVTSCBdLCBpbml0ICk7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgY29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudC5cXHJcXG4gICAqIE9mZnNldHMgYWxsIHNsaWRlcyBmb3Igc3RhY2tpbmcgdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoZW0gb250byB0aGUgaGVhZCBvZiB0aGUgbGlzdC5cXHJcXG4gICAqIFRoZSBgbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUaWNrYCBkaXNhYmxlcyB0aGUgaW5pdGlhbCBmYWRlIHRyYW5zaXRpb24gb2YgdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBmaXJzdCBzbGlkZS5cXHJcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gaW5pdCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogdm9pZCB7XFxyXFxuICAgIFNsaWRlcy5mb3JFYWNoKCBTbGlkZSA9PiB7XFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIlxcbiAgICAgIFNsaWRlLnN0eWxlKCAndHJhbnNmb3JtJywgYHRyYW5zbGF0ZVgoLSQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneyAxMDAgKiBTbGlkZS5pbmRleCB9JSlgICk7XFxyXFxuICAgIH0gKTtcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFN0YXJ0cyB0aGUgdHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcmFtIGluZGV4IC0gQSBzbGlkZSBpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggdG8gYmUgYWN0aXZlLlxcclxcbiAgICogQHBhcmFtIGRvbmUgIC0gVGhlIGNhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYmFjayBmdW5jdGlvbiB0aGF0IG11c3QgYmUgY2FsbGVkIGFmdGVyIHRoZSB0cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnNpdGlvbiBlbmRzLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBzdGFydCggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZGV4OiBudW1iZXIsIGRvbmU6ICgpID0+IHZvaWQgKTogdm9pZCB7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBTbGlkZXMuc3R5bGUoICd0cmFuc2l0aW9uJywgYG9wYWNpdHkgJHsgb3B0aW9ucyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc3BlZWQgfW1zICR7IG9wdGlvbnMuZWFzaW5nIH1gICk7XFxyXFxuICAgIG5leHRUaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjayggZG9uZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG1vdW50LFxcclxcbiAgICBzdGFydCxcXHJcXG4gICAgY2FuY2VsOiBub29wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcXHJcXG4gIH07XFxyXFxufVxcclxcbiIsImltcG9ydCB7IFNMSURFIH0gZnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIib20gJy4uLy4uL2NvbnN0YW50cy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZXJmYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RydWN0b3JzJztcXHJcXG5pbXBvcnQgeyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiU3BsaWRlIH0gZnJvbSAnLi4vLi4vY29yZS9TcGxpZGUvU3BsaWRlJztcXHJcXG5pbXAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0IHsgQ29tcG9uZW50cywgT3B0aW9ucywgVHJhbnNpdGlvbkNvbXBvbmVudCB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBmcm9tICcuLi8uLi90eXBlcyc7XFxyXFxuaW1wb3J0IHsgYWJzLCBhcHBseSwgc3R5IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImxlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xcclxcblxcclxcblxcclxcbi8qKlxcIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gKiBUaGUgY29tcG9uZW50IGZvciB0aGUgc2xpZGUgdHJhbnNpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKlxcclxcbiAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyYW0gU3BsaWRlICAgICAtIEEgU3BsaWRlIGluc3RhbmNlLlxcclxcbiAqIEBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW0gQ29tcG9uZW50cyAtIEEgY29sbGVjdGlvbiBvZiBjb21wb25lbnRzLlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBAcGFyYW0gb3B0aW9ucyAgICAtIE9wdGlvbnMuXFxyXFxuICpcXHJcXG4gKiBAJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBBIFRyYW5zaXRpb24gY29tcG9uZW50IG9iamVjdC5cXHJcXG4gKi8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuZXhwb3J0IGZ1bmN0aW9uIFNsaWRlKCBTcGxpZGU6IFNwbGlkZSwgQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHM6IENvbXBvbmVudHMsIG9wdGlvbnM6IE9wdGlvbnMgKTogVHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25Db21wb25lbnQge1xcclxcbiAgY29uc3QgeyBNb3ZlLCBDb250cm9sbGVyLCBTY3JvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsIH0gPSBDb21wb25lbnRzO1xcclxcbiAgY29uc3QgeyBsaXN0IH0gPSBDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cy5FbGVtZW50cztcXHJcXG4gIGNvbnN0IHRyYW5zaXRpb24gPSBhcHBseSggc3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImxlLCBsaXN0LCAndHJhbnNpdGlvbicgKTtcXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqIEhvbGRzIHRoZSBgZG9uZWAgY2FsbGJhY2sgZnVuY3Rpb24uXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICovXFxyXFxuICBsZXQgZW5kQ2FsbGJhY2s6ICgpID0+IHZvaWQ7XFxyXFxuXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgLyoqXFxyXFxuICAgKiBDYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVkLlxcclxcbiAgICovXFxyXFxuICBmdW5jdGlvbiBtb3VudCgpOiB2b2lkIHtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuICAgIEV2ZW50SW50ZXJmYWNlKCBTcGxpZGUgKS5iaW5kKCBsaXN0LCAndHJhIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIm5zaXRpb25lbmQnLCBlID0+IHtcXHJcXG4gICAgICBpZiAoIGUudGFyZ2V0ID09PSBsIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzdCAmJiBlbmRDYWxsYmFjayApIHtcXHJcXG4gICAgICAgIGNhbmNlbCgpO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICAgIGVuZENhbGxiYWNrKCk7XFxyXFxuICAgICAgfVxcclxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTdGFydHMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSB0cmFuc2l0aW9uLlxcclxcbiAgICogVGhlIE1vdmUgY29tcG9uZW50IGNhbGxzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzIG1ldGhvZCBqdXN0IGJlZm9yZSB0aGUgc2xpZGVyIG1vdmVzLlxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggLSBBIGRlc3RpbmF0aW9uIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneC5cXHJcXG4gICAqIEBwYXJhbSBkb25lICAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhhdCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgdHJhbnNpdGlvbiBlbmRzLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqL1xcclxcbiAgZnVuY3Rpb24gc3RhcnQoIGluZGV4OiBudW1iZXIsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb25lOiAoKSA9PiB2b2lkICk6IHZvaWQge1xcclxcbiAgICBjb25zdCBkZXN0aW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gPSBNb3ZlLnRvUG9zaXRpb24oIGluZGV4LCB0cnVlICk7XFxyXFxuICAgIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBwb3NpdGlvbiAgICA9IE1vdmUuZ2V0UG9zaXRpb24oKTtcXHJcXG4gICAgY29ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0IHNwZWVkICAgICAgID0gZ2V0U3BlZWQoIGluZGV4ICk7XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoIGFicyggZGVzdGluYXRpb24gLSBwb3NpdGlvbiApID49IDEgJiYgc3BlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VkID49IDEgKSB7XFxyXFxuICAgICAgaWYgKCBvcHRpb25zLnVzZVNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XFxyXFxuICAgICAgICBTY3JvbGwuc2Nyb2xsKCBkZXN0aW5hdGlvbiwgc3BlZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBmYWxzZSwgZG9uZSApO1xcclxcbiAgICAgIH0gZWxzZSB7XFxyXFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdHJhbnNpdGlvbiggYHRyYW5zZm9ybSAkeyBzcGVlZCB9bXMgJHsgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZWFzaW5nIH1gICk7XFxyXFxuICAgICAgICBNb3ZlLnRyYW5zbGF0ZSggZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCB0cnVlICk7XFxyXFxuICAgICAgICBlbmRDYWxsYmFjayA9IGRvbmU7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICAgIH1cXHJcXG4gICAgfSBlbHNlIHtcXHJcXG4gICAgICBNb3ZlLmp1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wKCBpbmRleCApO1xcclxcbiAgICAgIGRvbmUoKTtcXHJcXG4gICAgfVxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogQ2FuY2VscyB0aGUgdHJhbnNpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24uXFxyXFxuICAgKi9cXHJcXG4gIGZ1bmN0aW9uIGNhbmNlbCgpOiB2b2lkIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgIHRyYW5zaXRpb24oICcnICk7XFxyXFxuICAgIFNjcm9sbC5jYW5jZWwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RoZSB0cmFuc2l0aW9uIHNwZWVkLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5kZXggLSBBIGRlc3RpbmF0aW9uIGluZGV4LlxcclxcbiAgICovXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZ2V0U3BlZWQoIGluZGV4OiBudW1iZXIgKTogbnVtYmVyIHtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGNvbnN0IHsgcmV3aW5kU3BlZWQgfSA9IG9wdGlvbnM7XFxyXFxuXFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoIFNwbGlkZS5pcyggU0xJREUgKSAmJiByZXdpbmRTcGVlZCApIHtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgICAgY29uc3QgcHJldiA9IENvbnRyb2xsZXIuZ2V0SW5kZXgoIHRydWUgKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XFxyXFxuICAgICAgY29uc3QgZW5kICA9IENvbnRyb2xsZXIuZ2V0RW5kKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcblxcclxcbiAgICAgIGlmICggKCBwcmV2ID09PSAwICYmIGluZGV4ID49ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmQgKSB8fCAoIHByZXYgPj0gZW5kICYmIGluZGV4ID09PSAwICkgKSB7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgcmV0dXJuIHJld2luZFNwZWVkO1xcclxcbiAgICAgIH1cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIG9wdGlvbnMuc3BlZWQ7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgcmV0dXJuIHtcXHJcXG4gICAgbW91bnQsXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzdGFydCxcXHJcXG4gICAgY2FuY2VsLFxcclxcbiAgfTtcXHJcXG59XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsImltcG9ydCAqIGFzIENvbXBvbmVudENvbnN0cnVjdG9ycyBmcm9tIFwnLi4vLi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL2NvbXBvbmVudHMnO1xcclxcbmltcG9ydCB7IFNsaWRlTWF0Y2hlciB9IGZyb20gJy4iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLi8uLi9jb21wb25lbnRzL1NsaWRlcy9TbGlkZXMnO1xcclxcbmltcG9ydCB7IENMQVMiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiU19JTklUSUFMSVpFRCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9jbGFzc2VzJztcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJyXFxuaW1wb3J0IHsgREVGQVVMVFMgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZGVmIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImF1bHRzJztcXHJcXG5pbXBvcnQgeyBFVkVOVF9ERVNUUk9ZLCBFVkVOVF9NT1VOVEVEIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiwgRVZFTlRfUkVBRFksIEVWRU5UX1JFRlJFU0ggfSBmcm9tICcuLi8uLi9jb25zdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhbnRzL2V2ZW50cyc7XFxyXFxuaW1wb3J0IHsgREFUQV9BVFRSSUJVVEUgfSBmcm9tICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiInLi4vLi4vY29uc3RhbnRzL3Byb2plY3QnO1xcclxcbmltcG9ydCB7IENSRUFURUQsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJERVNUUk9ZRUQsIElETEUsIFNUQVRFUyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy8iCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIic3RhdGVzJztcXHJcXG5pbXBvcnQgeyBGQURFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIicy90eXBlcyc7XFxyXFxuaW1wb3J0IHsgRXZlbnRJbnRlcmZhY2UsIEV2ZW50SW50ZXIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZmFjZU9iamVjdCwgU3RhdGUsIFN0YXRlT2JqZWN0IH0gZnJvbSAnLi4vLi4vY29uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiInN0cnVjdG9ycyc7XFxyXFxuaW1wb3J0IHsgRmFkZSwgU2xpZGUgfSBmcm9tICcuLi8uIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiIi4vdHJhbnNpdGlvbnMnO1xcclxcbmltcG9ydCB7IEFueUZ1bmN0aW9uLCBDb21wb25lIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250Q29uc3RydWN0b3IsIENvbXBvbmVudHMsIEV2ZW50TWFwLCBPcHRpb25zLCBTeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJuY1RhcmdldCB9IGZyb20gJy4uLy4uL3R5cGVzJztcXHJcXG5pbXBvcnQgeyBhZGRDbCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3MsIGFzc2VydCwgYXNzaWduLCBlbXB0eSwgZm9yT3duLCBnZXRBdHRyaWJ1dGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiLCBpc1N0cmluZywgbWVyZ2UsIHF1ZXJ5LCBzbGljZSB9IGZyb20gJy4uLy4uL3V0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImlscyc7XFxyXFxuaW1wb3J0IHsgQVJJQV9MQUJFTCwgQVJJQV9MQUJFTExFREJZIH0gIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImZyb20gJy4uLy4uL2NvbnN0YW50cy9hdHRyaWJ1dGVzJztcXHJcXG5cXHJcXG5cXHIiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuLyoqXFxyXFxuICogVGhlIGZyb250ZW5kIGNsYXNzIGZvciB0aGUgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBzbGlkZXIuXFxyXFxuICpcXHJcXG4gKiBAc2luY2UgMy4wLjBcXHJcXG4gKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicvXFxyXFxuZXhwb3J0IGNsYXNzIFNwbGlkZSB7XFxyXFxuICAvKipcXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDaGFuZ2VzIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIGFsbCBTcGxpZGUgaW5zdGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmNlcy5cXHJcXG4gICAqL1xcclxcbiAgc3RhdGljIGRlZmF1bHRzOiBPcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHt9O1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgY29sbGVjdGlvbiBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Ygc3RhdGUgbnVtYmVycy5cXHJcXG4gICAqL1xcclxcbiAgc3RhdGljIHJlYWRvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidseSBTVEFURVMgPSBTVEFURVM7XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcm9vdCBlbGVtZW50IHdoZXJlIHRoZSBTcGxpZGUgaXMgYXBwbGllZC5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKi9cXHJcXG4gIHJlYWRvbmx5IHJvb3Q6IEhUTUxFbGVtZW50O1xcclxcblxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIC8qKlxcclxcbiAgICogVGhlIEV2ZW50QnVzT2JqZWN0IG9iamVjdC5cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKi9cXHJcXG4gIHJlYWRvbmx5IGV2ZW50OiBFdmVudEludGVyZmFjZU9iamVjdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBFdmVudEludGVyZmFjZSgpO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbGxlY3Rpb24gb2YgYWxsIGNvbXBvbmVudCBvYmplY3RzLlxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqL1xcclxcbiAgcmVhZG9ubHkgQ29tcG9uZW50czogQ29tcG9uZW50cyA9IHt9IGFzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzO1xcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBUaGUgU3RhdGVPYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0IG9iamVjdC5cXHJcXG4gICAqL1xcclxcbiAgcmVhZG9ubHkgc3RhdGU6IFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGF0ZU9iamVjdCA9IFN0YXRlKCBDUkVBVEVEICk7XFxyXFxuXFxyXFxuICAvKipcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBBbiBhcnJheSB3aXRoIFN5bmNUYXJnZXQgb2JqZWN0cyBmb3Igc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSBpbnN0YW5jZXMgdG8gc3luYyB3aXRoLlxcclxcbiAgICovXFxyXFxuICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZG9ubHkgc3BsaWRlczogU3luY1RhcmdldFtdID0gW107XFxyXFxuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyoqXFxyXFxuICAgKiBUaGUgY3VycmVudCBvcHRpb25zLlxcclxcbiAgICovXFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgcHJpdmF0ZSByZWFkb25seSBfbzogT3B0aW9ucyA9IHt9O1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgYWxsIGNvbXBvbmVudHMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICovXFxyXFxuICBwcml2YXRlIF9DOiBDb21wb25lbnRzO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgZXh0ZW5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMuXFxyXFxuICAgKi9cXHJcXG4gIHByaXZhdGUgX0U6IFJlY29yZDxzdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnLCBDb21wb25lbnRDb25zdHJ1Y3Rvcj4gPSB7fTtcXHJcXG5cXHJcXG4gIC8qKlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudC5cXHJcXG4gICAqL1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gIHByaXZhdGUgX1Q6IENvbXBvbmVudENvbnN0cnVjdG9yO1xcclxcblxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gIC8qKlxcclxcbiAgICogVGhlIFNwbGlkZSBjb25zdHJ1Y3Rvci5cXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKlxcclxcbiAgICogQHBhcmFtIHRhcmdldCAgLSBUaGUgc2VsZWN0b3IgZm9yIHRoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGFyZ2V0IGVsZW1lbnQsIG9yIHRoZSBlbGVtZW50IGl0c2VsZi5cXHJcXG4gICAqICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsLiBBbiBvYmplY3Qgd2l0aCBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5cXHJcXG4gICAqL1xcclxcbiAgY29uc3RydWN0b3IoIHRhcmdldDogc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB8IEhUTUxFbGVtZW50LCBvcHRpb25zPzogT3B0aW9ucyApIHtcXHJcXG4gICAgY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0IHJvb3QgPSBpc1N0cmluZyggdGFyZ2V0ICkgPyBxdWVyeTxIVE1MRWxlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic+KCBkb2N1bWVudCwgdGFyZ2V0ICkgOiB0YXJnZXQ7XFxyXFxuICAgIGFzc2VydCggcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3QsIGAkeyByb290IH0gaXMgaW52YWxpZC5gICk7XFxyXFxuXFxyXFxuICAgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLnJvb3QgPSByb290O1xcclxcblxcclxcbiAgICBvcHRpb25zID0gbWVyZ2UoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XFxyXFxuICAgICAgbGFiZWwgICAgIDogZ2V0QXR0cmlidXRlKCByb290LCBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIl9MQUJFTCApIHx8ICcnLFxcclxcbiAgICAgIGxhYmVsbGVkYnk6IGdldEF0dHJpYnV0IgogICAgICAgICAgICAgICAgICAgICAgICAgICBiImUoIHJvb3QsIEFSSUFfTEFCRUxMRURCWSApIHx8ICcnLFxcclxcbiAgICB9LCBERUZBIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VMVFMsIFNwbGlkZS5kZWZhdWx0cywgb3B0aW9ucyB8fCB7fSApO1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgdHJ5IHtcXHJcXG4gICAgICBtZXJnZSggb3B0aW9ucywgSlNPTi5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fyc2UoIGdldEF0dHJpYnV0ZSggcm9vdCwgREFUQV9BVFRSSUJVVEUgKSApICk7XFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICB9IGNhdGNoICggZSApIHtcXHJcXG4gICAgICBhc3NlcnQoIGZhbHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZSwgJ0ludmFsaWQgSlNPTicgKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICB0aGkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5fbyA9IE9iamVjdC5jcmVhdGUoIG1lcmdlKCB7fSwgb3B0aW9ucyApICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBJbml0aWFsaXplcyB0aGUgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RhbmNlLlxcclxcbiAgICpcXHJcXG4gICAqIEBwYXJhbSBFeHRlbnNpb25zIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbmFsLiBBbiBvYmplY3Qgd2l0aCBleHRlbnNpb25zLlxcclxcbiAgICogQHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbSBUcmFuc2l0aW9uIC0gT3B0aW9uYWwuIEEgVHJhbnNpdGlvbiBjb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0LlxcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gYHRoaXNgXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyovXFxyXFxuICBtb3VudCggRXh0ZW5zaW9ucz86IFJlY29yZDxzdHJpbmcsIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRDb25zdHJ1Y3Rvcj4sIFRyYW5zaXRpb24/OiBDb21wb25lbnRDb25zdHJ1YycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3IgKTogdGhpcyB7XFxyXFxuICAgIGNvbnN0IHsgc3RhdGUsIENvbXBvbmVudHMgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSB0aGlzO1xcclxcbiAgICBhc3NlcnQoIHN0YXRlLmlzKCBbIENSRUFURUQsIERFUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJUUk9ZRUQgXSApLCAnQWxyZWFkeSBtb3VudGVkIScgKTtcXHJcXG5cXHJcXG4gICAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHN0YXRlLnNldCggQ1JFQVRFRCApO1xcclxcblxcclxcbiAgICB0aGlzLl9DID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHM7XFxyXFxuICAgIHRoaXMuX1QgPSBUcmFuc2l0aW9uIHx8IHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19UIHx8ICggdGhpcy5pcyggRkFERSApID8gRmFkZSA6IFNsaWRlICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLl9FID0gRXh0ZW5zaW9ucyB8fCB0aGlzLl9FO1xcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY29uc3QgQ29uc3RydWN0b3JzID0gYXNzaWduKCB7fSwgQ29tcG9uZW50Q29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVjdG9ycywgdGhpcy5fRSwgeyBUcmFuc2l0aW9uOiB0aGlzLl9UIH0gKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIGZvck93biggQ29uc3RydWN0b3JzLCAoIENvbXBvbmVudCwga2V5ICknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0+IHtcXHJcXG4gICAgICBjb25zdCBjb21wb25lbnQgPSBDb21wb25lbnQoIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBDb21wb25lbnRzLCB0aGlzLl9vICk7XFxyXFxuICAgICAgQ29tcG9uZW50c1sga2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSBdID0gY29tcG9uZW50O1xcclxcbiAgICAgIGNvbXBvbmVudC5zZXR1cCAmJiBjb20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncG9uZW50LnNldHVwKCk7XFxyXFxuICAgIH0gKTtcXHJcXG5cXHJcXG4gICAgZm9yT3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiggQ29tcG9uZW50cywgY29tcG9uZW50ID0+IHtcXHJcXG4gICAgICBjb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLm1vdW50ICYmIGNvbXBvbmVudC5tb3VudCgpO1xcclxcbiAgICB9ICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICB0aGlzLmVtaXQoIEVWRU5UX01PVU5URUQgKTtcXHJcXG5cXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGFkZENsYXNzKCB0aGlzLnJvb3QsIENMQVNTX0lOSVRJQUxJWkVEICk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICBzdGF0ZS5zZXQoIElETEUgKTtcXHJcXG4gICAgdGhpcy5lbWl0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfUkVBRFkgKTtcXHJcXG5cXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBTeW5jcyB0aGUgc2xpZGVyIHdpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoIHRoZSBwcm92aWRlZCBvbmUuXFxyXFxuICAgKiBUaGlzIG1ldGhvZCBtdXN0IGJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYWxsZWQgYmVmb3JlIHRoZSBgbW91bnQoKWAuXFxyXFxuICAgKlxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIEBleGFtcGxlXFxyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyIHByaW1hcnkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgPSBuZXcgU3BsaWRlKCk7XFxyXFxuICAgKiB2YXIgc2Vjb25kYXJ5ID0gbmV3IFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUoKTtcXHJcXG4gICAqXFxyXFxuICAgKiBwcmltYXJ5LnN5bmMoIHNlY29uZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcnkgKTtcXHJcXG4gICAqIHByaW1hcnkubW91bnQoKTtcXHJcXG4gICAqIHNlY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRhcnkubW91bnQoKTtcXHJcXG4gICAqIGBgYFxcclxcbiAgICpcXHJcXG4gICAqIEAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyYW0gc3BsaWRlIC0gQSBTcGxpZGUgaW5zdGFuY2UgdG8gc3luYyB3aXRoLlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgc3luYyggc3BsaWRlOiBTcGxpZGUgKTogdGhpcyB7XFxyXFxuICAgIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLnNwbGlkZXMucHVzaCggeyBzcGxpZGUgfSApO1xcclxcbiAgICBzcGxpZGUuc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXMucHVzaCggeyBzcGxpZGU6IHRoaXMsIGlzUGFyZW50OiB0cnVlIH0gKTtcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuXFxyXFxuICAgIGlmICggdGhpcy5zdGF0ZS5pcyggSURMRSApICkge1xcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB0aGlzLl9DLlN5bmMucmVtb3VudCgpO1xcclxcbiAgICAgIHNwbGlkZS5DbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50cy5TeW5jLnJlbW91bnQoKTtcXHJcXG4gICAgfVxcclxcblxcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHRoaXM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKiBNb3ZlcyB0aGUgc2xpZGVyIHdpdGggdGhlIGZvbGxvd2luZyBjb250cm9sIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R0ZXJuLlxcclxcbiAgICpcXHJcXG4gICAqIHwgUGF0dGVybiB8IERlc2NyaXB0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB8XFxyXFxuICAgKiB8LS0tfC0tLXxcXHJcXG4gICAqIHwgYGlgIHwgR29lcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIidG8gdGhlIHNsaWRlIGBpYCB8XFxyXFxuICAgKiB8IGAnKyR7aX0nYCB8IEluY3JlbWUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIibnRzIHRoZSBzbGlkZSBpbmRleCBieSBgaWAgfFxcclxcbiAgICogfCBgJy0ke2l9J2AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgRGVjcmVtZW50cyB0aGUgc2xpZGUgaW5kZXggYnkgYGlgIHxcXHJcXG4gICAqIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiIGAnPidgIHwgR29lcyB0byB0aGUgbmV4dCBwYWdlIHxcXHJcXG4gICAqIHwgYCc8J2AiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgR29lcyB0byB0aGUgcHJldmlvdXMgcGFnZSB8XFxyXFxuICAgKiB8IGA+JHtpfWAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHwgR29lcyB0byB0aGUgcGFnZSBgaWAgfFxcclxcbiAgICpcXHJcXG4gICAqIEluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiBtb3N0IGNhc2VzLCBgJz4nYCBhbmQgYCc8J2Agbm90YXRpb25zIGFyZSBlbm91ZyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoIHRvIGNvbnRyb2wgdGhlIHNsaWRlclxcclxcbiAgICogYmVjYXVzZSB0aGV5IHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZWN0IGBwZXJQYWdlYCBhbmQgYHBlck1vdmVgIG9wdGlvbnMuXFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIEBleGFtcGxlXFxyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzcGxpZGUgPSBuZXcgU3BsaWRlKCk7XFxyXFxuICAgKlxcclxcbiAgICogLy8gRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZXMgdG8gdGhlIHNsaWRlIDE6XFxyXFxuICAgKiBzcGxpZGUuZ28oIDEgKTtcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKlxcclxcbiAgICogLy8gSW5jcmVtZW50cyB0aGUgaW5kZXg6XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiIiAgICogc3BsaWRlLmdvKCAnKzInICk7XFxyXFxuICAgKlxcclxcbiAgICogLy8gRyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJvZXMgdG8gdGhlIG5leHQgcGFnZTpcXHJcXG4gICAqIHNwbGlkZS5nbyggJz4nIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyApO1xcclxcbiAgICpcXHJcXG4gICAqIC8vIEdvZXMgdG8gdGhlIHBhZ2UgMjpcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiXFxuICAgKiBzcGxpZGUuZ28oICc+MicgKTtcXHJcXG4gICAqIGBgYFxcclxcbiAgICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicqXFxyXFxuICAgKiBAcGFyYW0gY29udHJvbCAtIEEgY29udHJvbCBwYXR0ZXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL1xcclxcbiAgZ28oIGNvbnRyb2w6IG51bWJlciB8IHN0cmluZyApOiB0aGlzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XFxyXFxuICAgIHRoaXMuX0MuQ29udHJvbGxlci5nbyggY29udHJvbCApO1xccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICB9XFxyXFxuXFxyXFxuICAvKipcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICAgKiBSZWdpc3RlcnMgYW4gZXZlbnQgaGFuZGxlci5cXHJcXG4gICAqXFxyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcbiAgICogQGV4YW1wbGVcXHJcXG4gICAqIGBgYHRzXFxyXFxuICAgKiB2YXIgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSA9IG5ldyBTcGxpZGUoKTtcXHJcXG4gICAqXFxyXFxuICAgKiAvLyBMaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiImVucyB0byBhIHNpbmdsZSBldmVudDpcXHJcXG4gICAqIHNwbGlkZS5vbiggJ21vdmUnIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZnVuY3Rpb24oKSB7fSApO1xcclxcbiAgICpcXHJcXG4gICAqIC8vIExpc3RlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJzIHRvIG11bHRpcGxlIGV2ZW50czpcXHJcXG4gICAqIHNwbGlkZS5vbiggJ21vdmUgciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJlc2l6ZScsIGZ1bmN0aW9uKCkge30gKTtcXHJcXG4gICAqXFxyXFxuICAgKiAvLyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiQXBwZW5kcyBhIG5hbWVzcGFjZTpcXHJcXG4gICAqIHNwbGlkZS5vbiggJ21vdmUubXkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiTmFtZXNwYWNlIHJlc2l6ZS5teU5hbWVzcGFjZScsIGZ1bmN0aW9uKCkge30gKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gQW4gZXZlbnQgbmFtZSBvciBuYW1lcyBzZXBhcmF0ZWQgYnkgc3BhY2VzLiBVcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlIGEgZG90KC4pIHRvIGFwcGVuZCBhIG5hbWVzcGFjZS5cXHJcXG4gICAqIEBwYXJhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FsbGJhY2sgLSBBIGNhbGxiYWNrIGZ1bmN0aW9uLlxcclxcbiAgICpcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICBvbjxLIGV4dGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RzIGtleW9mIEV2ZW50TWFwPiggZXZlbnRzOiBLLCBjYWxsYmFjazogRXZlbnRNYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwWyBLIF0gKTogdGhpcztcXHJcXG4gIG9uKCBldmVudHM6IHN0cmluZyB8IHN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXSwgY2FsbGJhY2s6IEFueUZ1bmN0aW9uICk6IHRoaXM7XFxyXFxuICBvbiggZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czogc3RyaW5nIHwgc3RyaW5nW10sIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiApOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcyB7XFxyXFxuICAgIHRoaXMuZXZlbnQub24oIGV2ZW50cywgY2FsbGJhY2sgKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAgIHJldHVybiB0aGlzO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogUmVtb3ZlcyB0aGUgcmVnaXN0ZXJlZCBhbGwgaGFuZGxlcnMgZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGUgc3BlY2lmaWVkIGV2ZW50IG9yIGV2ZW50cy5cXHJcXG4gICAqIElmIHlvdSB3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FudCB0byBvbmx5IHJlbW92ZSBhIHBhcnRpY3VsYXIgaGFuZGxlciwgdXNlIG5hbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3BhY2UgdG8gaWRlbnRpZnkgaXQuXFxyXFxuICAgKlxcclxcbiAgICogQGV4YW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxlXFxyXFxuICAgKiBgYGB0c1xcclxcbiAgICogdmFyIHNwbGlkZSA9IG5ldyBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlKCk7XFxyXFxuICAgKlxcclxcbiAgICogLy8gUmVtb3ZlcyBhbGwgaGFuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXJzIGFzc2lnbmVkIHRvIFxcIm1vdmVcXCI6XFxyXFxuICAgKiBzcGxpZGUub2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiZiggJ21vdmUnICk7XFxyXFxuICAgKlxcclxcbiAgICogLy8gT25seSByZW1vdmVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBoYW5kbGVycyB0aGF0IGJlbG9uZyB0byB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI6XFxyXFxuICAgKiBzcGxpZGUub2ZmKCAnbW92ZS5teU5hbWVzcGFjZScgKTtcXCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKiBgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnRzIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FuIGV2ZW50IG5hbWUgb3IgbmFtZXMgc2VwYXJhdGVkIGJ5IHNwYWNlcy4gVXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhIGRvdCguKSB0byBhcHBlbmQgYSBuYW1lc3BhY2UuXFxyXFxuICAgKlxcclxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAqIEByZXR1cm4gYHRoaXNgXFxyXFxuICAgKi9cXHJcXG4gIG9mZjxLIGV4dGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RzIGtleW9mIEV2ZW50TWFwPiggZXZlbnRzOiBLIHwgS1tdIHwgc3RyaW5nIHwgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmluZ1tdICk6IHRoaXMge1xcclxcbiAgICB0aGlzLmV2ZW50Lm9mZiggZXZlbnRzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xcclxcbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKipcXHJcXG4gICAqIEVtaXRzIGFuIGV2ZW50IGFuZCB0cmlnZ2VycyByZWdpc3RlcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCBoYW5kbGVycy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gZXZlbnQgLSBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gZXZlbnQgbmFtZSB0byBlbWl0LlxcclxcbiAgICogQHBhcmFtIGFyZ3MgIC0gT3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbmFsLiBBbnkgbnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwYXNzIHRvIGhhbmRsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycy5cXHJcXG4gICAqXFxyXFxuICAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAqL1xcclxcbiAgZW1pdDxLIGV4dGVuZHMga2V5b2YgRXZlbnRNYXA+KCBldmVudDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ssIC4uLmFyZ3M6IFBhcmFtZXRlcnM8RXZlbnRNYXBbIEsgXT4gKTogdGhpcztcXHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxuICBlbWl0KCBldmVudDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSApOiB0aGlzOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gIGVtaXQoIGV2ZW50OiBzdHJpbmcgKTogdGhpcyB7XFxyXFxuICAgIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLXJlc3QtcGFyYW1zLCBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZmVyLXNwcmVhZFxcclxcbiAgICB0aGlzLmV2ZW50LmVtaXQoIGV2ZW50LCAuLi5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpY2UoIGFyZ3VtZW50cywgMSApICk7XFxyXFxuICAgIHJldHVybiB0aGlzO1xcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogSW5zZXJ0cyBhIHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLlxcclxcbiAgICpcXHJcXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKiBAZXhhbXBsZVxcclxcbiAgICogYGBgdHNcXHJcXG4gICAqIHZhciBzcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbmV3IFNwbGlkZSgpO1xcclxcbiAgICogc3BsaWRlLm1vdW50KCk7XFxyXFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICpcXHJcXG4gICAqIC8vIEFkZHMgdGhlIHNsaWRlIGJ5IHRoZSBIVE1MOlxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiInJcXG4gICAqIHNwbGlkZS5hZGQoICc8bGk+PC9saT4gKTtcXHJcXG4gICAqXFxyXFwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICogLy8gb3IgYWRkcyB0aGUgZWxlbWVudDpcXHJcXG4gICAqIHNwbGlkZS5hZGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnbGknICkgKTtcXHJcXG4gICAqICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidgYGBcXHJcXG4gICAqXFxyXFxuICAgKiBAcGFyYW0gc2xpZGVzIC0gQSBzbGlkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWxlbWVudCwgYW4gSFRNTCBzdHJpbmcgdGhhdCByZXByZXNlbnRzIGEgc2xpZGUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvciBhbiBhcnJheSB3aXRoIHRoZW0uXFxyXFxuICAgKiBAcGFyYW0gaW5kZXggIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbmFsLiBBbiBpbmRleCB0byBpbnNlcnQgYSBzbGlkZSBhdC5cXHJcXG4gICAqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICogQHJldHVybiBgdGhpc2BcXHJcXG4gICAqL1xcclxcbiAgYWRkKCBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVzOiBzdHJpbmcgfCBIVE1MRWxlbWVudCB8IEFycmF5PHN0cmluZyB8IEhUTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMRWxlbWVudD4sIGluZGV4PzogbnVtYmVyICk6IHRoaXMge1xcclxcbiAgICB0aGlzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQy5TbGlkZXMuYWRkKCBzbGlkZXMsIGluZGV4ICk7XFxyXFxuICAgIHJldHVybiB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcbiAgICogUmVtb3ZlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGVzIHRoYXQgbWF0Y2ggdGhlIG1hdGNoZXJcXHJcXG4gICAqIHRoYXQgY2FuIGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSBhbiBpbmRleCwgYW4gYXJyYXkgd2l0aCBpbmRpY2VzLCBhIHNlbGVjdG9yLCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgYW4gaXRlcmF0ZWUgZnVuY3Rpb24uXFxyXFxuICAgKlxcclxcbiAgICogQHBhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbSBtYXRjaGVyIC0gQW4gaW5kZXgsIGFuIGFycmF5IHdpdGggaW5kaWNlcywgYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3Igc3RyaW5nLCBvciBhbiBpdGVyYXRlZSBmdW5jdGlvbi5cXHJcXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKi9cXHJcXG4gIHJlbW92ZSggbWF0Y2hlcjogU2xpZGVNYXRjaGVyICk6IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzIHtcXHJcXG4gICAgdGhpcy5fQy5TbGlkZXMucmVtb3ZlKCBtYXRjaGVyICk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXHJcXG4gICAqIENoZWNrcyB0aGUgc2xpZGVyIHR5cGUuXFxyXFxuICAgKlxcclxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAqIEBwYXJhbSB0eXBlIC0gQSB0eXBlIHRvIHRlc3QuXFxyXFxuICAgKlxccicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcXG4gICAqIEByZXR1cm4gYHRydWVgIGlmIHRoZSB0eXBlIG1hdGNoZXMgdGhlIGN1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JyZW50IG9uZSwgb3Igb3RoZXJ3aXNlIGBmYWxzZWAuXFxyXFxuICAgKi9cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICBpcyggdHlwZTogc3RyaW5nICk6IGJvb2xlYW4ge1xcclxcbiAgICByZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMuX28udHlwZSA9PT0gdHlwZTtcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJypcXHJcXG4gICAqIFJlZnJlc2hlcyB0aGUgc2xpZGVyLlxcclxcbiAgICpcXHJcXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgKiBAcmV0dXJuIGB0aGlzYFxcclxcbiAgICovXFxyXFxuICByZWZyZXNoKCk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzIHtcXHJcXG4gICAgdGhpcy5lbWl0KCBFVkVOVF9SRUZSRVNIICk7XFxyXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiAgICByZXR1cm4gdGhpcztcXHJcXG4gIH1cXHJcXG5cXHJcXG4gIC8qKlxcclxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gICAqIERlc3Ryb3lzIHRoZSBzbGlkZXIuXFxyXFxuICAgKlxcclxcbiAgICogQCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYXJhbSBjb21wbGV0ZWx5IC0gT3B0aW9uYWwuIElmIGB0cnVlYCwgU3BsaWRlIHcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWxsIG5vdCByZW1vdW50IHRoZSBzbGlkZXIgYnkgYnJlYWtwb2ludHMuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEByZXR1cm4gYHRoaXNgXFxyXFxuICAgKi9cXHJcXG4gIGRlc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm95KCBjb21wbGV0ZWx5ID0gdHJ1ZSApOiB0aGlzIHtcXHJcXG4gICAgY29uc3QgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQsIHN0YXRlIH0gPSB0aGlzO1xcclxcblxcclxcbiAgICBpZiAoIHN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyggQ1JFQVRFRCApICkge1xcclxcbiAgICAgIC8vIFBvc3Rwb25lcyBkZXN0cnVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gcmVxdWVzdGVkIGJlZm9yZSB0aGUgc2xpZGVyIGJlY29tZXMgcmVhZHkuXFwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInclxcbiAgICAgIEV2ZW50SW50ZXJmYWNlKCB0aGlzICkub24oIEVWRU5UX1JFQURZLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5kZXN0cm95LmJpbmQoIHRoaXMsIGNvbXBsZXRlbHkgKSApO1xcclxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSBlbHNlIHtcXHJcXG4gICAgICBmb3JPd24oIHRoaXMuX0MsIGNvbXBvbmVudCA9PicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xcclxcbiAgICAgICAgY29tcG9uZW50LmRlc3Ryb3kgJiYgY29tcG9uZW50LmRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95KCBjb21wbGV0ZWx5ICk7XFxyXFxuICAgICAgfSwgdHJ1ZSApO1xcclxcblxcJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JcXG4gICAgICBldmVudC5lbWl0KCBFVkVOVF9ERVNUUk9ZICk7XFxyXFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGV2ZW50LmRlc3Ryb3koKTtcXHJcXG4gICAgICBjb21wbGV0ZWx5ICYmIGVtcHR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyggdGhpcy5zcGxpZGVzICk7XFxyXFxuICAgICAgc3RhdGUuc2V0KCBERVNUUk9ZRUQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XFxyXFxuICAgIH1cXHJcXG5cXHJcXG4gICAgcmV0dXJuIHRoaXM7XFxyXFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKiBSZXR1cm5zIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcclxcbiAgICpcXHJcXG4gICAqIEByZXR1cm4gQW4gb2JqZWN0IHdpdGggdGhlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXRlc3Qgb3B0aW9ucy5cXHJcXG4gICAqL1xcclxcbiAgZ2V0IG9wdGlvbnMoKTonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE9wdGlvbnMge1xcclxcbiAgICByZXR1cm4gdGhpcy5fbztcXHJcXG4gIH1cXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXFxyXFxuICAvKipcXHJcXG4gICAqIE1lcmdlcyBvcHRpb25zIHRvIHRoZSBjdXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCBvcHRpb25zIGFuZCBlbWl0cyBgdXBkYXRlZGAgZXZlbnQuXFxyXFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICpcXHJcXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQW4gb2JqZWN0IHdpdGggbmV3IG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLlxcclxcbiAgICovXFxyXFxuICBzZXQgb3B0aW9ucyggb3B0aW9uczogJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09wdGlvbnMgKSB7XFxyXFxuICAgIHRoaXMuX0MuTWVkaWEuc2V0KCBvcHRpb25zLCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZSwgdHJ1ZSApO1xcclxcbiAgfVxcclxcblxcclxcbiAgLyoqXFxyXFxuICAgKicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNsaWRlcyB3aXRob3V0IGNsb25lcy5cXHJcXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgbnVtYmVyIG9mIHNsaWRlcy5cXCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyXFxuICAgKi9cXHJcXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcXHJcXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiB0aGlzLl9DLlNsaWRlcy5nZXRMZW5ndGgoIHRydWUgKTtcXHJcXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XFxyXFxuXFxyXFxuICAvKipcXHJcXG4gICAqIFJldHVybnMgdGhlIGFjdGl2ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUgaW5kZXguXFxyXFxuICAgKlxcclxcbiAgICogQHJldHVybiBUaGUgYWN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l2ZSBzbGlkZSBpbmRleC5cXHJcXG4gICAqL1xcclxcbiAgZ2V0IGluZGV4KCk6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIge1xcclxcbiAgICByZXR1cm4gdGhpcy5fQy5Db250cm9sbGVyLmdldEluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCgpO1xcclxcbiAgfVxcclxcbn1cXHJcXG4iXSwibmFtZXMiOlsiTUVESUFfUFJFRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFUlNfUkVEVUNFRF9NT1RJT04iLCJNT1ZJTkciLCJTQ1JPTExJTkciLCJTVEFURVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiQ1JFQVRFRCIsIk1PVU5URUQiLCJJRExFIiwiRFJBR0dJTkciLCJERVNUUk9ZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VEIiwiZW1wdHkiLCJhcnJheSIsImxlbmd0aCIsInNsaWNlIiwiYXJyYXlMaWtlIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsInN0YXJ0IiwiZW5kIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJjYWxsIiwiYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiZnVuYyIsImJpbmQiLCJhcmd1bWVudHMiLCJub29wIiwibmV4dFRpY2siLCJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0VGltZW91dCIsInJhZiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInR5cGVPZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJ0eXBlIiwic3ViamVjdCIsImlzT2JqZWN0IiwiaXNOdWxsIiwiaXNBcnJheSInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJpc0Z1bmN0aW9uIiwiaXNTdHJpbmciLCJpc1VuZGVmaW5lZCIsImlzSFRNTEVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50Iiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3Iiwid2luZG93IiwiSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUTUxFbGVtZW50IiwiZSIsInRvQXJyYXkiLCJ2YWx1ZSIsImZvckVhY2giLCJ2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzIiwiaXRlcmF0ZWUiLCJpbmNsdWRlcyIsImluZGV4T2YiLCJwdXNoIiwiaXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21zIiwidG9nZ2xlQ2xhc3MiLCJlbG0iLCJjbGFzc2VzIiwiYWRkIiwibmFtZSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFzc0xpc3QiLCJhZGRDbGFzcyIsInNwbGl0IiwiYXBwZW5kIiwicGFyZW50IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImNoaWxkcmVuIiwiYXBwZW5kQ2hpbGQiLCJiZWZvcmUiLCJub2RlcyIsInJlZiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJub2RlIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsIm1hdGNoZXMiLCJzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IiLCJmaWx0ZXIiLCJjaGlsZCIsImZpcnN0RWxlbWVudENoaWxkIiwib3cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbktleXMiLCJPYmplY3QiLCJrZXlzIiwiZm9yT3duIiwib2JqZWN0IiwicmlnaHQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywicmV2ZXJzZSIsImtleSIsImFzc2lnbiIsInNvdXJjZSIsIm1lcmdlIiwib21pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJyZW1vdmVBdHRyaWJ1dGUiLCJlbG1zIiwiYXR0cnMiLCJhdHRyIiwic2V0QXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZSIsIlN0cmluZyIsImNyZWF0ZSIsInRhZyIsImRvY3VtZW50IiwiY3JlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZUVsZW1lbnQiLCJzdHlsZSIsInByb3AiLCJnZXRDb21wdXRlZFN0eWxlIiwiZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3BsYXkiLCJmb2N1cyIsInByZXZlbnRTY3JvbGwiLCJnZXRBdHRyaWJ1dGUiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGFzQ2xhc3MiLCJjbGFzc05hbWUiLCJjb250YWlucyIsInJlY3QiLCJ0YXJnZXQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwicmVtb3ZlIiwicmVtb3ZlQ2hpbGQiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicicGFyc2VIdG1sIiwiaHRtbCIsIkRPTVBhcnNlciIsInBhcnNlRnJvbVN0cmluZyInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJib2R5IiwicHJldmVudCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VsdCIsInN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbiIsInF1ZXJ5IiwicXVlcnlTZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IiLCJxdWVyeUFsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJyZW1vdmVDbGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3MiLCJ0aW1lT2YiLCJ0aW1lU3RhbXAiLCJ1bml0IiwiUFJPSkVDVF9DT0RFIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEFfQVRUUklCVVRFIiwiYXNzZXJ0IiwiY29uZGl0aW9uIiwibWVzc2FnZSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFcnJvciIsIm1pbiIsIk1hdGgiLCJtYXgiLCJmbG9vciIsImNlaWwiLCJhYnMiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXBwcm94aW1hdGVseUVxdWFsIiwieCIsInkiLCJlcHNpbG9uIiwiYmV0d2VlbiIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJudW1iZXIiLCJleGNsdXNpdmUiLCJtaW5pbXVtIiwibWF4aW11bSIsImNsYW1wIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsInNpZ24iLCJmb3JtYXQiLCJzdHJpbmciLCJyZXBsYWNlbWVudHMiLCJyZXBsYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1lbnQiLCJyZXBsYWNlIiwicGFkIiwiaWRzIiwiRXZlbnRCaW5kZXIiLCJsaXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZXJzIiwiZm9yRWFjaEV2ZW50IiwidGFyZ2V0cyIsImV2ZW50cyIsImV2ZW50TicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTIiwiZnJhZ21lbnQiLCJjYWxsYmFjayIsIm9wdGlvbnMiLCJldmVudCIsIm5hbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3BhY2UiLCJpc0V2ZW50VGFyZ2V0IiwicmVtb3ZlciIsInJlbW92ZUV2ZW50TGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInVuYmluZCIsImxpc3RlbmVyIiwiZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc3BhdGNoIiwiZGV0YWlsIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiY3JlYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUV2ZW50IiwiaW5pdEN1c3RvbUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsImRlc3RyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ295IiwiZGF0YSIsIkVWRU5UX01PVU5URUQiLCJFVkVOVF9NT1ZFIiwiRVZFTlRfTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPVkVEIiwiRVZFTlRfQ0xJQ0siLCJFVkVOVF9BQ1RJVkUiLCJFVkVOVF9JTkFDVEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkUiLCJFVkVOVF9WSVNJQkxFIiwiRVZFTlRfSElEREVOIiwiRVZFTlRfUkVGUkVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0giLCJFVkVOVF9VUERBVEVEIiwiRVZFTlRfUkVTSVpFIiwiRVZFTlRfUkVTSVpFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJFVkVOVF9TQ1JPTEwiLCJFVkVOVF9TQ1JPTExFRCIsIkVWRU5UX0RFU1RST1knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEIiwiRVZFTlRfQVVUT1BMQVlfUExBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1kiLCJFVkVOVF9BVVRPUExBWV9QQVVTRSIsIkVWRU5UX0xBWllMT0FEX0xPQURFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJFVkVOVF9TTElERV9LRVlET1dOIiwiRVZFTlRfU0hJRlRFRCIsIkV2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZSIsIlNwbGlkZSIsImJ1cyIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiYmluZGVyIiwib24iLCJqb2luIiwib2ZmIiwiZW1pdCIsIlJlcXVlc3RJbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWwiLCJpbnRlcnZhbCIsIm9uSW50ZXJ2YWwiLCJvblVwZGF0ZSIsImxpbWl0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInN0YXJ0VGltZSIsImlkIiwibm93IiwiRGF0ZSIsInJhdGUiLCJwYXVzZWQiLCJjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQiLCJ1cGRhdGUiLCJwYXVzZSIsImNhbmNlbCIsImNhbmNlbEFuaW1hdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGcmFtZSIsInJlc3VtZSIsInJld2luZCIsInNldCIsInRpbWUiLCJpc1BhdXNlZCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCJTdGF0ZSIsImluaXRpYWxTdGF0ZSIsInN0YXRlIiwiaXMiLCJzdGF0ZXMiLCJBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JST1ciLCJBUlJPV19MRUZUIiwiQVJST1dfUklHSFQiLCJBUlJPV19VUCIsIkFSUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPV19ET1dOIiwiVFRCIiwiT1JJRU5UQVRJT05fTUFQIiwid2lkdGgiLCJsZWZ0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIlgiLCJZIiwiQXJyb3dMZWZ0IiwiQXJyb3dSaWdodCIsIlJPTEUiLCJUQUJfSU5EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VYIiwiQVJJQV9QUkVGSVgiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9DVVJSRU5UIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIkFSSUFfU0VMRUNURUQiLCJBUklBX0xBQkVMIiwiQVJJQV9MQUJFTExFREJZIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIkFSSUFfSElEREVOIiwiQVJJQV9PUklFTlRBVElPTiIsIkFSSUFfUk9MRURFU0NSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lQVElPTiIsIkFSSUFfTElWRSIsIkFSSUFfQlVTWSIsIkFSSUFfQVRPTUlDIiwiQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMTF9BVFRSSUJVVEVTIiwiQ0xBU1NfUFJFRklYIiwiQ0xBU1NfUk9PVCIsIkNMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19UUkFDSyIsIkNMQVNTX0xJU1QiLCJDTEFTU19TTElERSIsIkNMQVNTX0NMT05FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsIkNMQVNTX0NPTlRBSU5FUiIsIkNMQVNTX0FSUk9XUyIsIkNMQVNTX0FSUk9XIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIkNMQVNTX0FSUk9XX1BSRVYiLCJDTEFTU19BUlJPV19ORVhUIiwiQ0xBU1NfUEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0lOQVRJT04iLCJDTEFTU19QQUdJTkFUSU9OX1BBR0UiLCJDTEFTU19QUk9HUkVTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfQkFSIiwiQ0xBU1NfVE9HR0xFIiwiQ0xBU1NfU1IiLCJDTEFTU19BQ1RJVkUiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciU1RBVFVTX0NMQVNTX1BSRUZJWCIsIkNMQVNTX1BSRVYiLCJDTEFTU19ORVhUIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIkNMQVNTX1ZJU0lCTEUiLCJDTEFTU19MT0FESU5HIiwiQ0xBU1NfRk9DVVNfSU4iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiQ0xBU1NfT1ZFUkZMT1ciLCJTVEFUVVNfQ0xBU1NFUyIsIlBPSU5URVJfRE9XTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfRVZFTlRTIiwiUE9JTlRFUl9NT1ZFX0VWRU5UUyIsIlBPSU5URVJfVVBfRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyIsIlNMSURFIiwiTE9PUCIsIkZBREUiLCJTbGlkZSIsImluZGV4Iiwic2xpZGVJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgiLCJzbGlkZSIsImRlc3Ryb3llZCIsIkNvbXBvbmVudHMiLCJyb290IiwiaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTmF2aWdhdGlvbiIsInVwZGF0ZU9uTW92ZSIsImkxOG4iLCJwYWdpbmF0aW9uIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInNsaWRlRm9jdXMiLCJyZXNvbHZlIiwiRGlyZWN0aW9uIiwic3R5bGVzIiwibGFiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsIiwiaXNDbG9uZSIsImNvbnRhaW5lciIsImluaXROYXZpZ2F0aW9uIiwiY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb2xzIiwic3BsaWRlcyIsIm1hcCIsInNwbGlkZSIsIlNsaWRlcyIsImdldEF0IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInNsaWRlWCIsIm9uTW92ZSIsImN1cnIiLCJoaWRkZW4iLCJhY3RpdmUiLCJpc0FjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpdmUiLCJzZWxmIiwidmlzaWJsZSIsInRyYWNrUmVjdCIsIkVsZW1lbnRzIiwidCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYWNrIiwic2xpZGVSZWN0IiwiZm9jdXNhYmxlTm9kZXMiLCJhY3RpdmVFbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCIsImNsb25lU3RhdHVzIiwibW91bnQiLCJzbGlkZUxhYmVsIiwidXNlQ29udGFpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lciIsIl9zdHlsZSIsImlzV2l0aGluIiwiZnJvbSIsImRpc3RhbmNlIiwiZGlmZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSIsIlNDUk9MTF9MSVNURU5FUl9PUFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSU9OUyIsInBhc3NpdmUiLCJjYXB0dXJlIiwiTk9STUFMSVpBVElPTl9NQVAiLCJTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhY2ViYXIiLCJSaWdodCIsIkxlZnQiLCJVcCIsIkRvd24iLCJub3JtYWxpemVLZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IiwiS0VZQk9BUkRfRVZFTlQiLCJTUkNfREFUQV9BVFRSSUJVVEUiLCJTUkNTRVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0RBVEFfQVRUUklCVVRFIiwiSU1BR0VfU0VMRUNUT1IiLCJUUklHR0VSX0tFWVMiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiYnJlYWtwb2ludHMiLCJyZWR1Y2VkTW90aW9uIiwicXVlcmllcyIsImNvbXBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWx5IiwicmVnaXN0ZXIiLCJxdWVyeUxpc3QiLCJtYXRjaE1lZGlhIiwiZGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiIsIm1lcmdlZCIsInJlZHVjZSIsImVudHJ5IiwicmVmcmVzaCIsIm9wdHMiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywiYmFzZSIsIm5vdGlmeSIsImdldFByb3RvdHlwZU9mIiwic2V0dXAiLCJpc01pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJtZWRpYVF1ZXJ5Iiwic29ydCIsIm4iLCJtIiwiZW5hYmxlIiwiYXhpc09ubHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwibWF0Y2giLCJvZmZzZXQiLCJ0b0xvd2VyQ2FzZSIsImNoYXJBdCIsInRvVXBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyQ2FzZSIsIm9yaWVudCIsImxpc3QiLCJpc1VzaW5nS2V5IiwiZWxlbWVudHMiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicic2xpZGVzIiwicm9vdENsYXNzZXMiLCJ0cmFja0NsYXNzZXMiLCJmaW5kIiwiYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm93cyIsInByZXYiLCJuZXh0IiwiYmFyIiwidG9nZ2xlIiwicHJlZml4Iiwicm9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UiLCJ0YWdOYW1lIiwiY2Fyb3VzZWwiLCJjb25jYXQiLCJnZXRDbGFzc2VzIiwibCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmVsbGVkYnkiLCJjbG9zZXN0Iiwibm9kZVR5cGUiLCJwYXJlbnRFbGVtZW50IiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRyYWciLCJpbml0IiwiU2xpZGUxIiwiU2xpZGUyIiwiZ2V0IiwiZXhjbHVkZUNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZXMiLCJtYXRjaGVyIiwiZ2V0SW4iLCJwYWdlIiwiQ29udHJvbGxlciIsInRvSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4IiwiaGFzRm9jdXMiLCJwZXJQYWdlIiwiZm9yRWFjaEl0ZW0iLCJpbWFnZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiwiaW1nIiwicmVtb3ZlTm9kZSIsImdldExlbmd0aCIsImlzRW5vdWdoIiwidmVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RpY2FsIiwicm9vdFJlY3QiLCJvdmVyZmxvdyIsInN0eWxlU2xpZGVzIiwiY3NzUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGRpbmciLCJyZXNpemUiLCJmb3JjZSIsIm5ld1JlY3QiLCJoZWlnaHQiLCJjc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSGVpZ2h0IiwiZ2FwIiwiYXV0b1dpZHRoIiwiZml4ZWRXaWR0aCIsImNzc1NsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NpemUiLCJmaXhlZEhlaWdodCIsImF1dG9IZWlnaHQiLCJpc092ZXJmbG93IiwicCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGRpbmciLCJoZWlnaHRSYXRpbyIsImxpc3RTaXplIiwic2xpZGVTaXplIiwid2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhvdXRHYXAiLCJnZXRHYXAiLCJ0b3RhbFNpemUiLCJzbGlkZXJTaXplIiwicGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlRmxvYXQiLCJkdXJhdGlvbiIsImdldFBhZGRpbmciLCJjbG9uZUNvdW50IiwiYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lcyIsInJlbW91bnQiLCJvYnNlcnZlIiwiY29tcHV0ZUNsb25lQ291bnQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2VuZXJhdGUiLCJpc0hlYWQiLCJjbG9uZSIsImNsb25lTm9kZSIsIkxheW91dCIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJmaXhlZFNpemUiLCJUcmFuc2l0aW9uIiwicmVwb3NpdGlvbiIsImlzQnVzeSIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTY3JvbGwiLCJqdW1wIiwidHJhbnNsYXRlIiwidG9Qb3NpdGlvbiIsInBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiIsInByZXZlbnRMb29wIiwiZGVzdGluYXRpb24iLCJleGNlZWRlZE1heCIsImdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RFbmQiLCJzaGlmdCIsImJhY2t3YXJkcyIsImV4Y2VzcyIsImdldExpbWl0IiwicycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpemUiLCJnZXRQb3NpdGlvbiIsIm1pbkRpc3RhbmNlIiwiSW5maW5pdHkiLCJpIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInInRyaW1taW5nIiwidHJpbVNwYWNlIiwibW92ZSIsImRlc3QiLCJzaGlmdGVkIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4Y2VlZGVkTGltaXQiLCJleGNlZWRlZE1pbiIsImVuZEluZGV4Iiwic2xpZGVDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQiLCJwZXJNb3ZlIiwiTW92ZSIsIm9taXRFbmQiLCJpc0xvb3AiLCJpc1NsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSIsImdldE5leHQiLCJnZXRBZGphY2VudCIsImdldFByZXYiLCJjdXJySW5kZXgiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywicHJldkluZGV4Iiwib25SZXNpemVkIiwiY29tcHV0ZURlc3RJbmRleCIsImxvbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwIiwic25hcFBhZ2UiLCJ0b1BhZ2UiLCJzZXRJbmRleCIsIndhaXRGb3JUcmFuc2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiIsImdvIiwiY29udHJvbCIsImFsbG93U2FtZUluZGV4IiwiaW5kaWNhdG9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsIl9yZWYiLCJzY3JvbGwiLCJzbmFwIiwiZ2V0SW5kZXgiLCJ0b0Rlc3QiLCJjcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYXRlZCIsIndyYXBwZXJDbGFzc2VzIiwicGxhY2Vob2xkZXIiLCJ3cmFwcGVyIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImVuYWJsZWQiLCJjcmVhdGVBcnJvdyIsImFycm93IiwiYXJyb3dQYXRoIiwibmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbmRleCIsInByZXZMYWJlbCIsIm5leHRMYWJlbCIsImxhc3QiLCJmaXJzdCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaXNhYmxlZCIsImhvdmVyZWQiLCJmb2N1c2VkIiwiYXV0b3BsYXkiLCJzdG9wcGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCIsInBsYXkiLCJyZXNldFByb2dyZXNzIiwic3RvcCIsImF1dG9Ub2dnbGUiLCJwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1c2VPbkhvdmVyIiwicGF1c2VPbkZvY3VzIiwiY292ZXIiLCJzcmMiLCJmcmljdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24iLCJvblNjcm9sbGVkIiwibm9Db25zdHJhaW4iLCJub0Rpc3RhbmNlIiwiY2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWFyIiwib25FbmQiLCJ0byIsInQiLCJlYXNpbmdGdW5jIiwicG93IiwiYmFzZVBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbiIsImJhc2VFdmVudCIsInByZXZCYXNlRXZlbnQiLCJpc0ZyZWUiLCJkcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZ2dpbmciLCJjbGlja1ByZXZlbnRlZCIsIk1lZGlhIiwiZXhjZWVkZWQiLCJkaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWJsZSIsIm9uUG9pbnRlckRvd24iLCJpc1RvdWNoIiwibm9EcmFnIiwiaXNUb3VjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hFdmVudCIsImJ1dHRvbiIsIm9uUG9pbnRlck1vdmUiLCJvblBvaW50ZXJVcCIsIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzYXZlIiwidGhyZXNob2xkcyIsImlzT2JqIiwibW91c2UiLCJjYW5jZWxhYmxlIiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRpZmZDb29yZCIsImV4cGlyZWQiLCJkaWZmVGltZSIsImhhc0V4Y2VlZGVkIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RyYWdNaW5UaHJlc2hvbGQiLCJ0b3VjaCIsInZlbG9jaXR5IiwiZmxpY2tQb3dlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJmbGlja01heFBhZ2VzIiwicmV3aW5kQnlEcmFnIiwib25DbGljayIsIm9ydGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2dvbmFsIiwiY29vcmRPZiIsImdldEJhc2VFdmVudCIsImNoYW5nZWRUb3VjaGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsIlRvdWNoRXZlbnQiLCJpc0RyYWdnaW5nIiwia2V5Ym9hcmQiLCJvbktleWRvdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIiwiX2Rpc2FibGVkIiwiaXNTZXF1ZW50aWFsIiwibGF6eUxvYWQiLCJlbnRyaWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyIsInNyY3NldCIsInNwaW5uZXIiLCJsb2FkTmV4dCIsImNoZWNrIiwicHJlbG9hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RQYWdlcyIsImxvYWQiLCJvbkxvYWQiLCJwYWdpbmF0aW9uQ2xhc3NlcyIsImRpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciLCJnZXREaXJlY3Rpb24iLCJuZXh0UGFnZSIsIml0ZW0iLCJwYWdpbmF0aW9uRGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVjdGlvbiIsInNlbGVjdCIsImxpIiwiY2xhc3MiLCJ0ZXh0IiwicGFnZVgiLCJwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnaW5hdGlvbktleWJvYXJkIiwiaXNQYXJlbnQiLCJzeW5jIiwibGFzdFRpbWUiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicib25XaGVlbCIsInNsZWVwIiwiZGVsdGFZIiwid2hlZWxNaW5UaHJlc2hvbGQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd2hlZWxTbGVlcCIsInJlbGVhc2VXaGVlbCIsIndoZWVsIiwibGl2ZSIsInNyIiwiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F1dG9wbGF5IiwidGV4dENvbnRlbnQiLCJERUZBVUxUUyIsInNwZWVkIiwiZWFzaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyIsInJld2luZFNwZWVkIiwiRmFkZSIsImRvbmUiLCJlbmRDYWxsYmFjayIsInQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2l0aW9uIiwidXNlU2Nyb2xsIiwidGhpcyIsIl9vIiwiX0UiLCJfU3BsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsImRlZmF1bHRzIiwiSlNPTiIsInBhcnNlIiwiRXh0ZW5zaW9ucyIsIl90aGlzIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIl9DIiwiX1QiLCJDb21wb25lbnRDb25zdHJ1Y3RvcnMiLCJDb21wb25lbnQiLCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY29tcG9uZW50IiwiU3luYyIsIl90aGlzJGV2ZW50Il0sIm1hcHBpbmdzIjoiOzs7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzs7Ozt5Q0FLTyxJQUFNQSxFQUErQixtQ0NhL0JDLEVBQVMsRUFLVEMsR0FBWSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpQlpDLEVBQVMsQ0FDcEJDLFFBdENxQixFQXVDckJDLFFBbENxQixFQW1DckJDLEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTlCa0IsRUErQmxCTCxPQUFBQSxFQUNBQyxVQUFBQSxHQUNBSyxTQWxCc0IsRUFtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J0QkMsVUFkdUIsQ0FPSCxFQ25DZixTQUFTQyxFQUFPQyxHQUNyQkEsRUFBTUMsTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMsQ0FDakIsQ0NFZ0IsU0FBQUMsRUFBVUMsRUFBeUJDLEVBQWdCQyxHQUNqRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0FBT0MsTUFBTUMsVUFBVUwsTUFBTU0sS0FBTUwsRUFBV0MsRUFBT0MsQ0FBOUMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQ1QsQ0NhTyxTQUFTSSxFQUFPQyxHQUVyQixPQUFPQSxFQUFLQyxLQUFMRixNQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUMsRUFBVyxDQUFBLE1BQVNSLE9BQUFBLEVBQU9VLFVBQVcsQ0FBWCxFQUFsQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDRixDQ3hCb0IsU0FBUEMsTUNLTixJQUFNQyxFQUF1RUMsV0NMN0UsU0FBU0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUtOLEdBQ25CLE9BQU9PLHNCQUF1QlAsRUFDaEMsQ0NPQSxTQUFTUSxFQUFRQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBY0MsR0FDN0IsT0FBTyxPQUFPQSxJQUFZRCxDQUM1QixDQVNPLFNBQVNFLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFVRCxHQUN4QixNQUFPLENBQUVFLEVBQVFGLENBQUEsR0FBYUYsRUFBUSxTQUFVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UsQ0FBbEIsQ0FDaEMsQ0FTTyxJQUFNRyxFQUFxRGpCLE1BQU1pQixRQVMzREMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQTZEZixFQUFPUyxFQUFRLFVBQVIsRUFTcEVPLEVBQXNEaEIsRUFBT1MsRUFBUSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUUFBUixFQVM3RFEsR0FBNERqQixFQUFPUyxFQUFRLFdBQVIsRUFTekUsU0FBU0ksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVFGLEdBQ3RCLE9BQW1CLE9BQVpBLENBQ1QsQ0FVTyxTQUFTTyxFQUFlUCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDekIsSUFDRixPQUFPQSxhQUF1QkEsRUFBa0JRLGNBQWNDLGFBQWVDLFFBQVNDLFcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUd4RixPQUZVQyxHQUNELE1BQUEsQ0FBQSxDQUNULENBQ0YsQ0M5RU8sU0FBU0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVlDLEdBQzFCLE9BQU9YLEVBQVNXLENBQUEsRUFBVUEsRUFBUSxDQUFFQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDdEMsQ0NIZ0IsU0FBQUMsRUFBWUMsRUFBaUJDLEdBQ2xDSixFQUFBRyxDQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTRCxRQUFTRSxDQUFsQixDQUNYLENDRmdCLFNBQUFDLEVBQWF0QyxFQUFZa0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ2hDLE1BQXlCLENBQUEsRUFBekJsQyxFQUFNdUMsUUFBU0wsQ0FBZixDQUNULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQ0FnQixTQUFBTSxFQUFTeEMsRUFBWXlDLEdBRTVCLE9BRFB6QyxFQUFNd0MsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU54QyxNQUFBQSxFQUFlaUMsRUFBU1EsQ0FBQSxDQUF4QixFQUNPekMsQ0FDVCxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NKZ0IsU0FBQTBDLEVBQWFDLEVBQWNDLEVBQTRCQyxHQUNoRUYsR0FDSFIsRUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLEVBQVMsU0FBUUUsR0FDbkJBLEdBQ0hILEVBQUlJLFVBQVdGLEVBQU0sTUFBUSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVUFBWUMsQ0FBekMsQ0FFRixDQUpGLENBTUosQ0NSZ0IsU0FBQUUsRUFBVUwsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NDLEdBQ3pCRixFQUFBQyxFQUFLbEIsRUFBVW1CLEdBQVlBLEVBQVFLLE1BQU8sRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWYsRUFBdUJMLEVBQVMsQ0FBQSxDQUEzRCxDQUNmLENDSGdCLFNBQUFNLEVBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxFQUFpQkMsR0FDdkNqQixFQUFTaUIsRUFBVUQsRUFBT0UsWUFBWTFDLEtBQU13JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsQ0FBekIsQ0FBbkIsQ0FDRixDQ0ZnQixTQUFBRyxFQUFRQyxFQUFzQkMsR0FDNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDckIsRUFBU29CLEVBQU8sU0FBUUUsR0FDaEIsSUFBQU4sR0FBV0ssR0FBT0MsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU9DLFdBRTFCUCxHQUNJQSxFQUFBUSxhQUFjRixFQUFNRCxDQUFwQixDQUVULENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05GLENBT0YsQ0NOZ0IsU0FBQUksR0FBU2pCLEVBQTRCa0IsR0FDNUMsT0FBQWxDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFlZ0IsQ0FBZixJQUEwQkEsRUFBQSxtQkFBOEJBLEVBQUlpQixTQUFVcEQsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU1tQyxFQUFLa0IsQ0FBdkQsQ0FDbkMsQ0NEZ0IsU0FBQVQsRUFBaUNELEVBQXFCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1UsR0FDOURULEVBQVdELEVBQVNqRCxFQUFPaUQsRUFBT0MsUUFBZCxFQUFrQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDckQsT0FBQVMsRUFBV1QsRUFBU1UsT0FBUSxTQUFBQyxHQUFBLE9BQVNILEdBQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQUFPRixFQUF6QixDQUFqQlQsRUFBeURBLENBQzdFLENDSmdCLFNBQUFXLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E4QlosRUFBcUJVLEdBQ2pFLE9BQU9BLEVBQVdULEVBQWFELEVBQVFVLENBQVIsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQW9CLEdBQU1WLEVBQU9hLGlCQUNsRSxDQ1ZPLElBQU1DLEVBQVVDLE9BQU9DLEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ1NkLFNBQUFDLEVBQ2RDLEVBQ0FoQyxFQUNBaUMsR0FFS0QsSUFDREMsRUFBUUwsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVNJLENBQUEsRUFBU0UsUUFBbEIsRUFBOEJOLEVBQVNJLENBQUEsR0FBV2xDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRQUFTLFNBQU9xQyxHQUNsRSxjQUFSQSxHQUF1Qm5DLEVBQVVnQyxFQUFRRyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0EsQ0FBekIsQ0FDdkIsQ0FGQSxDQU1OLENDa0JPLFNBQVNDLEdBQTBCSixHQVFqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsT0FOUG5FLEVBQU9VLFVBQVcsQ0FBbEIsRUFBc0J1QixRQUFTLFNBQVV1QyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDL0JOLEVBQUFNLEVBQVEsU0FBRXhDLEVBQU9zQyxHQUN2QkgsRUFBUUcsR0FBUUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFGLEVBQ3hCLENBRk0sQ0FHUixDQUpGLEVBTU9ILENBQ1QsQ0NDTyxTQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00sRUFBeUJOLEdBY2hDLE9BWlBuRSxFQUFPVSxVQUFXLENBQWxCLEVBQXNCdUIsUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMsU0FBVXVDLEdBQy9CTixFQUFBTSxFQUFRLFNBQUV4QyxFQUFPc0MsR0FDbEInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInakQsRUFBU1csQ0FBVCxFQUNLbUMsRUFBQUcsR0FBUXRDLEVBQU1oQyxNQUFkLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NFbUIsR0FBVWEsQ0FBQSxFQUNwQm1DLEVBQVFHLEdBQVFHLEVBQU8sR0FBSXRELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFVZ0QsRUFBUUcsRUFBUixFQUFrQkgsRUFBUUcsR0FBUSxHQUFJdEMsQ0FBM0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBRWhCbUMsRUFBUUcsR0FBUXRDLENBRWxCLENBUk0sQ0FTUixDQVZGLEVBWU9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsQ0FDVCxDQ3pEZ0IsU0FBQU8sR0FBTVAsRUFBZ0JGLEdBQ3BDaEMsRUFBU2dDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFRRixFQUFTSSxDQUFULEVBQW1CLFNBQU9HLEdBQ3pDLE9BQU9ILEVBQVFHLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNmLENBRkYsQ0FHRixDQ0xnQixTQUFBSyxFQUFpQkMsRUFBMkJDLEdBQzFENUMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVMyQyxFQUFNLFNBQU9uQyxHQUNwQlIsRUFBUzRDLEVBQU8sU0FBUUMsR0FDZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyQyxHQUFBQSxFQUFJa0MsZ0JBQWlCRyxDQUFyQixDQUNQLENBRkYsQ0FHQSxDQUonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRixDQUtGLENDRWdCLFNBQUFDLEVBQ2RILEVBQ0FDLEVBQ0E3QyxHQUVLYixHQUFVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzBELENBQVYsRUFDS1gsRUFBQVcsRUFBTyxTQUFFN0MsRUFBT1ksR0FDUm1DLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSCxFQUFNaEMsRUFBTVosQ0FBWixDQUNkLENBRk0sRUFJUkMsRUFBUzJDLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQU9uQyxHQUNwQnJCLEVBQVFZLENBQVIsR0FBNkIsS0FBVkEsRUFBZTJDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FpQmxDLEVBQUtvQyxDQUFMLEVBQWVwQyxFQUFJc0MsYUFBY0YsRUFBT0csT0FBUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoRCxDQUFSLENBQXpCLENBQ2xFLENBRkYsQ0FJSixDQ05nQixTQUFBaUQsRUFDZEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQ0FMLEVBQ0E1QixHQUVNUixFQUFNMEMsU0FBU0MsY0FBZUYsQ0FBeEIsRUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0wsT0FORkwsSUFDT3RELEVBQUFzRCxDQUFBLEVBQVUvQixFQUF5QmlDLEdBQWZ0QycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBS29DLENBQUwsRUFHdEI1QixHQUFBRCxFQUFRQyxFQUFRUixDQUFoQixFQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSEEsQ0FDVCxDQ1pnQixTQUFBNEMsRUFDZDVDLEVBQ0E2QyxFQUNBdEQsR0FFSyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQVIsR0FBYVEsQ0FBYixFQUNJLE9BQUF1RCxpQkFBa0I5QyxDQUFsQixFQUF5QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2QyxHQUczQmxFLEVBQVFZLENBQUEsSUFDVFMsRUFBQTRDLE1BQU9DLE1BQWF0RCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFFNUIsQ0M5QmdCLFNBQUF3RCxHQUFTL0MsRUFBa0IrQyxHQUNsQ0gsRUFBQTVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFLLFVBQVcrQyxDQUFoQixDQUNULENDTk8sU0FBU0MsR0FBT2hELEdBQ2hCQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQSxXQUFpQkEsWUFBakIsR0FBeUNBLEVBQUlnRCxNQUFPLENBQUVDLGNBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsQ0FBakIsQ0FBWCxDQUNoRCxDQ0RnQixTQUFBQyxFQUFjbEQsRUFBY3FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNuQyxPQUFBckMsRUFBSWtELGFBQWNiLENBQWxCLENBQ1QsQ0NBZ0IsU0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjLEdBQVVuRCxFQUFjb0QsR0FDdEMsT0FBT3BELEdBQU9BLEVBQUlJLFVBQVVpRCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBVUQsQ0FBeEIsQ0FDaEIsQ0NMTyxTQUFTRSxFQUFNQyxHQUNwQixPQUFPQSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT0Msc0JBQWQsQ0FDRixDQ0NPLFNBQVNDLEVBQVE3QyxHQUN0QnBCLEVBQVNvQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBTyxTQUFRRSxHQUNqQkEsR0FBUUEsRUFBS0MsWUFDWEQsRUFBQUMsV0FBVzInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxZQUFhNUMsQ0FBeEIsQ0FFUCxDQUpGLENBS0YsQ0NKTyxTQUFTNkMsR0FBa0NDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUN6QyxPQUFBeEMsSUFBVSxJQUFJeUMsV0FBWUMsZ0JBQWlCRixFQUFNLFdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2QyxFQUFxREcsSUFBL0QsQ0FDVCxDQ05nQixTQUFBQyxFQUFTM0UsRUFBVTRFLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNqQzVFLEVBQUU2RSxlQUFGLEVBRUtELElBQ0g1RSxFQUFFNEUsZ0JBQUYsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E1RSxFQUFFOEUseUJBQUYsRUFFSixDQ0xnQixTQUFBQyxHQUFvQzVELEVBQTRCVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDdkUsT0FBQVYsR0FBVUEsRUFBTzZELGNBQWVuRCxDQUF0QixDQUNuQixDQ0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ0IsU0FBQW9ELEdBQXVDOUQsRUFBNEJVLEdBQ2pGLE9BQU9BLEVBQVczRCxFQUFVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lELEVBQU8rRCxpQkFBa0JyRCxDQUF6QixDQUFBLEVBQXdDLEVBQ3RFLENDSmdCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFBc0QsRUFBYXhFLEVBQWNDLEdBQzVCRixFQUFBQyxFQUFLQyxFQUFTLENBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQWQsQ0FDZixDQ05PLFNBQVN3RSxHQUFRcEYsR0FDdEIsT0FBT0EsRUFBRXFGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUNYLENDSU8sU0FBU0MsRUFBTXBGLEdBQ3BCLE9BQU9ULEVBQVVTLEdBQVVBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRQSxFQUFZQSxFQUFaLEtBQXlCLEVBQzlELENDUk8sSUFBTXFGLEdBQWUsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT2ZDLFVBQTBCRCxHQ0h2QixTQUFBRSxHQUFRQyxFQUFnQkMsR0FDdEMsR0FBSyxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBRUQsRUFDTCxNQUFNLElBQUlFLE1BQVlMLElBQUFBLFNBQW1CSSxHQUFXLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwRCxDQUVKLENDYk8sSUFBUUUsRUFBK0JDLEtBQS9CRCxJQUFLRSxHQUEwQkQsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTFCQyxJQUFLQyxHQUFxQkYsS0FBckJFLE1BQU9DLEdBQWNILEtBQWRHLEtBQU1DJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRSixLQUFSSSxJQ1l0QixTQUFBQyxHQUFvQkMsRUFBV0MsRUFBV0MsR0FDaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidELE9BQUFKLEVBQUtFLEVBQUlDLENBQVQsRUFBZUMsQ0FDeEIsQ0NITyxTQUFTQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBU0MsRUFBZ0JKLEVBQVdDLEVBQVdJLEdBQ3ZELElBQUFDLEVBQVViLEVBQUtPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFHQyxDQUFILEVBQ2ZNLEVBQVVaLEdBQUtLLEVBQUdDLENBQUgsRUFDckIsTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU9JLEVBQ0hDLEVBQVVGLEdBQVVBLEVBQVNHLEVBQzdCRCxHQUFXRixHQUFVQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBVUcsQ0FDckMsQ0NMZ0IsU0FBQUMsRUFBT0osRUFBZ0JKLEVBQVdDLEdBQzFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFBSyxFQUFVYixFQUFLTyxFQUFHQyxDQUFILEVBQ2ZNLEVBQVVaLEdBQUtLLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFHQyxDQUFILEVBQ3JCLE9BQU9SLEVBQUtFLEdBQUtXLEVBQVNGLENBQWQsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXdCRyxDQUF4QixDQUNkLENDVE8sU0FBU0UsR0FBTVQsR0FDcEIsT0FBYyxFQUFKJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsSUFBYUEsRUFBSSxFQUM3QixDQ0VnQixTQUFBVSxHQUFRQyxFQUFnQkMsR0FLLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BSlA3RyxFQUFTNkcsRUFBYyxTQUFlQyxHQUNwQ0YsRUFBU0EsRUFBT0csUUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVMsS0FBaEIsR0FBMEJELENBQTFCLENBQ1QsQ0FGRixFQUlPRixDQUNULENDVk8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVNJLEdBQUtYLEdBQ25CLE9BQU9BLEVBQVMsR0FBVUEsSUFBQUEsS0FBZ0JBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUM1QyxDQ0RBLElBQU1ZLEdBQThCLEdDdUI3QixTQUFTQyxLQUtkLElBQUlDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFvRixHQXVGL0UsU0FBQUMsRUFDUEMsRUFDQUMsRUFDQXBILEdBRUFGLEVBQVNxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0gsRUFBUyxTQUFVdEQsR0FDaEJBLEdBQUEvRCxFQUFTc0gsRUFBUSxTQUFBQSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDekJBLEVBQU94RyxNQUFPLEdBQWR3RyxFQUFvQnRILFFBQVMsU0FBV3VILEdBQ2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0MsRUFBV0QsRUFBUXpHLE1BQU8sR0FBZixFQUNqQlosRUFBVTZELEVBQVF5RCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVSxHQUFLQSxFQUFVLEVBQTNDLENBQ0EsQ0FIRkYsQ0FJQSxDQUxRLENBTVYsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUEYsQ0FRRixDQVVPLE1BQUEsQ0FDTDlJLEtBaEdGLFNBQ0U2SSxFQUNBQyxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUcsRUFDQUMsR0FFQU4sRUFBY0MsRUFBU0MsRUFBUSxTQUFFdkQsRUFBUTRELEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FPQyxHQUM5QyxJQUFNQyxFQUFnQixxQkFBc0I5RCxFQUN0QytELEVBQVVELEVBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidaOUQsRUFBT2dFLG9CQUFvQnZKLEtBQU11RixFQUFRNEQsRUFBT0YsRUFBVUMsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTFELEVBQ0EzRCxFQUFBLGVBQTJCdkYsS0FBTXVGLEVBQVEwRCxDQUF6QyxFQUVZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ksRUFBQTlELEVBQU9pRSxpQkFBa0JMLEVBQU9GLEVBQVVDLENBQTFDLEVBQXNEMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidELEVBQUEsWUFBeUIwRCxDQUF6QixFQUN0RU4sRUFBVTlHLEtBQU0sQ0FBRTBELEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRNEQsRUFBT0MsRUFBV0gsRUFBVUssRUFBdEQsQ0FDQSxDQVJGLENBU0YsRUFrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZFRyxPQXpFTyxTQUFRWixFQUF1QkMsRUFBMkJHLEdBQ2pFTCxFQUFjQyxFQUFTQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUSxTQUFFdkQsRUFBUTRELEVBQU9DLEdBQ2xDVCxFQUFBQSxFQUFVeEYsT0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVEsU0FBWXVHLEdBQ3hDLE1BQUtBLENBQUFBLEVBQUFBLEVBQVUsS0FBUW5FLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NsQm1FLEVBQVUsS0FBUVAsR0FDbEJPLEVBQVUsS0FBUU4sR0FDZEgsR0FBWVMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVUsS0FBUVQsS0FFckNTLEVBQVUsR0FBVixFQUNPLENBQUEsRUFJVCxDQVhVLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVlaLENBYkYsQ0FjRixFQTJERUMsU0FoRE8sU0FBYXBFLEVBQXFCL0UsRUFBY29KJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNuRCxJQUFBdkksRUFXRyxNQVJxQixZQUF2QixPQUFPd0ksWUFDVnhJLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJLElBQUl3SSxZQUFhckosRUFBTSxDQUFFc0osUUFIZixDQUFBLEVBR3dCRixPQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsQ0FBWCxDQUF2QixHQUVBdkksRUFBQXFELFNBQVNxRixZQUFhLGFBQXRCLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NGQyxnQkFBaUJ4SixFQU5MLENBQUEsRUFNb0IsQ0FBQSxFQUFPb0osQ0FBekMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBR0ZyRSxFQUFPMEUsY0FBZTVJLENBQXRCLEVBQ09BLENBQ1QsRUFvQ0U2SSxRQVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRixXQUNFdkIsRUFBVW5ILFFBQVMsU0FBUTJJLEdBQUVBLEVBQU0sR0FBTixDQUFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUEzQyxFQUNBL0ssRUFBT3VKLENBQVAsQ0FDRixDQUVPLENBTVQsQ0N4Sk8sSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU15QixFQUEyQixVQUUzQkMsRUFBMkIsT0FDM0JDLEdBQTJCLFFBQzNCQyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMkIsUUFDM0JDLEdBQTJCLFNBQzNCQyxHQUEyQixXQUMzQkMsR0FBMkIsVUFDM0JDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUEyQixTQUMzQkMsRUFBMkIsVUFDM0JDLEVBQTJCLFVBQzNCQyxHQUEyQixTQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDM0JDLEdBQTJCLFVBSTNCQyxHQUEyQixTQUMzQkMsRUFBMkIsV0FFM0JDLEVBQTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixVQUszQkMsR0FBMkIscUJBQzNCQyxHQUEyQixnQkFFM0JDLEdBQTJCLGlCQUMzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JDLEdBQTJCLGtCQUczQkMsR0FBMEIsS0FDMUJDLEdBQTBCLEtDQ2hDLFNBQVNDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFnQkMsR0FLOUIsSUFBTUMsRUFBTUQsRUFBU0EsRUFBT3ZDLE1BQU13QyxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTWpILFNBQVNrSCx1QkFBakQsRUFLTUMsRUFBU25ELEdBQWYsRUE2QkEsT0FKS2dEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNIQSxFQUFPdkMsTUFBTTJDLEdBQUlaLEVBQWVXLEVBQU8zQixPQUF2Q3dCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUdLNUgsR0FBUStILEVBQVEsQ0FDckJGLElBQUFBLEVBQ0FHLEdBdkJPLFNBQUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEQsRUFBMkJHLEdBQy9CNEMsRUFBQTdMLEtBQU0yTCxFQUFLckssRUFBU3dILENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBQVNpRCxLQUFNLEdBQXhCLEVBQStCLFNBQUsxSyxHQUMzQzRILEVBQUFuSicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBT21KLEVBQVVySSxFQUFTUyxFQUFFdUksTUFBRixFQUFhdkksRUFBRXVJLE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTLEVBQWxELENBQ1QsQ0FGSyxDQUdULEVBb0JFb0MsSUFBS2xNLEVBQU8rTCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT3BDLE9BQVFrQyxDQUF0QixFQUNMTSxLQWJGLFNBQWU5QyxHQUViMEMsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsQyxTQUFVZ0MsRUFBS3hDLEVBQU81SixFQUFPVSxVQUFXLENBQVgsQ0FBcEMsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0YsQ0FNdUIsRUFNekIsQ0NuRE8sU0FBU2lNLEdBQ2RDLEVBQ0FDLEVBQ0FDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQyxHQUVNLElBS0ZDLEVBVUFDLEVBZklDLEVBQVFDLEtBQVJELElBVUpFLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPLEVBVVBDLEVBQVMsQ0FBQSxFQUtUQyxFQUFRLEVBS1osU0FBU0MsSUFDUCxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSyxDQUFFRixFQUFTLENBSWQsR0FIQUQsRUFBT1IsRUFBV2pGLEdBQU91RixFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsRUFBQUEsR0FBY0osRUFBVSxDQUFoQyxFQUFzQyxFQUMvREUsR0FBWUEsRUFBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNLEdBRVQsR0FBUkEsSUFDUVAsRUFBQSxFQUNYRyxFQUFZRSxFQUFaLEVBRUtILEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTLEVBQUVPLEdBQVNQLEdBQ3ZCLE9BQU9TLEVBQVAsRUFJSlAsRUFBS25NLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FLeU0sRUFDWixDQUNGLENBaUJBLFNBQVNDLElBQ0VILEVBQUEsQ0FBQSxDQUNYLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQWlCQSxTQUFTSSxJQUNQUixHQUFNUyxxQkFBc0JULEdBR25CSSxFQUFBLEVBREEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSixFQURBRyxFQUFBLEVBR1gsQ0FvQk8sTUFBQSxDQUNMbE4sTUF2REYsU0FBZ0J5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ04sR0FDZEEsR0FBVUYsRUFBVixFQUNBVCxFQUFZRSxFQUFJLEdBQU1TLEVBQVNQLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPUixFQUFXLEdBQ3JDUyxFQUFBLENBQUEsRUFDWkosRUFBWW5NLEVBQUt5TSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDbkIsRUFtREVLLE9BdkNGLFdBQ0VaLEVBQVlFLEVBQVosRUFDWUUsRUFBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FFUE4sR0FDSEEsRUFBVU0sQ0FBVixDQUVKLEVBaUNFSSxNQUFBQSxFQUNBQyxPQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFDQUksSUFsQkYsU0FBY0MsR0FDRGxCLEVBQUFrQixDQUNiLEVBaUJFQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FWRixXQUNTLE9BQUFWLENBQ1QsQ0FFTyxDQVFULENDbElPLFNBQVNXLEVBQU9DJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUlyQixJQUFJQyxFQUFRRCxFQXNCTCxNQUFBLENBQUVKLElBZlQsU0FBYzdMLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUNKa00sRUFBQWxNLENBQ1YsRUFhY21NLEdBSmQsU0FBYUMsR0FDWCxPQUFPaE0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVVMLEVBQVNxTSxDQUFULEVBQW1CRixDQUFuQixDQUNuQixDQUVPLENBQ1QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NDN0NBLElBQU1HLEVBQVEsUUFDREMsR0FBa0JELEVBQXhCLE9BQ01FLEdBQWtCRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBeEIsUUFDTUcsRUFBa0JILEVBQXhCLEtBQ01JLEVBQWtCSixFQUF4QixPQ1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTUssR0FBTSxNQ1FOQyxFQUFrQixDQUM3QkMsTUFBWSxDQUFFLFVBQ2RDLEtBQVksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQUUsTUFBTyxTQUNyQnpLLE1BQVksQ0FBRSxTQUFVLFFBQ3hCOEQsRUFBWSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRSxLQUNkNEcsRUFBWSxDQUFFLEtBQ2RDLEVBQVksQ0FBRSxLQUNkQyxVQUFZLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFFUixFQUFVRCxJQUN4QlUsV0FBWSxDQUFFUixFQUFZSCxHQVJHLEVDckJ4QixJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTVksRUFBWSxPQUNaQyxFQUFZLFdBR1pDLEVBQXVCLFFBQ3ZCQyxHQUEyQkQsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWpDLFdBQ01FLEdBQTJCRixFQUFqQyxVQUNNRyxHQUEyQkgsRUFBakMsV0FDTUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQTJCSixFQUFqQyxRQUNNSyxHQUEyQkwsRUFBakMsYUFDTU0sR0FBMkJOLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FqQyxTQUNNTyxHQUEyQlAsRUFBakMsY0FDTVEsR0FBMkJSLEVBQWpDLGtCQUNNUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBMkJULEVBQWpDLE9BQ01VLEdBQTJCVixFQUFqQyxPQUNNVyxHQUEyQlgsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWpDLFNBU01ZLEdBQWlCLENBQzVCZCxFQUNBQyxFQXhCdUIsV0EwQnZCRSxHQUNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsR0FDQUUsR0FDQUMsR0FDQUMsR0FDQUMsR0FDQUMsSUMzQklLLEVBQW1CNUksRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQXpCLEtBWWE2SSxHQUF3QjdJLEdBQ3hCOEksR0FBNEJGLEVBQWxDLFFBQ01HLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUE0QkgsRUFBbEMsT0FDTUksR0FBNEJKLEVBQWxDLFFBQ01LLEdBQTRCRCxHQUFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsVUFDTUUsR0FBNEJGLEdBQWxDLGNBQ01HLEdBQTRCUCxFQUFsQyxTQUNNUSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBNEJSLEVBQWxDLFFBQ01TLEdBQTRCRCxHQUFsQyxTQUNNRSxHQUE0QkYsR0FBbEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQ01HLEdBQTRCWCxFQUFsQyxhQUNNWSxHQUE0QkQsR0FBbEMsU0FFTUUsR0FEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzRCYixFQUFsQyxXQUNBLFFBQ01jLEdBQTRCZCxFQUFsQyxTQUlNZSxHQUE0QmYsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWxDLEtBRU1nQixHQUE0QkMsWUFDNUJDLEdBQTRCRCxVQUM1QkUsR0FBNEJGLFUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUM1QkcsR0FBNEJILGFBQzVCSSxHQUE0QkosYUFDNUJLLEdBQTRCTCxjQUM1Qk0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQTRCTixjQU81Qk8sR0FBaUIsQ0FDNUJSLEdBQ0FJLEdBQ0FGLEdBQ0FDLEdBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRSxHQUNBQyxHQUNBQyxJQ3RESyxJQWNNRSxHQUFzQix1QkFPdEJDLEdBQXNCLHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkFRdEJDLEdBQW9CLHFDQzdCMUIsSUFBTUMsR0FBUSxRQU9SQyxHQUFPLE9BT1BDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFPLE9DbUViLFNBQVNDLEdBQU83RixFQUFnQjhGLEVBQWVDLEVBQW9CQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDbEUsSUFhRkMsRUFiRXhJLEVBQVFzQyxFQUFnQkMsR0FDdEJJLEVBQW1CM0MsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQW5CMkMsR0FBSUcsRUFBZTlDLEVBQWY4QyxLQUFNak0sRUFBU21KLEVBQVRuSixLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVjRSLEVBQThCbEcsRUFBOUJrRyxXQUFZQyxFQUFrQm5HLEVBQWxCbUcsS0FBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczSSxFQUFZd0MsRUFBWnhDLFFBQ2xCNEksRUFBNkQ1SSxFQUE3RDRJLGFBQWNDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUErQzdJLEVBQS9DNkksYUFBY0MsRUFBaUM5SSxFQUFqQzhJLEtBQU1DLEVBQTJCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9JLEVBQTNCK0ksV0FBWUMsRUFBZWhKLEVBQWZnSixXQUM5Q0MsRUFBWVAsRUFBVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRLFVBQXZCRCxRQUNGRSxFQUFZbk4sRUFBY3dNLEVBQU8sT0FBUCxFQUMxQlksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVlwTixFQUFjd00sRUFBTzNDLEVBQVAsRUFDMUJ3RCxFQUF5QixDQUFBLEVBQWJkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNaZSxFQUFZcFAsR0FBT3NPLEVBQVAsSUFBbUI1QixFQUFuQixFQWtEbEIsUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVMyQyxJQUNQLElBQU1DLEVBQVdoSCxFQUFPaUgsUUFBUUMsSUFBSyxTQUFVck4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQ3ZDZ00sRUFBUWhNLEVBQU9zTixPQUFPakIsV0FBV2tCLE9BQU9DLE1BQU92JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsQ0FBdkMsRUFDUEQsT0FBQUEsRUFBUUEsRUFBTUcsTUFBTWxGLEdBQUssRUFDaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLENBSGVkLEVBR2JLLEtBQU0sR0FIT0wsRUFLSHBILEVBQUFvTixFQUFPM0MsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVk1RyxHQUFRNkosRUFBS2dCLFFBQVVULEVBQVVkLEVBQWFELEdBQVUsQ0FBaEQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQTNCLEVBQ0FsTixFQUFBb04sRUFBTzlDLEdBQWU4RCxDQUF0QixFQUNkcE8sRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWNvTixFQUFPakQsRUFBTXlELEVBQWEsU0FBVyxFQUFuRCxFQUNjQSxHQUFBaE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWlCd04sRUFBT3ZDLEVBQXhCLENBQ2hCLENBS0EsU0FBUzhELElBQ0F0QixHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRTdFLEVBQUEsQ0FFWCxDQUtBLFNBQVNBLElBQ1AsSUFDaUJvRyxFQTZCWEMsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaEJBQyxFQWRDekIsSUFDVXVCLEVBQVN4SCxFQUFoQjhGLE9BYUo0QixFQUFTQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZixLQUVnQmxPLEdBQVV1TSxFQUFPbEIsRUFBakIsSUFDRHpPLEVBQUEyUCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT2xCLEdBQWM0QyxDQUFyQixFQUNiOU8sRUFBY29OLEVBQU83QyxHQUFjaUQsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWdCc0IsR0FBVSxFQUE3RCxFQUNNbkgsRUFBQW1ILEVBQVM1SSxHQUFlQyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ0I2SSxDQUF4QyxHQVVGQyxFQWdEUixXQUNPN0gsR0FBQUEsRUFBT2dDLEdBQUk0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsRUFBWDVGLEVBQ0gsT0FBTzJILEVBQVAsRUFHRixJQUFNRyxFQUFZbE8sRUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTSxFQUFXNkIsU0FBU0MsS0FBMUIsRUFDWkMsRUFBWXJPLEVBQU1vTSxHQUNsQnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCxFQUFZK0QsRUFBUyxPQUFRLENBQUEsQ0FBUixFQUNyQnhPLEVBQVl3TyxFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxRQUFTLENBQUEsQ0FBVCxFQUUzQixPQUFPOUssR0FBT21NLEVBQVdwRixFQUFYLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUF1QjlHLEdBQU1xTSxFQUFXdkYsS0FDakQvRyxHQUFPc00sRUFBV2hRLEVBQWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixHQUErQjJELEdBQU1rTSxFQUFXN1AsRUFBakIsQ0FDdEMsRUE1REUsRUFDTXdQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFTLENBQUVJLElBQWEsQ0FBRUYsS0FBY2QsR0FFdkM3RyxFQUFPK0IsTUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLEdBQUksQ0FBRTlPLEVBQVFDLEdBQTNCNk0sR0FDU3BILEVBQUFvTixFQUFPekMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQWFrRSxHQUFVLEVBQTlCLEVBR0Y3TyxFQUFBZ0MsR0FBVW9MLEVBQU94SSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUTBLLGdCQUFrQixFQUEzQyxFQUFpRGxGLEVBQVd5RSxFQUFTLENBQUEsRUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBMUUsRUFFVGpCLEdBQ0g1TixFQUFjb04sRUFBT2hELEVBQVd5RSxFQUFTLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLEVBQUssQ0FBOUMsRUFHR0ksSUFBWXBPLEdBQVV1TSxFQUFPZCxFQUFqQixJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDRjdPLEVBQUEyUCxFQUFPZCxHQUFlMkMsQ0FBdEIsRUFDUHRILEVBQUFzSCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVTdJLEdBQWdCQyxHQUFjMkksQ0FBeEMsR0FHREMsR0FBVzdPLFNBQVNtUCxnQkEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWtCbkMsSUFDckNILEVBQVFLLEVBQVdrQixPQUFPQyxNQUFPckgsRUFBTzhGLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FoQyxJQUNMeE0sR0FBT3VNLEVBQU1HLEtBQU5ILEVBNUNoQnhQLEVBQWEyUCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBT2hCLEdBQVljLElBQVUwQixFQUFPLENBQWpELEVBQ0FuUixFQUFhMlAsRUFBT2YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVlhLElBQVUwQixFQUFPLENBQWpELEVBRUosQ0E2REEsU0FBU0csSUFDRCxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBU0gsRUFBU3hILEVBQWhCOEYsTUFDUixPQUFPMEIsSUFBUzFCLEdBQVd0SSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUTRLLGFBQWVaLElBQVN6QixDQUM3RCxDQXNDQSxJQUFNNkIsRUFBTyxDQUNYOUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQUFBLEVBQ0FDLFdBQUFBLEVBQ0FDLE1BQUFBLEVBQ0FjLFVBQUFBLEVBQ0FEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxRQUFBQSxFQUNBd0IsTUFyTEYsV0FDU3hCLElBQ0xiLEVBQU1sRixHQUFTcUYsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUtyRixHQUFhaEUsU0FBQUEsR0FBS2dKLEVBQVEsQ0FBYixFQUNqQ2xOLEVBQWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb04sRUFBT2pELEVBQU13RCxFQUFhLFdBQWEsT0FBckQsRUFDYzNOLEVBQUFvTixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT3ZDLEdBQXNCNkMsRUFBS04sS0FBbEMsRUFDZHBOLEVBQWNvTixFQUFPM0MsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVl1RCxHQUFTbkssR0FBUTZKLEVBQUtnQyxXQUFZLENBQUV4QyxFQUFRLEVBQUcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOUYsRUFBT3BNLE9BQTdDLENBQTFDLEdBVUZVLEVBQU0wUixFQUFPLFFBQVM1UixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT21NLEVBQU0xQixHQUFhK0ksQ0FBMUIsQ0FBdEIsRUFDQXRULEVBQU0wUixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTyxVQUFXNVIsRUFBT21NLEVBQU1WLEdBQXFCK0gsQ0FBbEMsQ0FBeEIsRUFDQXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSCxFQUFJLENBQUV4QixHQUFha0IsR0FBZVAsR0FBa0I2QixDQUFwRCxFQUNBaEIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUlYLEdBQTBCc0gsQ0FBOUIsRUFFS1YsR0FDSGpHLEVBQUl6QixFQUFZNEksQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWhCLENBWkosRUE2S0UvSSxRQTFKRixXQUNjeUgsRUFBQSxDQUFBLEVBQ1p4SSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTWUsUUFBTixFQUNBMUQsRUFBYWtMLEVBQU9WLEVBQXBCLEVBQ0E5TSxFQUFpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0J3TixFQUFPbkMsRUFBeEIsRUFDY2pMLEVBQUFvTixFQUFPLFFBQVNXLENBQWhCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNBL04sRUFBQW9OLEVBQU8zQyxHQUFZdUQsR0FBUyxFQUE1QixDQUNoQixFQW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSkV4RixPQUFBQSxFQUFBbEksTUExRE8sU0FBT0MsRUFBY3RELEVBQXdCMFMsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BEQyxFQUFVRCxHQUFnQnpCLEdBQWVkLEVBQU83TSxFQUFNdEQsQ0FBdEQsQ0FDRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUEwREU0UyxTQXBCTyxTQUFVQyxFQUFjQyxHQU8vQixPQU5JQyxFQUFPL00sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUs2TSxFQUFPNUMsQ0FBUCxHQUdkOEMsRUFESy9CLEdBQWFySixDQUFBQSxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lFLFFBQVV6QixDQUFBQSxFQUFPZ0MsR0FBSTJELEVBQVgzRixFQUkvQjRJLEVBSCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFcE4sRUFBS29OLEVBQU01SSxFQUFPcE0sT0FBU2dWLENBQXRCLElBR0NELENBQ2onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixDQUVhLEVBYU4sT0FBQWYsQ0FDVCxDQzlSTyxJQUFNaUIsR0FBOEIxTixFQUFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MsWUNIQSxJQUFNMk4sR0FBMEIsQ0FBRUMsUUFBUyxDQUFBLEVBQU9DLFFBQVMsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsQ0FBM0IsRUNJaEMsSUFBTUMsR0FBb0IsQ0FDL0JDLFNBQVUsSUFDVkMsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVUvRyxHQUNWZ0gsS0FBVWpILEdBQ1ZrSCxHQUFVaEgsRUFDVmlILEtBQVVoSCxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FMcUIsRUFlMUIsU0FBU2lILEdBQWNwUixHQUU1QixPQURBQSxFQUFNL0MsRUFBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrQyxDQUFBLEVBQVFBLEVBQU1BLEVBQUlBLElBQzNCOFEsR0FBbUI5USxJQUFTQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDckMsQ0NKQSxJQUFNcVIsR0FBaUIsVUNmaEIsSUFBTUMsR0FBeUJ0TyxFQUEvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsUUFPTXVPLEdBQTRCRCxHQUFsQyxVQU9NRSxHQUFBLElBQXNCRixHQUF0QixPQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaURDLEdBQWpELElDV2IsSUFBTUUsR0FBZSxDQUFFLElBQUssb0RDRFosU0FBTzUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSixFQUFnQmtHLEVBQXdCMUksR0FDdkQsSUFBRXVFLEVBQVUvQixFQUFWK0IsTUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0Y4SCxFQUFnQnJNLEVBQVFxTSxhQUFlLEdBQ3ZDQyxFQUFnQnRNLEVBQVFzTSxlQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUIsR0FDekMzSixFQUFnQm5ELEdBQXRCLEVBS00rTSxFQUE4QyxHQXVCcEQsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVN2TCxFQUFTd0wsR0FDWEEsR0FDSDdKLEVBQU8zQixRQUFQLENBRUosQ0FRUyxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQXlMLEVBQVV6TSxFQUFrQjlDLEdBQzdCd1AsRUFBWUMsV0FBWXpQLEdBQ3ZCeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGLEVBQUE3TCxLQUFNNFYsRUFBVyxTQUFVOUksQ0FBM0IsRUFDUDJJLEVBQVE1VCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBTSxDQUFFcUgsRUFBUzBNLEVBQXpCLENBQ0YsQ0FLQSxTQUFTOUksSUFDRCxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQTZFLEVBQVlsRSxFQUFNQyxHdEVyREgsQ3NFcURILEVBQ1pvSSxFQUFZNU0sRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVE0TSxVQUNwQkMsRUFBU04sRUFBUU8sT0FBaUIsU0FBRUQsRUFBUUUsR0FDekMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQUFqUyxFQUFPK1IsRUFBUUUsRUFBTyxHQUFJaFQsUUFBVWdULEVBQU8sR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00sRUFBakQsQ0FDVCxFQUFHLEVBRlksRUFJZmhTLEdBQU1pRixDQUFOLEVBQ0FrRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBSzJJLENBQUwsRUFFSzdNLEVBQVFnQixRQUNYd0IsRUFBT3hCLFFBQTZCLGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFwQmhCLEVBQVFnQixPQUF4QndCLEVBQ1VpRyxHQUNWekgsRUFBUyxDQUFBLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FULEVBQ0F3QixFQUFPcUksTUFBUHJJLEdBRWNvSyxJQUFBNU0sRUFBUTRNLFdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcEssRUFBT3dLLFFBQTVCLENBRWxCLENBMEJTLFNBQUE5SSxFQUFLK0ksRUFBZUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWdCQyxHQUMzQ3JTLEVBQU9rRixFQUFTaU4sQ0FBaEIsRUFDQUMsR0FBUXBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFPVCxPQUFPK1MsZUFBZ0JwTixDQUF2QixFQUFrQ2lOLENBQWxDLEVBRVZFLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBQSxHQUFZNUksRUFBTUMsR3RFbElKLENzRWtJRixHQUNmaEMsRUFBT08sS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU1wQixFQUFlM0IsQ0FBNUJ3QyxDQUVKLENBRU8sTUFBQSxDQUNMNkssTUE3RkYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dBQ1EsSUFBQUMsRUFBK0IsUUFBdkJ0TixFQUFRdU4sV0FFdEJuVCxFQUFTaVMsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVQsRUFDR21CLEtBQU0sU0FBRUMsRUFBR0MsR0FBTCxPQUFZSixFQUFRLENBQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxFQUFJLENBQUNDLEVBQUksQ0FBQ0EsRUFBSSxDQUFDRCxDQUFwQyxDQURULEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VHblYsUUFBUyxTQUFPcUMsR0FDZjhSLEVBQVVKLEVBQWExUixHQUF2QixLQUFtQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyUyxFQUFRLE1BQVEsT0FBbkQsVUFBb0UzUyxFQUFwRSxLQUFBLENBQ0EsQ0FKSiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFNQThSLEVBQVVILEVBQWU3VyxDQUF6QixFQUNPbU8sRUFBQSxDQUNULEVBbUZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzVDLFFBQUFBLEVBQ0E4TCxPQTVCRixTQUFpQmEsR0FDVmhCLFdBQVlsWCxDQUFaLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUEyQ3NFLFVBQ3JDNFQsRUFBQTdTLEVBQU9rRixFQUFTc00sQ0FBaEIsRUFBa0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndlIsR0FBTWlGLEVBQVM1RixFQUFTa1MsQ0FBVCxHQUU5RCxFQXlCRXBJLElBQUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUpLLENBTVQsWVpyR2dCLFNBQVcxQixFQUFnQmtHLEVBQXdCMUksR0E4QjFELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFBLENBQ0xpSixRQXZCTyxTQUFTdE4sRUFBY2lTLEVBQW9CaEIsR0FFNUMsSUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUF0RSxFRDdDUyxTQzRDZnNFLEVBQVlBLEdBQWE1TSxFQUFRNE0sWUFDSWdCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FlaEIsSUFBYzdILEdBQU0sRUFBSSxDQUFBLEVBQTVCLEVBRXpDLE9BQUFDLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpQnJKLElBQVVxSixFQUFpQnJKLEdBQVEyTSxJQUN0RDNNLEVBQUswRCxRQUFTLG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkFBcUIsU0FBRXdPLEVBQU9DLEdBQ3ZDMU8sRUFBYzRGLEVBQWlCNkksRUFBTUUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1lBQU4sR0FBdUJ6RixJQUFXdUYsRUFDaEUsT0FBUyxFQUFUQyxFQUFhMU8sRUFBWScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0TyxPQUFRLENBQXBCLEVBQXdCQyxZQUF4QixFQUF3QzdPLEVBQVkvSSxNQUFPLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFuQixFQUF5QitJLENBQ3JGLENBSEMsQ0FJUCxFQWVFOE8sT0FORixTQUFpQjdWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUNmLE9BQU9BLEdEOURRLFFDOERFMkgsRUFBUTRNLFVBQW9CLEVBQUksQ0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFDbkQsQ0FFTyxDQUlULFdhRWdCLFNBQVVwSyxFQUFnQmtHLEVBQXdCMUksR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2hFLElBdUJJd0ssRUFLQTJELEVBS0FDLEVBakNpQjdMLEVBQUFBLEVBQWdCQyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBN0JJLElBQUFBLEdBQUk5TCxJQUFBQSxLQUNKNlIsRUFBU25HLEVBQVRtRyxLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUcsRUFBUzlJLEVBQVQ4SSxLQUNGdUYsRUFBOEIsR0FLOUJDLEVBQXdCLEdBSzEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQkMsRUFBd0IsR0FLeEJDLEVBQXlCLEdBb0I3QixTQUFTbkIsSUEyREM3QyxFQUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lFLEVBQVdqSSxJQUFBQSxFQUFYLEVBQ0EySCxFQUFBalUsR0FBT3NRLEVBQVAsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQW1CL0QsRUFBbkIsRUFFQTdJLEdBQUE0TSxHQUFTMkQsRUFBTSxrQ0FBZixFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUnhWLEVBQU0yVixFQUFRL1UsRUFBVTRVLEVBQUEsSUFBV3pILEdBQVgsU0FBaUNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFqQyxHQUFBLENBQXhCLEVBRVFwTSxFQUFBLENBQ05tVSxPQUFZN0gsR0FDWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrQyxXQUFZOUIsR0FDWjBILEtBQVk1SCxHQUNaNkgsS0FBWTVILEdBQ1o2SCxJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWTFILEdBQ1oySCxPQUFZMUgsRUFOTixFQU9MLFNBQUVsTCxFQUFXdkIsR0FDSjBUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFBMVQsR0FBUThULEVBQU0sSUFBS3ZTLENBQUwsQ0FDeEIsQ0FUTSxFQVdSdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEdBQVF5VCxFQUFVLENBQUUxRixLQUFBQSxFQUFNNkIsTUFBQUEsRUFBTzJELEsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQSxFQUFNRyxPQUFBQSxDQUFyQixDQUFsQixFQVNBLElBQU1oTCxFQUFPcUYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUtyRixJckI1TGYsU0FBbUJ5TCxHQUNqQixNQUFBLEdBQUlBLEVBQVd6UCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBT0MsR0FBS3dQLElBQWF4UCxHQUFLd1AsSUFBWSxHQUFNLENBQXpDLENBQy9CLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncUIwTHNDclIsRUFBVixFQUNsQnNSLEVBQU9oUCxFQUFRZ1AsS0FFckJyRyxFQUFLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JGLEdBQU1BLEVBQ0xrSCxFQUFBbEgsR0FBS2tILEVBQU1sSCxJQUFVQSxFQUFyQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FDRDZLLEVBQUE3SyxHQUFNNkssRUFBSzdLLElBQVVBLEVBQXJCLFFBRUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUV0SCxFQUFjMk0sRUFBTXBELElBQTJCLFlBQWpCb0QsRUFBS3NHLFNBQXlCRCxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDbkQ1VCxFQUFBdU4sRUFBTXBELEVBQU15SixDQUFaLEVBR0Y1VCxFQUFBdU4sRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU0xQyxHQUFzQjZDLEVBQUtvRyxRQUFqQyxFQUNBOVQsRUFBQStTLEVBQU01SSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBTSxjQUFaLEVBOUZQM0IsRUFBQSxDQUNULENBd0JBLFNBQVM1QyxFQUFTd0wsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQ1YsSUFBQXRSLEVBQVFtTCxHQUFlOEksT0FBUSxPQUF2QixFQUVkalosRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvWSxDQUFQLEVBQ0FoUixFQUFhcUwsRUFBTTRGLENBQW5CLEVBQ0FqUixFQUFha04nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU9nRSxDQUFwQixFQUNBeFQsRUFBaUIsQ0FBRXdQLEVBQU8yRCxHQUFRalQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQWxDLEVBQ0FGLEVBQWlCMk4sRUFBTTZELEVBQWF0UixFQUFRLENBQUUsUUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrSyxHQUF2RCxDQUNGLENBS0EsU0FBU3JDLElBQ1B0RyxFQUFhcUwsRUFBTTRGLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFuQixFQUNBalIsRUFBYWtOLEVBQU9nRSxDQUFwQixFQUVBRCxFQUFlYSxFQUFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdJLElBQzNCaUksRUFBZVksRUFBWTVJLElBRTNCck4sRUFBVXdQLEVBQU00RixDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaEIsRUFDQXBWLEVBQVVxUixFQUFPZ0UsQ0FBakIsRUFFY3BULEVBQUF1TixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTTlDLEdBQVk3RixFQUFRb0osS0FBMUIsRUFDQWhPLEVBQUF1TixFQUFNN0MsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lCOUYsRUFBUXFQLFVBQS9CLENBQ2hCLENBb0RBLFNBQVNaLEVBQU16VSxHQUNQbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEVBQU1vRSxHQUFvQnlMLEVBQU0zTyxDQUFOLEVBQ2hDLE9BQU9sQixHQ3JOSywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBU29TLEVBQW1CbFIsR0FDckMsR0FBQXJDLEVBQVl1VCxFQUFLb0UsT0FBakIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ0ksT0FBQXBFLEVBQUtvRSxRQUFTdFYsQ0FBZCxFQUtELElBRlIsSUFBSWxCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUEwQm9TLEVBRXRCcFMsR0FBd0IsSUFBakJBLEVBQUl5VyxVQUNaeFYsQ0FBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVNqQixFQUFLa0IsQ0FBZCxHQUlMbEIsRUFBTUEsRUFBSTBXLGNBR0wsT0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ExVyxDQUNULEVEcU0yQkEsRUFBVXlOLElBQUFBLEVBQVYsSUFBOEJvQyxFQUFPNycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQLEVBQU0sS0FBQSxDQUNwRSxDQVNBLFNBQVNzVyxFQUFZbEMsR0FDWixNQUFBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNEQSxFQUFXbE4sS0FBQUEsRUFBUTFJLEtBQ25CNFYsRUFGQyxLQUVVbE4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1E0TSxVQUN2QjVNLEVBQVF5UCxNQUFZdkMsRUFIZixjQUlMbE4sRUFBUTRJLGNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvQnNFLEVBSnZCLFFBS0xBLElBQVMzRyxJQUFjZSxHQUUzQixDQUVBLE9BQU8xTSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FBUXlULEVBQVUsQ0FDdkJoQixNQUFBQSxFQUNBeEMsTUF4SEYsV0FDRWpJLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FJbEIsRUFBZVYsQ0FBbkIsRUFDQTRCLEVBQUlsQixFQUFlMkwsQ0FBbkIsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6SyxFQUFJakIsRUFBZWlDLENBQW5CLEVBRU05TSxFQUFBMEUsU0FBY3VNLEdBQWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxXQUFBLFNBQUs1UCxHQUN2RGlXLEVBQXdCLFlBQVhqVyxFQUFFYixJQUNkLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLENBQUVrVSxRQUFTLENBQUEsQ0FBWCxDQUZHLEVBSUExVSxFQUFBNlIsRUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsVUFBVyxXQUNyQjlQLEVBQWE4UCxFQUFNZixHQUFnQixDQUFDLENBQUV3RyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEMsQ0FDQSxDQUZJLENBR1IsRUE2R0VwTixRQUFBQSxDQUh1QixFQUszQixTRTdLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dCLFNBQVF3QixFQUFnQmtHLEVBQXdCMUksR0FDOUQsSUFBMkJ1QyxFQUFBQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0JDLEdBQW5DSSxJQUFBQSxHQUFJRyxJQUFBQSxLQUFNak0sSUFBQUEsS0FDVncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWCxLQUFpQjVGLEVBQVc2QixVQUE1QitELE9BQVFILElBQUFBLEtBS1Z2RSxFQUEyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsR0FjakMsU0FBUzhGLElBQ0FwQixFQUFBaFcsUUFBUyxTQUFFa1EsRUFBT0YsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQXVCbUUsRUFBQWpFLEVBQU9GLEVBQU8sQ0FBRyxDQUFqQixDQUFxQixDQUE5RCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FDVCxDQUtBLFNBQVN0SCxJQUNQMUksRUFBUyxTQUFBK1AsR0FBV0EsRUFBTXJIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxRQUFOcUgsQ0FBa0IsQ0FBdEMsRUFDQW5TLEVBQU8wVCxDQUFQLENBQ0YsQ0FpQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLFNBQUE2QyxFQUFVakUsRUFBb0JGLEVBQWVDLEdBQzlDL04sRUFBUzZOLEdBQU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN0YsRUFBUThGLEVBQU9DLEVBQVlDLENBQWxDLEVBQ2ZoTyxFQUFPcVEsTUFBUCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDQWpCLEVBQU9qUixLQUFNNkIsQ0FBYm9QLEVBQ0FBLEVBQU80RCxLQUFNLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbUMsRUFBUUMsR0FBVixPQUFzQkQsRUFBT3JILE1BQVFzSCxFQUFPdEgsS0FBNUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQWJzQixDQUNGLENBU0EsU0FBU2lHLEVBQUtDLEdBQ1osT0FBT0EsRUFBZ0I3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YsRUFBUSxTQUFBb08sR0FBQSxNQUFTLENBQUVBLEVBQU1nQixPQUFqQixDQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUE2Qk8sQ0FDOUQsQ0FtRVMsU0FBQXRSLEVBQVNFLEVBQTBCc1gsR0FDckNELEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBQyxDQUFBLEVBQWdCeFgsUUFBU0UsQ0FBekIsQ0FDUCxDQVVBLFNBQVN5QixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUThWLEdBQ2YsT0FBT25HLEVBQU8zUCxPQUFRdEMsRUFBWW9ZLEdBQzlCQSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQSxTQUFBMUgsR0FBQSxPQUFTelEsRUFBVW1ZLEdBQ2pCaFcsR0FBU3NPLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxNQUFPdUgsR0FDdEJ0WCxFQUFVTCxFQUFTMlgsR0FBVzFILEVBQU1DLEtBQXBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUZGLENBRkdzQixDQU1ULENBd0RPLE1BQUEsQ0FDTGlCLE1Bbk1GLFdBQ082RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBQSxFQUNMOU0sRUFBSWxCLEVBQWVWLENBQW5CLEVBQ0E0QixFQUFJbEIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWVnTyxDQUFuQixDQUNGLEVBZ01FMU8sUUFBQUEsRUFDQTRDLE9BN0tGLFdBQ0V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0wsRUFBUyxTQUFBK1AsR0FBV0EsRUFBTXpFLE9BQU55RSxDQUFpQixDQUFyQyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDRixFQTRLRW9FLFNBQUFBLEVBQ0FvRCxJQUFBQSxFQUNBRyxNQTNJRixTQUFnQkMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQ1IsSUFBRUMsRUFBZXhILEVBQWZ3SCxXQUNGNUgsRUFBUTRILEVBQVdDLFFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTRixDQUFwQixFQUNSL1IsRUFBUWdTLEVBQVdFLFdBQWEsRUFBSXBRLEVBQVFxUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsUUFDM0MsT0FBQXBXLEVBQVEsU0FBQW9PLEdBQUEsT0FBUzNKLEdBQVMySixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTUMsTUFBT0EsRUFBT0EsRUFBUXBLLEVBQU0sQ0FBbENtSyxDQUFsQixDQUFSLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NULEVBdUlFd0IsTUE5SEYsU0FBZ0J2QixHQUNQLE9BQUFyTyxFQUFRcU8sQ0FBUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBaUIsRUFDMUIsRUE2SEV0UCxJQXJITyxTQUFLSixFQUFtRDBQLEdBQy9EZ0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWExWCxFQUFPLFNBQVM0UCxHQUt0QixJQWtFZTFQLEVBQWNpSCxFQUU5QjNKJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQXBFQzBCLEVBSEgwUSxFQURHNVEsRUFBVTRRLENBQVYsRUFDSy9MLEdBQVcrTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FHREEsQ0FBZixLQUNHN08sRUFBTTJVLEVBQVFoRyxJQUNkN08sRUFBUStPLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFPN08sR0FBUU4sRUFBUThVLEVBQU0zRixDQUFkLEVBQ25CclAsRUFBQXFQLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FPeEksRUFBUWpILFFBQVF5UCxLQUF2QixFQStEUTFQLEVBOURIMFAsRUE4RGlCeicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJLEVBOURWbkosRUFBT21NLEVBQU1uQixFQUFiLEVBK0RwQjJPLEVBQVNuVCxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVXRFLEVBQUssS0FBTCxHQUNuQjFDLEVBQVdtYSxFQUFYbmEsUUFHSm1hLEVBQU9qJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ksUUFBUyxTQUFPa1ksR0FDZjFaLEVBQUEwWixFQUFLLGFBQWMsV0FDZHBhLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxHQUNFMkosRUFBQSxDQUVYLENBSkksQ0FLTixDQU5GLEVBUVNBLEVBQUEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInekVULENBWEYsRUFhQWdELEVBQU1yQixDQUFOLENBQ0YsRUFzR0VuRixPQTlGRixTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBaUJ3VCxHQUNIVSxFQUFBeFcsRUFBUThWLENBQVIsRUFBa0JyRyxJQUFLLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBckIsR0FBQSxPQUFTQSxFQUFNRyxLQUFmLENBQXZCLENBQUEsRUFDWnpGLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckIsQ0FBTixDQUNGLEVBNEZFcEosUUFDQUEsRUFDQTJCLE9BQUFBLEVBQ0F5QixNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EzRE8sU0FBT0MsRUFBY3RELEVBQXdCMFMsR0FDcER6UyxFQUFTLFNBQUErUCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBV0EsRUFBTTNNLE1BQU9DLEVBQU10RCxFQUFPMFMsQ0FBMUIxQyxDQUEyQyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL0QsQ0FDRixFQTBERXFJLFVBMUJGLFNBQW9CWixHQUNYLE9BQUFBLEVBQWdCeEIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWdCMUUsR0FBVHhULE1BQ2hDLEVBeUJFdWEsU0FsQkYsV0FDUy9HLE9BQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPeFQsT0FBUzRKLEVBQVFxUSxPQUNqQyxDQUVPLENBZ0JULFNDclFnQixTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUTdOLEVBQWdCa0csRUFBd0IxSSxHQUM5RCxJQVNJNFEsRUFLQUMsRUFLQUMsRUFuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JJbE8sS0FBbUJMLEVBQWdCQyxJQUFuQ0ksR0FBSTlMLElBQUFBLEtBQU1pTSxJQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsS0FDVjZHLEVBQVdsQixFQUFYa0IsT0FDQVgsRUFBWVAsRUFBV1EsVUFBdkInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRCxRQUNBTixLQUFzQkQsRUFBVzZCLFVBQWpDNUIsS0FBTTZCLElBQUFBLE1BQU8yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsSUFBQUEsS0FDYnRFLEVBQThCRCxFQUE5QkMsTUFBY2tILEVBQWdCbkgsRUFBdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCbE8sTUErQmYsU0FBU2dVLElBQ1BrQixFQUFXNVEsRUFBUTRNLFlBQWM3SCxHQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInakNySixFQUFPaU4sRUFBTSxXQUFZbEwsRUFBTXVDLEVBQVFpRixLQUFSLENBQS9CJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUNBdkosRUFBTzhPLEVBQU92QixFQUFTLGFBQUEsRUFBaUIrSCxFQUFZLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBLENBQVosQ0FBeEMsRUFDQXRWLEVBQU84TyxFQUFPdkIsRUFBUyxjQUFBLEVBQWsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQitILEVBQVksQ0FBQSxDQUFaLENBQXpDLEVBRUFDLEVBQVEsQ0FBQSxDQUFSLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NGLENBUUEsU0FBU0EsRUFBUUMsR0FDVCxJQUFBQyxFQUFVL1UsRUFBTXVNLEdBRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidqQnVJLENBQUFBLEdBQVNMLEVBQVM1TCxRQUFVa00sRUFBUWxNLE9BQVM0TCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU08sU0FBV0QsRUFBUUMsU0FDckUxVixFQUFBOE8sRUFBTyxTQXFDbEIsV0FDRSxJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSTRHLEVBQVMsR0FFUlIsSUFFSGhULEdBREF3VCxFQUFTQyxFQUFULEVBQ2dCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtQ0FBaEIsRUFDQUQsRUFBa0JBLFFBQUFBLEVBQWNKLE1BQUFBLEVBQVksQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBWixFQUFoQyxNQUEyREEsRUFBWSxDQUFBLEdBQXZFLEtBR0ssT0FBQUksQ0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1QsR0EvQ1csRUFFUEwsRUFBYTlILEVBQVMsZUFBaUJ4TCxFQUFNdUMsRUFBUXNSLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFSLENBQTdDLEVBQ2FQLEVBQUEsUUE2RFIvUSxFQUFRdVIsVUFDWCxLQUNBOVQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU11QyxFQUFRd1IsVUFBZCxJQUFnQ1osRUFBVyxHQUFLYSxJQS9EckMsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FWLEVBQUEsU0F1RVJ0VCxFQUFNdUMsRUFBUTBSLFdBQWQsSUFDQWQsRUFBYTVRLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRMlIsV0FBYSxLQUFPRixJQUFtQkosS0F4RXhCLENBQUEsQ0FBNUIsRUFFRlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUFNLEVBQ1hwTyxFQUFNbEIsRUFBTixFQUVLaVAsS0FBZUEsRUFBV2MsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsS0FDaEIvWSxFQUFBOFAsRUFBTWQsR0FBZ0JpSixDQUF0QixFQUNiL04sRXRCdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidGZ0MsV3NCdUZWK04sQ0FBdEIsR0FHTixDQVVBLFNBQVNFLEVBQVl2VyxHQUNiLEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFFb1gsRUFBWTdSLEVBQVo2UixRQUNGbFcsRUFBT3NOLEVBQVN4TyxFQUFRLFFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FVLE1BQTNCLEVBQ04sT0FBQW9YLEdBQ0ZwVSxFQUFNb1UsRUFBU2xXLEtBQVluRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBVXFhLEdBQVksRUFBSUEsS0FDckQsS0FDUCxDQXdCQSxTQUFTUixJQUNBLE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBNVQsRUFBTXVDLEVBQVFvUixRQUFVaFYsRUFBTStSLENBQU4sRUFBYWxKLE1BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRakYsRUFBUThSLFdBQXJELENBQ1QsQ0E0QkEsU0FBU0wsSUFDRCxJQUFBSCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTTdULEVBQU11QyxFQUFRc1IsR0FBUixFQUNYLE1BQUEsY0FBY0EsU0FBY0EsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTVCLE1BQXlDdFIsRUFBUXFRLFNBQVcsSUFBTWlCLFNBQWNBLEdBQWhGLEdBQ1QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBT0EsU0FBU1MsSUFDUCxPQUFPM1YsRUFBTStSLENBQUEsRUFBUWxGLEVBQVMsTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVQsRUFDdkIsQ0FVUyxTQUFBK0ksRUFBVzFKLEVBQWdCMkosR0FDNUI1SixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUXdCLEVBQU92QixHQUFTLENBQVQsRUFDZCxPQUFBRCxFQUNIak0sRUFBTWlNLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FNRyxLQUFOLEVBQWVTLEVBQVMsT0FBQSxJQUFnQmdKLEVBQWEsRUFBSUMsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDL0QsQ0FDTixDQVdTLFNBQUFDLEVBQVc3SixFQUFlMkosR0FDM0IsSUFJRS8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTSxFQUpGbUQsRUFBUXdCLEVBQU92QixHQUVyQixPQUFLRCxHQUNHNU4sRUFBUTJCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNaU0sRUFBTUcsS0FBTixFQUFlUyxFQUFTLFVBQ3RDL0QsRUFBUTlJLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNK1IsQ0FBTixFQUFjbEYsRUFBUyxTQUM5QjVLLEVBQUs1RCxFQUFReUssSUFBVysnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTSxFQUFhLEVBQUlDLE1BRzNDLENBQ1QsQ0FVQSxTQUFTRSxFQUFZSCxHQUNaLE9BJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBRSxFQUFXM1AsRUFBT3BNLE9BQVMsQ0FBM0IsRUFBaUMrYixFQUFXLEdBQU1ILCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFXLEVBQUdDLENBQUgsQ0FDdEUsQ0FPQSxTQUFTQyxJQUNELElBQUE3SixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUXdCLEVBQU8sR0FDZCxPQUFBeEIsR0FBU2dLLFdBQVkzVyxFQUFPMk0sRUFBTUcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01BQU9TLEVBQVMsYUFBQSxDQUF0QixJQUE2QyxDQUNsRixDQW9CQSxTQUFTMkksSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1AsT0FBT3BQLEVBQU9nQyxHQUFJNEQsRUFBWDVGLEdBQXFCNFAsRUFBWSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxDQUFBLEVBQVNMLEVBQWpELENBQ0YsQ0FFTyxNQUFBLENBQ0xsSCxNQWxORixXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0MxQ2MsSUFDZGhVLEVBQ0F5YixFQUVNclAsRUR1Q0N5TSxFQUFBLEVBQ0w1WSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTW1CLE9BQVEsZUMzQ2hCcEIsRUQyQ3lDRCxFQUFPbU0sRUFBTW5CLElDeENoRHEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFXRCxHQUFpQnNQLEdBQVksRUFBR3piLEVBQU0sS0FBTSxDQUEzQixFQUUzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsV0FDSW9NLEVBQUFtQixTQUFBLEdBQWNuQixFQUFTMU0sTUFBdkIsQ0FDWCxFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvQ0UsRUFDQXFNLEVBQUksQ0FBRWpCLEVBQWVELEdBQWlCZ08sQ0FBdEMsRUFDQTknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTSxFQUFJaEIsR0FBY3FQLENBQWxCLENBQ0YsRUE4TUVBLE9BQUFBLEVBQ0FjLFNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUNBQyxVQUFBQSxFQUNBSSxXQUFBQSxFQUNBRCxVQUFBQSxFQUNBSSxXQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyQkYsU0FBcUI5WCxHQUNaLE9BQUE0WCxXQUFZM1csRUFBTzhPLEVBQU92QixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyxXQUFXeE8sRUFBUSxRQUFVLFFBQTdDLENBQW5CLEdBQW1GLENBQzVGLEVBb0JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21YLFdBQUFBLENBUkssQ0FVVCxTRXhQZ0IsU0FBUXBQLEVBQWdCa0csRUFBd0IxSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDeEQsSUFhRndTLEVBYkV2UyxFQUFRc0MsRUFBZ0JDLEdBQ3RCSSxFQUFPM0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVAyQyxHQUNBMkgsRUFBcUI3QixFQUFyQjZCLFNBQVVYLEVBQVdsQixFQUFYJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2tCLE9BQ1ZYLEVBQVlQLEVBQVdRLFVBQXZCRCxRQUtGd0osRUFBd0IsR0FXOUIsUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVM1SCxJQUlBLEdBSFBqSSxFQUFJbEIsRUFBZWdSLENBQW5CLEVBQ0E5UCxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSSxDQUFFakIsRUFBZUMsSUFBZ0IrUSxDQUFyQyxFQUVPSCxFQUFhSSxJQUF3QixDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDMUNDLElBd0NlbFAsRUF4Q0w2TyxFQXlDTmxFLEVBQVMxRSxFQUFPaUcsSUFBUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBYXhaLE1BQTVCLEVBQ1FELEVBQVdrWSxFQUFYbFksT0FFUixHQUFLQSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyxDQUNKLEtBQUFrWSxFQUFPbFksT0FBU3VOLEdBQ3RCaEwsRUFBTTJWLEVBQVFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFkLEVBR0YzVixFQUFNMlYsRUFBT2pZLE1BQU8sQ0FBQ3NOLENBQWYsRUFBdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCMkssRUFBT2pZLE1BQU8sRUFBR3NOLENBQWpCLENBQTlCLEVBQXlEckwsUUFBUywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBRStQLEVBQU9DLEdBQ3pFLElBQU13SyxFQUFTeEssRUFBUTNFLEVBQ2pCb1AsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBZ0JILFNBQVdqYSxFQUFrQndQLEdBQzlCeUssRUFBUWphLEVBQUlrYSxVQUFXLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLENBQWYsRUFHUCxPQUZHN1osRUFBQTRaLEVBQU8vUyxFQUFRakgsUUFBUWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSxLQUF2QixFQUNWQSxFQUFNelAsR0FBU2QsRUFBT21HLEtBQUtyRixHQUEzQixTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBd0NoRSxHQUFLZ0osRUFBUSxDQUFiLEVBQ2pDeUssQ0FDVCxFQXJCZ0MxSyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTUcsTUFBT0YsQ0FBeEIsRUFDTndLLEVBQUFyWixFQUFRc1osRUFBT3pFLEVBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQUk5RixLQUEzQixFQUFxQ25QLEVBQVFrUixFQUFTNEQsS0FBTTRFLENBQXZCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUM5Q3BhLEVBQU04WixFQUFRTSxDQUFkLEVBQ09uSixFQUFBNkMsU0FBVXNHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFPekssRUFBUTNFLEdBQVVtUCxFQUFTLEVBQUkxYyxHQUFVaVMsRUFBTUMsS0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWhFLENBQ1AsQ0FORixDQU9GLENBdkRFSSxFQUFXdUssT0FBT2hDLE9BQVEsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsQ0FBMUJ2SSxDQUNGLENBQ0YsQ0FLQSxTQUFTZ0ssSUFDQzFSLEVBQUEsRUFDRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2SixFQUFBLENBQ1IsQ0FLQSxTQUFTN0osSUFDUHpFLEVBQVFrVyxDQUFSLEVBQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmMsRUFBT3VjLENBQVAsRUFDQXhTLEVBQU1lLFFBQU4sQ0FDRixDQUtBLFNBQVMyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1IsSUFDUCxJQUFNaFAsRUFBUWlQLEVBQWQsRUFFS0osSUFBZTdPLElBQ2I2TyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBYTdPLEdBQVMsQ0FBRUEsSUFDM0IxRCxFQUFNOEMsS0FBTXJCLENBQVosQ0FHTiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0ErQ0EsU0FBU2tSLElBQ0gsSUFLSU0sRUFMRlQsRUFBV3pTLEVBQVh5UyxPQVVDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsT0FSQWpRLEVBQU9nQyxHQUFJMkQsRUFBWDNGLEVBRUszSyxHQUFhNGEsQ0FBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBLElBR3ZCQSxHQUZNUyxFQUFhbFQsRUFBU2lKLEVBQVMsWUFBQSxJQUFvQlAsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVd1SyxPQUFPakIsVUFBVyxDQUE3QnRKLElBQ3pCdEssR0FBTWhDLEVBQU1tTyxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBU0MsS0FBVCxFQUFrQnZCLEVBQVMsT0FBVCxHQUF1QmlLLENBQXJELEdBQ1BsVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBU2lKLEVBQVMsV0FBVCxJQUE0QnpHLEVBQU9wTSxRQTlIakQsRUE4SDZENEonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVFxUSxTQUp6Rm9DLEVBQVMsRUFPSkEsQ0FDVCxDQUVPLE1BQUEsQ0FDTDVIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFBQSxFQUNBN0osUUFBQUEsQ0FGSyxDQUlULE9DNUdnQixTQUFNd0IsRUFBZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCa0csRUFBd0IxSSxHQUM1RCxJQVNJbVQsRUFUaUI1USxFQUFBQSxFQUFnQkMsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQTdCSSxJQUFBQSxHQUFJRyxJQUFBQSxLQUNKbUIsRUFBUTFCLEVBQU8rQixNQUFmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0wsSUFDQThOLEtBQTJEdEosRUFBV3VLLFFBQXRFakIsVUFBV08sSUFBQUEsV0FBWScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLElBQUFBLFVBQVdKLElBQUFBLFNBQVVLLElBQUFBLFdBQzVDbkosS0FBb0JQLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFXUSxXQUEvQkQsUUFBU2lGLElBQUFBLE9BQ1RDLEtBQWdCekYsRUFBVzZCLFVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EzQjRELEtBQU0zRCxJQUFBQSxNQW9CZCxTQUFTNEksSUFDQTFLLEVBQVd3SCxXQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBV21ELFdBQzNCM0ssRUFBVzRLLE9BQU94UCxPQUFsQjRFLEVBQ0E2SyxFQUFNL1EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU84RixLQUFiLEVBQ0FJLEVBQVdrQixPQUFPaEcsT0FBbEI4RSxFQUVKLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJytCQSxTQUFTNkssRUFBTWpMLEdBQ0ZrTCxFQUFBQyxFQUFZbkwsRUFBTyxDQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFuQixDQUFBLENBQ2IsQ0FRUyxTQUFBa0wsRUFBV0UsRUFBa0JDLEdBQzdCblInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU9nQyxHQUFJNEQsRUFBWDVGLElBQ0NvUixFQUFjRCxFQUFjRCxFQVd0QyxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBZUEsR0FDUmxSLENBQUFBLElBQ0c4RixFQUNBdUwsRUFGSHJSLEVBQU9nQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSTJELEVBQVgzRixJQUNHOEYsRUFBYzZILEVBQVN1RCxHQUN2QkcsRUFBY3ZMLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRSSxFQUFXd0gsV0FBVzRELE9BQWxELEdBQ29CeEwsRUFBUSxHQUVSdUwsS0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BILEVBQUFLLEVBQU9MLEVBQVVHLENBQWpCLEdBRWYsQ0FFTyxPQUFBSCxDQUNULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQXZCdURBLENBQU4sRUFDN0NoWSxFQUFPeVMsRUFBTSxZQUFiLFlBQXVDbEYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVMsR0FBQSxFQUFXMkssSUFBQUEsRUFBM0QsS0FBQSxFQUNhRixJQUFBRSxHQUFlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdRLEVBQU1ULElBRXRDLENBNkJTLFNBQUF5UixFQUFPTCxFQUFrQk0sR0FDMUIsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFDLEVBQVNQLEVBQVdRLEVBQVVGLENBQVYsRUFDcEJHLEVBQVMvQixFQUFmLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUVPLE9BREtzQixHQUFBeEYsRUFBUWlHLEdBQVMvVixHQUFNQyxFQUFLNFYsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFBV0UsQ0FBdEIsR0FBZ0MsRUFBakQsR0FBMkRILEVBQVksRUFBSSxDQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUV6RixDQUtBLFNBQVNsUSxJQUNJMFAsRUFBQVksRUFBQSxFQUFlLENBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWYsRUFDWGpCLEVBQVdyUCxPQUFYLENBQ0YsQ0FTQSxTQUFTcU0sRUFBU3VELEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01oQixJQUxNLElBQUE5SixFQUFTbEIsRUFBV2tCLE9BQU9pRyxJQUEzQixFQUVGdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidILEVBQWMsRUFDZCtMLEVBQWNDLEVBQUFBLEVBRVJDLEVBQUksRUFBR0EsRUFBSTMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSyxFQUFPeFQsT0FBUW1lLENBQU0sR0FBQSxDQUNsQyxJQUFBaE0sRUFBYXFCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRMkssR0FBSWpNLE1BQ3pCNkMsRUFBYTlNLEVBQUtvVixFQUFZbEwsRUFBWSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxDQUF4QixFQUFpQ21MLENBQWpDLEVBRXhCLEdBQUt2SSxFQUFBQSxHQUFZa0onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBSWYsTUFIY0EsRUFBQWxKLEVBQ0E3QyxFQUFBQyxDQUlsQixDQUVPLE9BQUFEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUNULENBVVMsU0FBQW1MLEVBQVluTCxFQUFla00sR0FDNUIsSUFBQWQsRUFBVycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4RixFQUFRaUUsRUFBVzdKLEVBQVEsQ0FBUixHQWtDckJBLEVBbEMyQ0EsRUFvQ3onCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxZQURUeE0sRUFBVWtFLEVBQVZsRSxRQUNzQmlXLEVBQWFDLEVBQUFBLEVBQVcxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0osRUFBTyxDQUFBLENBQVAsR0FBa0IsRUFBSSxDQUFDeE0sRUFBUWtXLEVBQVcxSicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBWCxHQUFzQixJQW5DcEdrTSxPQUFBQSxHQW9CTWQsRUFwQldBLEVBc0JYQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFEUjFULEVBQVF5VSxXQUFhalMsRUFBT2dDLEdBQUkwRCxFQUFYMUYsRUFDYnpEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFPMlUsRUFBVSxFQUFHeEYsRUFBUWtFLEVBQVksQ0FBQSxHQUFTTCxFQUFTLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUF0QyxDQUFwQixFQUdOMkIsR0F6QjhCQSxDQUN2QyxDQU9BLFNBQVNVLElBQ0QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElBQUFsUCxFQUFPK0QsRUFBUyxRQUNmLE9BQUE3TSxFQUFNK1IsQ0FBTixFQUFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2pKLEdBQVM5SSxFQUFNb08sQ0FBTixFQUFldEYsR0FBU2dKLEVBQVFxRSxFQUFZLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLENBQUEsQ0FBcEIsQ0FDeEQsQ0FrQ0EsU0FBUzJCLEVBQVVoVyxHQUNWLE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBdVYsRUFBWXZWLEVBQU13SyxFQUFXd0gsV0FBVzRELE9BQXRCcEwsRUFBaUMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUcsQ0FBQyxDQUFFMUksRUFBUXlVLFNBQWpFLENBQ1QsQ0ErQk8sTUFBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDTDVKLE1BaE9GLFdBQ0VzSSxFQUFhekssRUFBV3lLLFdBQ3hCdlEsRUFBSSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRTFCLEVBQWVXLEdBQWVGLEVBQWVELEdBQWlCMFIsQ0FBcEUsQ0FDRixFQThORXNCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxLQXZNRixTQUFlQyxFQUFjck0sRUFBZXFHLEVBQWM1TyxHQStLMUQsSUFBbUJpVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFDWFksRUEvS0RELElBQVNyTSxJQThLRzBMLEVBOUt1QnJGLEVBQVBnRyxFQSsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSzNCQyxFQUFVMUcsRUFBUTZGLEVBQU9LLEVBQVAsRUFBc0JKLENBQXRCLENBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ2pCQSxFQUNRLEdBQVhZLEVBQ0FBLEdBQVd6RyxFQUFNbEYsRUFBUyxhQUFULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUE2QjdNLEVBQU1vTyxDQUFBLEVBQVN2QixFQUFTLE9BQVQsTUFqTHhEbkYsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDUDBQLEVBQVdPLEVBQU9LLElBQXNCekYsRUFBUGdHLEdBQWUsQ0FBQSxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBaEQsR0FHRnpRLEVBQUt4TyxDQUFMLEVBQ01xTixFQUFBNUIsRUFBWW1ILEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPcUcsRUFBTWdHLENBQXpCLEVBRUt4QixFQUFBNWMsTUFBTytSLEVBQU8sV0FDdkInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEUsRTdFdkZjLEM2RXVGZCxFQUNNbkIsRUFBQTNCLEdBQWFrSCxFQUFPcUcsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01nRyxDQUExQixFQUNONVUsR0FBWUEsRUFBWixDQUNBLENBSlMsQ0FLYixFQTBMRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3VCxLQUFBQSxFQUNBQyxVQUFBQSxFQUNBTyxNQUFBQSxFQUNBalEsT0FBQUEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FxTSxRQUFBQSxFQUNBc0QsV0FBQUEsRUFDQVcsWUFBQUEsRUFDQUYsU0FBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ0FXLGNBbEJPLFNBQWUzVyxFQUEyQndWLEdBQ2pEQSxFQUFXN2IsR0FBYTZiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLEVBQWFVLEVBQTFCLEVBQTBDVixFQUMvQyxJQUFBb0IsRUFBc0IsQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBUjVXLEdBQWdCZ1EsRUFBUXdGLENBQVIsRUFBcUJ4RixFQUFRZ0csRUFBVSxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxDQUFBLENBQWxCLEVBQ25ETCxFQUFzQixDQUFBLElBQVIzVixHQUFpQmdRLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRd0YsQ0FBUixFQUFxQnhGLEVBQVFnRyxFQUFVLENBQUEsQ0FBQSxDQUFsQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDMUQsT0FBT1ksR0FBZWpCLENBQ3hCLEVBY0VULFdBQUFBLENBWkssQ0FjVCxhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NsUWdCLFNBQVk1USxFQUFnQmtHLEVBQXdCMUksR0FDbEUsSUFrQkkrVSxFQVVBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFLQUMsRUFLQTVFLEVBdENpQjlOLEVBQUFBLEVBQWdCQyxHQUE3QkksSUFBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQUlHLElBQUFBLEtBQ0ptUyxFQUFTeE0sRUFBVHdNLEtBQ0FkLEVBQXNDYyxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBdENkLFlBQWFGLEVBQXlCZ0IsRUFBekJoQixTQUFVVCxFQUFleUIsRUFBZnpCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXQUN2QjlDLEtBQXdCakksRUFBV2tCLFFBQW5DK0csU0FBVUQsSUFBQUEsVUFDVnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxFQUFZblYsRUFBWm1WLFFBQ0ZDLEVBQVU1UyxFQUFPZ0MsR0FBSTJELEVBQVgzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsRUFDVjZTLEVBQVU3UyxFQUFPZ0MsR0FBSTBELEVBQVgxRixFQUNWOFMsRUFBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxZSxFQUFPMmUsRUFBYSxDQUFBLENBQWIsRUFDakJDLEVBQVU1ZSxFQUFPMmUsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWEsQ0FBQSxDQUFiLEVBS25CRSxFQUFZelYsRUFBUXpKLE9BQVMsRUFVN0JtZixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBWUQsRUErQmhCLFNBQVMvRixJQUNQc0YsRUFBYXRFLEVBQVcsQ0FBQSxHQUN4QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1RSxFQUFhalYsRUFBUWlWLFFBQ3JCNUUsRUFBYXJRLEVBQVFxUSxRQUNyQjBFLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFhakIsRUFBYixFQUVBLElBQU14TCxFQUFRdkosRUFBTzBXLEVBQVcsRUFBR04sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVVKLEVBQVdDLEVBQWEsQ0FBaEQsRUFFaEIxTSxJQUFVbU4sSUFDREEsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduTixFQUNaNE0sRUFBSzlCLFdBQUwsRUFFSixDQU1BLFNBQVN1QyxJQUNGWixJQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWpCLEtBQ2hCL1EsRTFCckZpQyxJMEJxRmpDLENBRUosQ0E0RVMsU0FBQXdTLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FhNUcsRUFBZWlGLEdBQ25DLElBQU1qVixFQUFTc1csSUFBYTdFLEVBQWEsRUFBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBSUMsR0FDdkNzRSxFQUFTaUIsRUFBa0JILEVBQVk5VyxHQUFXZ1EsRUFBTywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBSyxFQUFBLEdBQUs4RyxFQUFXLEVBQUlSLEdBQVc3RSxFQUFmLEVBQW5ELEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0U1QixNQUFTLEtBQVR1RSxHQUFlVSxHQUNiLENBQUUvVyxHQUFvQjhWLElBQWVGLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFVLENBQUV2RixHQUFRLEdBQ3JEQSxFQUFPLEVBQUlvRyxFQUlmbkIsRUFBY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU9rQixFQUFNbEIsQ0FBTixDQUM5QixDQWdCUyxTQUFBaUIsRUFBa0JqQixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBY3pKLEVBQWM0SyxHQUNoRCxJQUNHeE4sRUErQkQsT0FoQ0ZxSSxFQUFBLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjUCxFQUFBLElBQ1g5SCxFQTBDVixTQUFrQ3FNLEdBQ2hDLEdBQUtVLEdBQWlDLFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUF0QnJWLEVBQVF5VSxXQUF3QkUsSUFBU2MsRUFHdkQsSUFGQSxJQUFNL0IsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dVLEVBQWpCLEVBRVFWLElBQWFELEVBQVlrQixFQUFNLENBQUEsQ0FBbEIsR0FBNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCalcsR0FBU2lXLEVBQU0sRUFBR25TLEVBQU9wTSxPQUFTLEVBQUcsQ0FBRTRKLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRaUUsTUFBdEMsR0FDakQwUSxFQUFBYyxFQUFZLEVBQUVkLEVBQU8sRUFBRUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBSTNCLE9BQUFBLENBQ1QsRUFwRDJDQSxNQUV4QkEsSUFDRnpKLEVBQUF5SixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUEsRUFBQXJNLEVBQ0F3TixFQUFBLENBQUEsR0FHUm5CLEVBQU8sR0FBWUksRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVBKLEVBS1hBLEVBSkdNLEdBQWF2VyxDQUFBQSxHQUFTLEVBQUdpVyxFQUFNekosJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU0sQ0FBQSxDQUFmLEdBQXlCeE0sQ0FBQUEsR0FBU3FXLEVBQVU3SixFQUFNeScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLEVBQU0sQ0FBQSxDQUF0QixFQUd4RFMsRUFDSVUsRUFDSG5CLEVBQU8sRUFBSSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBSUssRUFBYTNFLEdBQVdBLEdBQVkyRSxFQUNuREwsRUFDTTNVLEVBQVFpRSxPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDWDBRLEVBQU8sRUFBSUksRUFBVyxFQUV0QixDQUFBLEVBVEY1RSxFQUFTNEYsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVFwQixDQUFBLENBQWpCLEVBYUptQixHQUFZbkIsSUFBU3pKLElBQ3hCeUosRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQU94RSxFQUFTNEYsRUFBUTdLLENBQUEsR0FBV3lKLEVBQU96SixFQUFPLEdBQUssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01BSW5EeUosRUFBQSxDQUFBLEVBR0ZBLENBQ1QsQ0E2QkEsU0FBU2tCLEVBQU12TicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDYixPQUFPOE0sR0FBVzlNLEVBQVEwTSxHQUFlQSxHQUFjLEVBQUkxTSxDQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInN0QsQ0FVQSxTQUFTd0wsSUFHQyxJQUZSLElBQUl0ZCxFQUFNd2UsR0FBZTVFLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEdBQWdCZ0YsR0FBVUgsRUFBWSxFQUFJNUUsR0FFM0Q4RSxHQUFtQixFQUFSMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLEtBQ1osR0FBQWlkLEVBQVl1QixFQUFhLEVBQUcsQ0FBQSxDQUE1QixJQUF1Q3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFZamQsRUFBSyxDQUFBLENBQUwsRUFBYyxDQUNwRUEsQ0FBQSxHQUNBLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NGLENBR0YsT0FBT3VJLEVBQU92SSxFQUFLLEVBQUd3ZSxFQUFhLENBQXJCLENBQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoQixDQVNBLFNBQVM3RSxFQUFTRixHQUNoQixPQUFPbFIsRUFBT3FSLEVBQVMsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUlILEVBQU9JLEVBQVVKLEVBQU0sRUFBRzhFLEVBQ3ZELENBU0EsU0FBU2dCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRek4sR0FDZixPQUFPOEgsSUFDSHBTLEVBQUtzSyxFQUFPeU0sQ0FBUCxFQUNMNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLElBQWtCNFcsR0FBVHpNLEVBQW9CME0sRUFBYSxFQUFJMU0sR0FBVStILENBQS8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQyxDQUNmLENBbUJBLFNBQVMyRixFQUFVMU4sR0FDWkEsSUFBVW1OLElBQ0RDLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBRCxFQUNBQSxFQUFBbk4sRUFFaEIsQ0FnQkEsU0FBUzhILElBQ1AsTUFBTyxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRXZZLEdBQWFtSSxFQUFRbEUsS0FBckIsR0FBZ0NrRSxFQUFRNEksWUFDbkQsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT0EsU0FBU3lLLElBQ0E3USxPQUFBQSxFQUFPK0IsTUFBTUMsR0FBSSxDQUFFOU8sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVFDLEdBQTNCNk0sR0FBNEMsQ0FBQyxDQUFFeEMsRUFBUWlXLGlCQUNoRSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTyxNQUFBLENBQ0xwTCxNQTVTRixXQUNPNkUsRUFBQSxFQUNMOU0sRUFBSSxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWpCLEVBQWVELEUxQnhEYyxNMEJ3RDRCZ08sQ0FBL0QsRUFDQTlNLEVBQUlmLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FlOFQsQ0FBbkIsQ0FDRixFQXlTRU8sR0FqUU8sU0FBSUMsRUFBMEJDLEVBQTBCcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLEdBQzFELElBRUd1SSxFQUZEK0ssS0FJUSxDQUFBLEdBRlAvSyxFQUFRdU4sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRFJsQixFQWlDVixTQUFnQndCLEdBQ2QsSUFBSTdOLEVBQVFtTixFQUVQLENBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQ09ZLEVBQVcxWCxFQURsQi9HLEVBQVV1ZSxDQUFWLEdBQ0dHLEVBQTBCSCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUXRJLE1BQU8saUJBQWYsR0FBc0MsR0FBNUR3SSxFQUFKQyxFQUFBLEdBQWUzWCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZjJYLEVBQUEsR0FFYSxNQUFkRCxHQUFtQyxNQUFkQSxFQUNoQi9OLEVBQUFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ04sRUFBa0JILEdBQVksRUFBS1ksR0FBQUEsR0FBYyxDQUFDMVgsR0FBVSxJQUFNOCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLENBQWxFLEVBQ2dCLE1BQWRZLEVBQ1YvTixFQUFRM0osRUFBU3dSLEVBQVMsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUN4UixDQUFELEVBQVkyVyxFQUFTLENBQUEsR0FDdkIsTUFBZGUsSUFDVi9OLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRa04sRUFBUyxDQUFBLEtBR25CbE4sRUFBUThNLEVBQVNlLEVBQVVwWCxFQUFPbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidYLEVBQVMsRUFBR3BCLENBQVosQ0FDcEMsQ0FFTyxPQUFBek0sQ0FDVCxFQW5EeUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNk4sT0FHQUMsR0FBa0I5TixJQUFVbU4sS0FDL0NPLEVBQVUxTixDQUFWLEVBQ0E0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00sRUFBS1IsS0FBTUMsRUFBTXJNLEVBQU9vTixFQUFXM1YsQ0FBbkMsRUFHTixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3UEV3VyxPQTlPRixTQUFpQjNDLEVBQXFCdEIsRUFBbUJrRSxFQUFnQnpXLEdBQ3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRTJJLEVBQVc0SyxPQUFPaUQsT0FBUTNDLEVBQWF0QixFQUFVa0UsRUFBTSxXQUNyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QsSUFBTWxPLEVBQVF1TixFQUFNWCxFQUFLL0UsUUFBU2lFLEVBQWQsQ0FBQSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxFQUNwQjRCLEVBQVViLEVBQVVuWCxFQUFLc0ssRUFBT3lNLENBQVosRUFBeUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInek0sQ0FBN0MsRUFDQXZJLEdBQVlBLEVBQVosQ0FDQSxDQUpGMkksQ0FLRixFQXlPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0U0TSxRQUFBQSxFQUNBRSxRQUFBQSxFQUNBRCxZQUFBQSxFQUNBekIsT0FBQUEsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0FrQyxTQUFBQSxFQUNBUyxTQS9CRixTQUFtQjlILEdBQ2pCLE9BQU9BLEVBQU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInK0csRUFBWUQsQ0FDNUIsRUE4QkV0RixRQUFBQSxFQUNBNEYsT0FBQUEsRUFDQVcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09BeERGLFNBQWlCOUMsR0FFZixPQURNdEUsRUFBVTRGLEVBQUsvRSxRQUFTeUQsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWQsRUFDVHlCLEVBQVV0VyxFQUFPdVEsRUFBUyxFQUFHeUYsQ0FBbkIsRUFBZ0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInekYsQ0FDbkQsRUFzREVjLFNBQUFBLEVBQ0FpRCxPQUFBQSxDQWRLLENBZ0JULFNDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzNWZ0IsU0FBUTdRLEVBQWdCa0csRUFBd0IxSSxHQUN4RCxJQXdCRjJXLEVBS0FDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQTdCRTNXLEVBQVFzQyxFQUFnQkMsR0FDdEJJLEVBQW1CM0MsRUFBbkIyQyxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSTlMLEVBQWVtSixFQUFmbkosS0FBTWlNLEVBQVM5QyxFQUFUOEMsS0FDVmhLLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FrQmlILEVBQWxCakgsUUFBUytQLEVBQVM5SSxFQUFUOEksS0FDVHlCLEVBQXlCNycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEVBQXpCNkIsU0FBVTJGLEVBQWV4SCxFQUFmd0gsV0FDRjJHLEVBQXVCdE0sRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQS9CbUUsT0FBcUJsRSxFQUFVRCxFQUFWQyxNQUt6QnNNLEVBQVVELEVBS1ZsSSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBT3BFLEVBQVNvRSxLQUtoQkMsRUFBT3JFLEVBQVNxRSxLQWVkRixFQUFzQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLNUMsU0FBUzdELElBaUJQLElBQU1rTSxFQUFVL1csRUFBUTBPLE9BRW5CcUksQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLEdBQWVwSSxHQUFRQyxJQXVENUJrSSxFQUFVRCxHQUFldmIsRUFBUSxNQUFPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZDLEVBQVEyVixNQUF2QixFQUN6QkMsRUFBVXFJLEVBQWEsQ0FBQSxHQUN2QnBJLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFVb0ksRUFBYSxDQUFBLEdBQ2JMLEVBQUEsQ0FBQSxFQUVWdGQsRUFBUXlkLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFTLENBQUVuSSxFQUFNQyxFQUF6QixFQUNFaUksR0FBZXBkLEVBQVFxZCxFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RNLENBQVQsR0F6RHBCbUUsR0FBUUMsSUFDWGhVLEdBQVE4VCxFQUFRLENBQUVDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFBQSxFQUFNQyxLQUFBQSxDQUFSLENBQWhCLEVBQ1MvUyxHQUFBaWIsRUFBU0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVUsR0FBSyxNQUF4QixFQUNUNWQsRUFBVTJkLEVBQVdGLEVBQXFCL1AsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21CN0csS0FBQUEsRUFBUTRNLFNBQXJFLEVBRUttSyxJQTRCUG5VLEVBQUksQ0FBRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxQixFQUFlRSxHQUFhTSxFQUFlSyxFM0J0SGQsTTJCc0h5RDZCLENBQTVGLEVBQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOU0sRUFBTThYLEVBQU0sUUFBU2hZLEVBQU9zZixFQUFJLEdBQUosQ0FBNUIsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FwZixFQUFNNlgsRUFBTSxRQUFTL1gsRUFBT3NmLEVBQUksR0FBSixDQUE1QixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic1Qld0UyxFQUFBLEVBQ1B4SSxFQUFjLENBQUV1VCxFQUFNQyxHQUFRbEosR0FBZTgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxFQUFNbEgsRUFBbkQsRUFDTVAsRTNCM0cwQixpQjJCMkdKNEwsRUFBTUMsQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzVCLElBOUJWaE0sRUFBSWpCLEVBQWUrUSxDQUFuQixDQUNGLENBS0EsU0FBU0EsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ0MxUixFQUFBLEVBQ0Y2SixFQUFBLENBQ1IsQ0E2QkEsU0FBUzdKLElBQ1BmLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFNZSxRQUFOLEVBQ0ExRCxFQUFhd1osRUFBU0YsQ0FBdEIsRUFFS0QsR0FDSHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFRc2EsRUFBYyxDQUFFbEksRUFBTUMsR0FBU2tJLENBQXZDLEVBQ0FuSSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBT0MsRUFBTyxNQUVkNVQsRUFBaUIsQ0FBRTJULEVBQU1DLEdBQVF2SSxFQUFqQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FFSixDQWdCQSxTQUFTNlAsRUFBSUMsR0FDQWpHLEVBQUFnRyxHQUFJQyxFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFBLENBQWIsQ0FDYixDQXVCQSxTQUFTYSxFQUFhckksR0FLcEIsT0FBT2xTLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUpPLGtCQUFtQjFELEVBQVFrZSxNQUEzQixLQUFzQ3RJLEVBQU81VixFQUFRNFYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQU81VixFQUFRNlYsTUFBcEUsa0lBRUc1TyxFQUFRa1gsV0NyTFQseUZEbUxoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsT0FLRixDQUtBLFNBQVN0VCxJQUNQLElBRVE4UixFQUNBeUIsRUFDQUMsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDLEVBTEgxSSxHQUFRQyxJQUNMdEcsRUFBWTlGLEVBQU84RixNQUNuQm9OLEVBQVknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneEYsRUFBV3NGLFFBQXZCLEVBQ0EyQixFQUFZakgsRUFBV29GLFFBQXZCLEVBQ0E4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBd0IsQ0FBQSxFQUFaMUIsR0FBa0JwTixFQUFRb04sRUFBWTVNLEVBQUt3TycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBT3hPLEVBQUs2RixLQUNuRTBJLEVBQXdCLENBQUEsRUFBWkYsR0FBMEJBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFSN08sRUFBb0JRLEVBQUt5TyxNQUFRek8sRUFBSzhGLEtBRTFFRCxFQUFLNkksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NBQVc5QixFQUFZLEVBQzVCOUcsRUFBSzRJLFNBQVdMLEVBQVksRUFFZC9iLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBdVQsRUFBTTlJLEdBQVl1UixDQUFsQixFQUNBaGMsRUFBQXdULEVBQU0vSSxHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWXdSLENBQWxCLEVBRWR0VSxFM0I5TGtDLGlCMkI4TE40TCxFQUFNQyxFQUFNOEcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVd5QixDQUFuRCxFQUVKLENBRU8sTUFBQSxDQUNMekksT0FBQUEsRUFDQTdELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFBQSxFQUNBN0osUUFBQUEsRUFDQTRDLE9BQUFBLENBSkssQ0FNVCxXRXRMZ0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQVVwQixFQUFnQmtHLEVBQXdCMUksR0FDaEUsSUFTSXlYLEVBS0FDLEVBZHVCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25WLEVBQUFBLEVBQWdCQyxHQUFuQ0ksSUFBQUEsR0FBSTlMLElBQUFBLEtBQU1pTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFBQUEsS0FDWkUsRUFBV0QsR0FBaUJoRCxFQUFRaUQsU0FBVVQsRUFBTzBULEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFHcGYsS0FBTTBMLEVBQVEsR0FBeEJBLEVBaUhwRCxTQUEyQmlCLEdBQ25CLElBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FFb0wsRUFBUXRFLEVBQVJzRSxJQUNSQSxHQUFPblQsRUFBT21ULEVBQUssUUFBbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLElBQVBwTCxFQUFoQyxHQUFBLEVBQ0FWLEU3Qm5Jb0MsbUI2Qm1JTlUsQ0FBOUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQ0YsQ0FySGtDLEVBQzFCVyxFQUFhbkIsRUFBYm1CLFNBQ0FtRyxFQUF5QzdCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUF6QzZCLFNBQXNCNUIsS0FBbUJELEVBQS9CNkIsVUFBWTVCLEtBQU1tRyxJQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsT0FDNUI2SSxFQUFhM1gsRUFBYjJYLFNBZ0JKQyxFQUF1QixVQUFiRCxFQTYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2QsU0FBU0UsSUFDRnpULEtBQWNzRSxFQUFXa0IsT0FBTytHLGFBQzFCMU4sRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ExTSxNQUFPLENBQUV5SixFQUFROFgsYUFBakIsRUFDVEosRUFBVUQsRUFBVUcsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVUsQ0FBQSxFQUN2QmhVLEVBQUEsRUFDUGIsRUFBTWIsRUFBTixFQUVKLENBT1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFNBQUEyQixFQUFPa1UsR0FDZEgsRUFBVSxDQUFDLEVBREdHLEVBQW9CLEtBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBQXBCQSxFQUFPLENBQUEsRUFDUkEsR0FDTm5VLEVBQUEsRUFFQVEsTUFDTG5CLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFTWSxNQUFULEVBQ0FkLEVBQU1aLEVBQU4sRUFFSixDQU1BLFNBQVM2VixJQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUosSUFDTEgsR0FBV0MsRUFBVTdULEVBQU8sQ0FBQSxDQUFQLEVBQWlCZ1UsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RDLEVBRUosQ0FLQSxTQUFTalUsSUFDRmtMLElBQ1VqVyxFQUFBaVcsRUFBUXhILCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFjLENBQUVzUSxDQUF4QixFQUNieGMsRUFBYzBULEVBQVFqSixHQUFZN0YsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVE4SSxLQUFNOE8sRUFBVSxPQUFTLFFBQW5FLEVBRUosQ0FrQkEsU0FBUzdOLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRekIsR0FDVEQsRUFBUUssRUFBV2tCLE9BQU9DLE1BQU92QixDQUF6QkksRUFDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6RixFQUFBaUIsSUFBS21FLEdBQVMsQ0FBQ3JNLEVBQWNxTSxFQUFNRyxNQUFPNkMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQTNCLEdBQXdEckwsRUFBUWlELFFBQS9FLENBQ1gsQ0FFTyxNQUFBLENBQ0w0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0gsTUExR0YsV0FDTzhNLElBWUEzWCxFQUFRaVksY0FDTG5oQixFQUFBNlIsRUFBTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsd0JBQXlCLFNBQUt4USxHQUN4Q3NmLEVBQXFCLGVBQVh0ZixFQUFFYixLQUNEMGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixFQUFBLENBQ1gsQ0FISSxFQU1IaFksRUFBUWtZLGNBQ0xwaEIsRUFBQTZSLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FNLG1CQUFvQixTQUFLeFEsR0FDbkN1ZixFQUFxQixZQUFYdmYsRUFBRWIsS0FDRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwZ0IsRUFBQSxDQUNYLENBSEksRUFNSGxKLEdBQ0doWSxFQUFBZ1ksRUFBUSxRQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyxXQUNYOEksRUFBQUMsRUFBQSxFQUFTaFUsRUFBTyxDQUFBLENBQVAsQ0FDbkIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBRkksRUFLUmpCLEVBQUksQ0FBRXpCLEVBQVlXLEdBQWNKLEdBQWlCdUIsRUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnQixNQUExRCxFQUNBckIsRUFBSXpCLEVBQVk0SSxDQUFoQixFQS9CRStFLEdBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMVQsRUFBYzBULEVBQVFwSixHQUFlNkUsRUFBU0MsTUFBTWxILEVBQXRDLEVBQ3hCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NVLEdBQVdDLEVBQVgsRUFDT2pVLEVBQUEsRUFFWCxFQW9HRTVDLFFBQVNpQyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU2EsT0FDbEIrVCxLQUFBQSxFQUNBaFUsTUFBQUEsRUFDQU8sU0FBQUEsQ0FMSywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FPVCxRQ3RKZ0IsU0FBTzVCLEVBQWdCa0csRUFBd0IxSSxHQUM3RCxJQUFRNEMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQU9MLEVBQWdCQyxDQUFoQixFQUFQSSxHQWlCUixTQUFTdVYsRUFBT0EsR0FDZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid6UCxFQUFXa0IsT0FBT3RSLFFBQVMsU0FBUytQLEdBQ2xDLElBQU1tSSxFQUFNdFcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQXlCbU8sRUFBTWlCLFdBQWFqQixFQUFNRyxNQUFPLEtBQWhDLEVBRWhDZ0ksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQU9BLEVBQUk0SCxLQUNORCxFQUFBQSxFQUFPM0gsRUFBS25JLENBQVo4UCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVixDQU5GelAsQ0FPRixDQVNTLFNBQUFvRyxFQUFRcUosRUFBZ0IzSCxFQUF1Qm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSSxHQUN0REEsRUFBTTNNLE1BQU8sYUFBY3ljLEVBQXdDM0gsK0JBQUFBLEVBQUk0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0gsSUFBVyxLQUFBLEdBQUksQ0FBQSxDQUF0RixFQUNTdmMsR0FBQTJVLEVBQUsySCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBUSxPQUFTLEVBQXRCLENBQ1gsQ0FFTyxNQUFBLENBQ0x0TixNQW5DRixXQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTzdLLEVBQVFtWSxRQUNYdlYsRUFBSVIsR0FBdUJ4TCxFQUFPa1ksRUFBUSxDQUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFmLENBQTNCLEVBQ0lsTSxFQUFBLENBQUUxQixFQUFlUyxFQUFlRCxHQUFpQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic5SyxFQUFPdWhCLEVBQU8sQ0FBQSxDQUFQLENBQXhELEVBRVIsRUErQkVuWCxRQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU3BLLEVBQU91aEIsRUFBTyxDQUFBLENBQVAsQ0FGWCxDQUlULFNDeENnQixTQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzNWLEVBQWdCa0csRUFBd0IxSSxHQUM5RCxJQVNJaUQsRUFLQWxELEVBZGlCd0MsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUFBLEVBQWdCQyxHQUE3QkksSUFBQUEsR0FBSUcsSUFBQUEsS0FDS21CLEVBQVUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMUIsRUFBbkIrQixNQUFTTCxJQUNUZ1IsRUFBU3hNLEVBQVR3TSxLQUNBZCxFQUFvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RjLEVBQXBEZCxZQUFhRixFQUF1Q2dCLEVBQXZDaEIsU0FBVVcsRUFBNkJLLEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic3QkwsY0FBZXJCLEVBQWMwQixFQUFkMUIsVUFDeEM2QixFQUFVN1MsRUFBT2dDLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFJMEQsRUFBWDFGLEVBZVo2VixFQUFXLEVBbUJmLFNBQVM5QixFQUNQM0MsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0QixFQUNBa0UsRUFDQThCLEVBQ0FDLEdBRUEsSUFNUXpLLEVBTkY1QyxFQUFPaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLEVBQWIsRUFVTW9FLEdBUkFDLEVBQUEsRUFFRGpDLENBQUFBLEdBQVluQixHQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYVIsRUFBZixJQUNQVixFQUFTekwsRUFBV3VLLE9BQU9iLFdBQTNCLEVBQ0F0RSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUzlPLEdBQU00VSxDQUFBLEVBQWdCTyxFQUFPaFcsR0FBT0UsRUFBS3VWLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBQWdCTyxJQUFVLEVBQ3BFUCxFQUFBc0IsRUFBS3pCLFdBQVkvSyxFQUFXd0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFdBQVd3RyxPQUFROUMsRUFBY08sQ0FBNUN6TCxDQUFqQixFQUF3RW9GLEdBR3JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hQLEdBQW9CNE0sRUFBTTBJLEVBQWEsQ0FBdkMsR0FFUnlFLEVBQUEsRUFDQS9GLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFBa0csRUFBYSxFQUFJbEcsR0FBWXBVLEdBQUtHLEVBQUt1VixFQUFjMUksR0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEV2QyxJQU9ELEdEeURnQixFQUM3Qm5MLEVBQUF1WSxFQUNBclYsRUFBQUQsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lCc1AsRUFBVW9HLEVBQU85aEIsRUFBT2dOLEVBQVFzSCxFQUFNMEksRUFBYTJFLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFsQyxFQUFpRCxDQUFuRixFQUVYclUsRUFBS3ZPLEVBQUwsRUFDQW9OLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInakIsRUFBTixFQUNBbUIsRUFBUzFNLE1BQVQsQ0FDRixDQUtBLFNBQVNtaUIsSUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1B4VSxFbkYxRmdCLENtRjBGaEIsRUFDQW5FLEdBQVlBLEVBQVosRUFDQWdELEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNaEIsQ0FBTixDQUNGLENBVUEsU0FBUzZCLEVBQVFzSCxFQUFjeU4sRUFBWUosRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWtDOVUsR0FDM0UsSUFBTWlRLEVBQVdVLEVBQWpCLEVBRU1oSixHQURXRixHQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lOLEVBQUt6TixJQXdDaEIwTixFQXhDaUNuVixHQXlDeENvVixFQUFlN1ksRUFBZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic2WSxZQUNZQSxFQUFZRCxHQUFNLEVBQUkzYSxLQUFLNmEsSUFBSyxFQUFJRixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxDQUFqQixHQXpDZGxGLEdBQWEyRSxFQUV6QzdFLEVBQVdFLEVBQVd0SSxDQUF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFFS2lLLEdBQVcsQ0FBRWtELEdBQWUxRCxNQUNuQndELEdDekdhLEdEMkdwQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoYSxFQUFLK00sQ0FBTCxFQ3pIMEIsSUQwSHJCbUwsRUFBQXJDLEVBQVVXLEVBQWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUEsRUFBekIsRUNuSGUsSURtSHFDLENBQUEsRUFBTzlVLEVBQVUsQ0FBQSxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBckUsRUFHZCxDQUtBLFNBQVMwWSxJQUNGeFYsR0FDSEEsRUFBU2EsT0FBVCxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFSixDQUtBLFNBQVNBLElBQ0ZiLEdBQVksQ0FBRUEsRUFBU21CLGFBQ3BCcVUsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsRUFDQUMsRUFBQSxFQUVWLENBY08sTUFBQSxDQUNMN04sTUE1R0YsV0FDRWpJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFJekIsRUFBWXNYLENBQWhCLEVBQ0E3VixFQUFJLENBQUVqQixFQUFlRCxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUJvQyxDQUF0QyxDQUNGLEVBMEdFOUMsUUFBU3lYLEVBQ1RsQyxPQUFBQSxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXpTLE9BQUFBLENBSkssQ0FNVCxPRXhJZ0IsU0FBTXRCLEVBQWdCa0csRUFBd0IxJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ksR0FDNUQsSUFTSStZLEVBS0FDLEVBS0FDLEVBS0FDLEVBS0FDLEVBV0FDLEVBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBNUIsRUFLQW5iLEVBbEQrQmtHLEVBQUFBLEVBQWdCQyxHQUEzQ0ksSUFBQUEsR0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUlHLElBQUFBLEtBQU1qTSxJQUFBQSxLQUFNeUosSUFBQUEsT0FDaEJnRSxFQUFVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy9CLEVBQVYrQixNQUNBMlEsRUFBcUV4TSxFQUFyRXdNLEtBQU01QixFQUErRDVLLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUEvRDRLLE9BQVFwRCxFQUF1RHhILEVBQXZEd0gsV0FBd0IxRixFQUErQjlCLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEzQzZCLFNBQVlDLE1BQWtCc0MsRUFBYXBFLEVBQXRCMlEsTUFBU3ZNLE9BQ3hEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdELEtBQW9CUCxFQUFXUSxXQUEvQkQsUUFBU2lGLElBQUFBLE9BQ1RrRyxFQUErQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjLEVBQS9CZCxZQUFhUyxFQUFrQkssRUFBbEJMLGNBK0JqQnlFLEVBQVcsQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFnQ2YsU0FBUzVKLElBQ0QsSUFBRUQsRUFBU3pQLEVBQVR5UCxLQUNSOEosRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1MsQ0FBRTlKLENBQVgsRUFDQXlKLEVBQWtCLFNBQVR6SixDQUNYLENBVUEsU0FBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrSixFQUFlcmhCLEdBR3RCLElBQ1FzaEIsRUE0UFlwZCxFQUNacWQsRUFoUVNOLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLENBQUEsRUFFVjVCLElBQ0NpQyxFQUFVRSxFQUFjeGhCLEdBNFBaa0UsRUExJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BBbEUsRUFBRWtFLE9BMlBkcWQsRUFBVzFaLEVBQVgwWixPQUVDM2YsR0FBU3NDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidNQUFhNkssR0FBdEIsTUFBbURKLEVBQW5ELEdBQ0E0UyxHQUFZM2YsR0FBU3NDLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRcWQsQ0FBUnJkLEdBOVBNb2QsQ0FBQUEsR0FBYXRoQixFQUFFeWhCLFNBQ3hDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzFKLEVBQVdtRCxTQVdoQnZXLEVBQVMzRSxFQUFHLENBQUEsQ0FBWixHQVZBa0UsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWdCb2QsRUFBVWpQLEVBQVF2UyxPQUNsQ2toQixFQUFnQjVVLEVBQU1DLEdBQUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUU5TyxFQUFRQyxHQUFwQixFQUNBc2pCLEVBQUEsS0FFVm5pQixFQUFBdUYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVEyTCxHQUFxQjZSLEVBQWV2TyxFQUE1QyxFQUNBeFUsRUFBQXVGLEVBQVE0TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FBbUI2UixFQUFheE8sRUFBeEMsRUFDTjRKLEVBQUtwUixPQUFMLEVBQ0F3UCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBT3hQLE9BQVAsRUFDQWlXLEVBQU01aEIsQ0FBTixJQU1SLENBT0EsU0FBUzBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBZTFoQixHQU10QixJQXNHb0JBLEVBQ002aEIsRUFDcEJDLEVBQ0FDLEVBWScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvQi9oQixFQTFIbkJvTSxFQUFNQyxHckZySE8sQ3FGcUhiLElBQ0xELEVBQU1MLEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckZ0SFksQ3FGc0hsQixFQUNBbkIsRWpDdElrQyxNaUNzSWxDLEdBR0c1SyxFQUFFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpQixhQUNBaEIsR0FDSGpFLEVBQUsxQixVQUFXdUYsRUFBMEJxQixFQUFXamlCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLEdBaU56Q21oQixHQUFZOVcsRUFBT2dDLEdBQUkwRCxFQUFYMUYsRXhCcFcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUixFd0JvV3dDLEVBak54RCxFQUVNNlgsRXhCOUljLEl3QjhJQUMsRUFBVW5pQixDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUN4Qm9pQixFQUFjakIsS0FBZUEsRUFBV3pFLE1BRXpDd0YsR0FBV0UsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ2RSLEVBQU01aEIsQ0FBTixFQUdlaWhCLEVBQUEsQ0FBQSxFQUNqQnJXLEVqQ3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSmdDLFVpQ29KaEMsRUFDQWpHLEVBQVMzRSxDQUFULEdBeUdHa0csRUFBSytiLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RjamlCLEVBdkdPQSxFQXdHMUIsRUFBd0JrRyxFQUFLK2IsRUFBV2ppQixFQUFHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFBLENBQWQsQ0FBQSxJQWhCaEJBLEVBdkZRQSxFQXdGRjZoQixFQUFlaGEsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWpDd2EsaUJBQ0ZQLEVBQVF6aUIsR0FBVXdpQixHQUNsQkUsRUFBUUQsR0FBU0QsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVdFLE9BQVMsRUFDckNPLEdBQVVSLEVBQVFELEVBQVdTLE1BQVEsQ0FBQ1QsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQWdCLEdBM0Z4RGIsRUE0Rkc5YSxFQUFLK2IsRUFBV2ppQixFQUFoQixHQUEwQncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaEIsRUFBY3hoQixDQUFBLEVBQU1zaUIsRUFBUVAsR0EzRnpEcGQsRUFBUzNFLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FULEdBR04sQ0FVQSxTQUFTMmhCLEVBQWEzaEIsR0FNcEIsSUF5Q011aUIsRUFDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic5RyxFQUNBM1AsRUFoRERNLEVBQU1DLEdyRnhKUyxDcUZ3SmYsSUFDSEQsRUFBTUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLElyRnhLUSxDcUZ3S2QsRUFDQW5CLEVqQ3ZLa0MsU2lDdUtsQyxHQUdHb1csSUEwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NDdkYsRUFzRVIsU0FBNkI4RyxHQUMzQixPQUFPdEcsRUFBZ0JwVixFQUFBQSxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTTBiLENBQUEsRUFBYTFjLEVBQ3hDSyxFQUFLcWMsQ0FBQSxHQUFlMWEsRUFBUTInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSxZQUFjLEtBQzFDekIsRUFBUzVFLEVBQUFBLEVBQVc1TCxFQUFXdUssT0FBT2xCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxZQUFlL1IsRUFBUTRhLGVBQWlCLEVBRnRDLENBSTVDLEVBM0UwQ0YsRUFtRDFDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQUEwQnZpQixHQUN4QixHQUFLcUssRUFBT2dDLEdBQUkyRCxFQUFYM0YsR0FBcUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQUU4VyxFQUFXLENBQy9CLElBQUFuVixFQUFPbVcsRUFBVW5pQixHQUVsQixHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQWdNLEdBQVFBLEV4QjlRUyxJd0IrUWIsT0FBQWlXLEVBQVdqaUIsQ0FBWCxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUJnTSxDQUU1QixDQUVPLE9BQUEsQ0FDVCxFQS9EZWhNLEVBdkNMQSxJQTBDRjgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTCxFQUFjakUsRUFBUWlFLFFBQVVqRSxFQUFRNmEsYUFFOUMvTixFQUFRLENBQUEsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBQVIsRUFFS29NLEVBQ0hoSixFQUFXcUcsT0FBUTNDLEVBQWEsRUFBRzVULEVBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRd1csSUFBM0MsRUFDVWhVLEVBQU9nQyxHQUFJNEQsRUFBWDVGLEVBQ1YwTixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV2dHLEdBQUloSSxFQUFRbFAsR0FBTTBiLENBQUEsQ0FBZCxFQUE2QixFQUFNelcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVMsSUFBTSxJQUFVQSxFQUFTLElBQU0sR0FBMUYsRUFDVXpCLEVBQU9nQyxHQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSTBELEVBQVgxRixHQUFzQjhXLEdBQVlyVixFQUM1Q2lNLEVBQVdnRyxHQUFJckInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQWUsQ0FBQSxDQUFmLEVBQXdCLElBQU0sR0FBN0MsRUFFQTNFLEVBQVdnRyxHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSWhHLEVBQVd3RyxPQUFROUMsQ0FBbkIsRUFBa0MsQ0FBQSxDQUFqRCxFQUdGOScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHLEVBQVEsQ0FBQSxDQUFSLEVBdkRFaFEsRUFBUzNFLENBQVQsR0FHTW9JLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbEUsRUFBUTJMLEdBQXFCNlIsQ0FBN0IsRUFDQXRaLEVBQUFsRSxFQUFRNEwsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21CNlIsQ0FBM0IsRUFDR1gsRUFBQSxDQUFBLENBQ2IsQ0FRQSxTQUFTMkIsRUFBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiczaUIsR0FDWCxDQUFFcWYsR0FBWTRCLEdBQ2pCdGMsRUFBUzNFLEVBQUcsQ0FBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBWixDQUVKLENBT0EsU0FBUzRoQixFQUFNNWhCLEdBQ0c4Z0IsRUFBQUQsRUFDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBQUE3Z0IsRUFDaEI0Z0IsRUFBZ0IzRSxFQUFoQixDQUNGLENBZ0dTLFNBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBZ0csRUFBV2ppQixFQUE0QjRpQixHQUN2QyxPQUFBQyxFQUFTN2lCLEVBQUc0aUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBQVosRUFBMkJDLEVBQVNDLEVBQWM5aUIsQ0FBQSxFQUFLNGlCLEVBQ2hFLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NBLFNBQVNULEVBQVVuaUIsR0FDakIsT0FBT29GLEdBQVFwRixHQUFNb0YsR0FBUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwZCxFQUFjOWlCLENBQWQsQ0FBQSxDQUMvQixDQVVBLFNBQVM4aUIsRUFBYzlpQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR0FDZCxPQUFBNmdCLElBQWM3Z0IsR0FBSzhnQixHQUFpQkQsQ0FDN0MsQ0FXUyxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQWdDLEVBQVM3aUIsRUFBNEI0aUIsR0FDbkMsT0FBQXBCLEVBQWN4aEIsQ0FBZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBb0JBLEVBQUUraUIsZUFBZ0IsR0FBTS9pQixHQUFhOFEsT0FBQUEsRUFBUzgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUixFQUFhLElBQU0sR0FBNUIsRUFDcEUsQ0FtQ0EsU0FBU3BCLEVBQWN4aEIsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsTUFBc0IsYUFBdEIsT0FBT2dqQixZQUE4QmhqQixhQUFhZ2pCLFVBQzNELENBZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCQSxTQUFTNUIsRUFBU2xoQixHQUNMbWYsRUFBQW5mLENBQ2IsQ0FFTyxNQUFBLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNMd1MsTUEvVEYsV0FDUS9ULEVBQUEwVCxFQUFPeEMsR0FBcUJoUixHQUFNc1UsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWxDLEVBQ0F4VSxFQUFBMFQsRUFBT3ZDLEdBQW1CalIsR0FBTXNVLEVBQWhDLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNBeFUsRUFBQTBULEVBQU96QyxHQUFxQnlSLEVBQWVsTyxFQUEzQyxFQUNOeFUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU0wVCxFQUFPLFFBQVNzUSxFQUFTLENBQUV0UCxRQUFTLENBQUEsQ0FBWCxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBL0IsRUFDTTFVLEVBQUEwVCxFQUFPLFlBQWExTixDQUFwQixFQUNOOEYsRUFBSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBRTFCLEVBQWVTLEdBQWlCK04sQ0FBdEMsQ0FDRixFQXlURTZKLFFBQUFBLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNBNkIsV0FoQkYsV0FDUyxPQUFBakMsQ0FDVCxDQVdPLENBS1QsV2xCeFhnQixTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVTNXLEVBQWdCa0csRUFBd0IxSSxHQUNoRSxJQU9JM0QsRUFLQW1iLEVBWnlCaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWLEVBQUFBLEVBQWdCQyxHQUFyQ0ksSUFBQUEsR0FBSTlMLElBQUFBLEtBQU15SiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBQUEsT0FDVm9JLEVBQVNuRyxFQUFUbUcsS0FDQU0sRUFBWVAsRUFBV1EsVUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZCRCxRQXlCUixTQUFTeUcsSUFDRCxJQUFFMkwsRUFBYXJiLEVBQWJxYixTQUVIQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFDTWhmLEVBQWEsV0FBYmdmLEVBQXdCcGpCLE9BQVMwUSxFQUNwQzdSLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndUYsRUFBUTJQLEdBQWdCc1AsQ0FBeEIsRUFFVixDQUtBLFNBQVN0YSxJQUNQVCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBUWxFLEVBQVEyUCxFQUFoQixDQUNGLENBZUEsU0FBU2pDLElBQ1AsSUFBTXdSLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFZL0QsRUFDUEEsRUFBQSxDQUFBLEVBQ1h2Z0IsRUFBVSxXQUFtQnVnQixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQStELENBQVksQ0FBekMsQ0FDRixDQU9BLFNBQVNELEVBQVduakIsR0FDWHFmLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NDN2MsRUFBTW9SLEdBQWM1VCxNQUViOFEsRUFBU3RFLEVBQUEsRUFDcEJuQyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTzBULEdBQUksR0FBWDFULEVBQ1U3SCxJQUFRc08sRUFBU3JFLEVBQUEsR0FDM0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEMsRUFBTzBULEdBQUksR0FBWDFULEVBR04sQ0FFTyxNQUFBLENBQ0xxSSxNQS9EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsV0FDTzZFLEVBQUEsRUFDTDlNLEVBQUlqQixFQUFlWCxDQUFuQixFQUNBNEIsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUlqQixFQUFlK04sQ0FBbkIsRUFDQTlNLEVBQUl6QixFQUFZNEksQ0FBaEIsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0YsRUEyREUvSSxRQUFBQSxFQUNBdVksUUFsQ0YsU0FBa0JsaEIsR0FDTG1mLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBbmYsQ0FDYixDQTZCTyxDQUtULFdtQi9EZ0IsU0FBVW1LLEVBQWdCa0csRUFBdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCMUksR0FDaEUsSUFBZ0N1QyxFQUFBQSxFQUFnQkMsR0FBeENJLElBQUFBLEdBQUknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxJQUFBQSxJQUFLaE0sSUFBQUEsS0FBTWlNLElBQUFBLEtBQ2pCeVksRUFBb0MsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VBQXJCeGIsRUFBUXliLFNBQ3ZCN2IsRUFBZSxDQUFFd0IsR0FBYVcsR0FLaEMyWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBMkIsR0FnQi9CLFNBQVNoTSxJQUNQeFosRUFBT3dsQixDQUFQLEVBaUJBaFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVdrQixPQUFPdFIsUUFBUyxTQUFTK1AsR0FDbENqTCxHQUE0QmlMLEVBQU1HJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxNQUFPMkQsRUFBekMsRUFBMEQ3VCxRQUFTLFNBQU9rWSxHQUNsRSxJQUFBNEgsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVNwYyxFQUFjd1UsRUFBS3ZFLEVBQUwsRUFDdkIwUCxFQUFTM2YsRUFBY3dVLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFLdEUsRUFBTCxFQUV4QmtNLElBQVE1SCxFQUFJNEgsS0FBT3VELElBQVduTCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBSW1MLFNBQy9CemYsRUFBWThELEVBQVFqSCxRQUFRNmlCLFFBRTVCQSxFQUFZMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoQixHQURaWixFQUFZa1gsRUFBSWhCLGtCQUNnQnRULElBQWtCWixFQUFRLE9BQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWSxFQUFXNUMsQ0FBM0IsRUFFeERvaUIsRUFBUS9pQixLQUFNLENBQUU2WCxFQUFLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25JLEVBQU91VCxFQUE1QixFQUNJcEwsRUFBQTRILEtBQU92YyxHQUFTMlUsRUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBTCxFQUV0QixDQVpGLENBYUEsQ0FkRjlILEdBZEs4UyxFQUNNSyxHQUVUL1knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQUtsRCxDQUFMLEVBQ0FnRCxFQUFJaEQsRUFBUWtjLENBQVosRUFDTUEsSUFKJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0csQ0FNYixDQTRCQSxTQUFTQSxLQUNHSixFQUFBQSxFQUFRemhCLE9BQVEsU0FBUScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnSCxHQUNoQyxJQUFNa0ssRUFBV25MLEVBQVFxUSxVQUFjclEsRUFBUStiLGNBQWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixHQUFNLEdBQU0sRUFDcEUsTUFBQTlhLENBQUFBLEVBQU0sR0FBSWdLLFNBQVV6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ksRUFBTzhGLE1BQU82QyxDQUFsQyxHQUErQzZRLEVBQU0vYSxDQUFBLENBQzVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUhRLEdBS0Y3SyxRQUFVME0sRUFBS2xELEVBQ3pCLENBT0EsU0FBU29jLEVBQU0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL2EsR0FDUCxJQUFFdVAsRUFBUXZQLEVBQVYsR0FFSTlILEVBQUE4SCxFQUFNLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FJdUgsTUFBT2IsRUFBakIsRUFDVjdRLEVBQU0wWixFQUFLLGFBQWM1WixFQUFPcScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsQixFQUFRaGIsQ0FBUixDQUFoQyxFQUVBN0YsRUFBY29WLEVBQUssTUFBT3hVLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFjd1UsRUFBS3ZFLEVBQUwsQ0FBeEMsRUFDQTdRLEVBQWNvVixFQUFLLFNBQVV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1UsRUFBY3dVLEVBQUt0RSxFQUFMLENBQTNDLEVBQ0FsUixFQUFpQndWLEVBQUt2RScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBdEIsRUFDQWpSLEVBQWlCd1YsRUFBS3RFLEVBQXRCLENBQ0YsQ0FRUyxTQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQStQLEVBQVFoYixFQUFxQjlJLEdBQzlCLElBQUVxWSxFQUFldlAsRUFBakIsR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09vSCxFQUFVcEgsRUFBakIsR0FFTzNELEVBQUErSyxFQUFNRyxNQUFPYixFQUFiLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUVHLFVBQVh4UCxFQUFFYixPQUNMaUYsRUFBUTBFLEVBQU0sRUFBZCxFQUNBcEYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEdBQVMyVSxFQUFLLEVBQWQsRUFDTXpOLEVBQUFYLEdBQXVCb08sRUFBS25JLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0E1QixFQUNOdEYsRUFBTW5CLEVBQU4sR0FHRjRaLEdBQWdCSyxFQUFoQixDQUNGLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUtBLFNBQVNBLElBQ1BILEVBQVF0bEIsUUFBVTRsQixFQUFNTixFQUFRM0gsTUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVIsQ0FBTixDQUNwQixDQUVPLE1BQUEsQ0FDTGxKLE1BekdGLFdBQ083SyxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3liLFdBQ04vTCxFQUFBLEVBQ0w5TSxFQUFJbEIsRUFBZWdPLENBQW5CLEVBRUosRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBcUdFMU8sUUFBU3BLLEVBQU9WLEVBQU93bEIsQ0FBUCxFQUNoQkksTUFBQUEsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSEssQ0FLVCxhQzdGZ0IsU0FBWXRaLEVBQWdCa0csRUFBd0IxSSxHQUM1RCxJQWVGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21PLEVBS0ErTixFQXBCRWpjLEVBQVFzQyxFQUFnQkMsR0FDdEJJLEVBQW1CM0MsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQW5CMkMsR0FBSUcsRUFBZTlDLEVBQWY4QyxLQUFNak0sRUFBU21KLEVBQVRuSiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FDVjhTLEVBQWlDbEIsRUFBakNrQixPQUFRVyxFQUF5QjdCLEVBQXpCNkIsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1UyRixFQUFleEgsRUFBZndILFdBQ2xCRSxFQUEyQkYsRUFBM0JFLFNBQVVxRyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUJ2RyxFQUFqQnVHLFNBQVVQLEVBQU9oRyxFQUFQZ0csR0FDcEJqTixFQUFZUCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBV1EsVUFBdkJELFFBQ1k0TixFQUFnQnRNLEVBQTVCeEIsV0FLRm5RLEVBQTBCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQWlDaEMsU0FBU29JLElBQ0ZtTixJQUNINVIsRUFBUXNhLEVBQWN4Z0IsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic4WCxFQUFLNVUsUUFBWixFQUF5QjRVLENBQS9DLEVBQ0E3USxFQUFhNlEsRUFBTSsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTixDQUFuQixFQUNBaG1CLEVBQU8wQyxDQUFQLEVBQ091VixFQUFBLE1BR1RsTyxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTWUsUUFBTixDQUNGLENBK0NBLFNBQVM4WixFQUFTN0ssR0FDWmlHLEVBQUtqRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFBQUEsRUFBUyxDQUFBLENBQWQsQ0FDTixDQVVTLFNBQUFxTCxFQUFXckwsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWM5WCxHQUMxQixJQUFFL0IsRUFBV3dDLEVBQVh4QyxPQUNGdUUsRUFBTW9SLEdBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FjNVQsR0FDcEJna0IsRUFBTUMsRUFBWixFQUVJQyxFQUFXLENBQUEsRUFZVEMsRycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBVkQzaEIsSUFBUXNPLEVBQVNyRSxHQUFhLENBQUEsRUFBT3VYLENBQTdCLEVBQ1gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRSxFQUFXLEVBQUVwTSxFQUFPN1osRUFDVnVFLElBQVFzTyxFQUFTdEUsR0FBWSxDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSxFQUFPd1gsQ0FBNUIsRUFDTEUsR0FBQSxFQUFFcE0sRUFBTzdaLEdBQVdBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUNmLFNBQVJ1RSxFQUNDMGhCLEVBQUEsRUFDTyxRQUFSMWhCLElBQ1YwaEIsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVdqbUIsRUFBUyxHQUdUd0MsRUFBT3lqQixJQUVmQyxJQUNIeGdCLEdBQU93Z0IsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUsxQyxNQUFaLEVBQ0ExRCxFQUFBLElBQVNtRyxDQUFULEVBQ0F2ZixFQUFTMycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFLEVBQUcsQ0FBQSxDQUFaLEVBRUosQ0FLQSxTQUFTaWtCLElBQ0EsT0FBQXBjLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFRdWMscUJBQXVCdmMsRUFBUTRNLFNBQ2hELENBU0EsU0FBUy9DLEVBQU92QixHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDUCxPQUFBMVAsRUFBT3NYLEVBQVc2RixPQUFRek4sQ0FBbkIsRUFDaEIsQ0FLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsU0FBUzFFLElBQ1AsSUFXVWdXLEVBWEpqTCxFQUFPOUUsRUFBTzRNLEVBQVUsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsQ0FBQSxDQUFqQixFQUNQek0sRUFBT0gsRUFBTzRNLEdBQUEsRUFFZjlILElBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VIclIsRUFEUXNjLEVBQVdqTCxFQUFYaUwsT0FDYXRTLEVBQXJCLEVBQ0F0TSxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBaUI0ZSxFQUFRaFUsRUFBekIsRUFDY3hLLEVBQUF3ZSxFQUFRcFUsRUFBVyxDQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRyxDQUF0QixHQUdYd0UsSUFFSDdRLEVBRFF5Z0IsRUFBVzVQLEVBQVg0UCxPQUNVJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RTLEVBQWxCLEVBQ2NsTSxFQUFBd2UsRUFBUWhVLEdBQWUsQ0FBQSxDQUF2QixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQXhLLEVBQUF3ZSxFQUFRcFUsRUFBVyxFQUFuQixHQUdoQnpDLEVuQ2pQb0MscUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbUNpUEosQ0FBRW9MLEtBQUFBLEVBQU12VixNQUFBQSxDQUFSLEVBQWlCK1YsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ00zRSxDQUF2RCxDQUNGLENBRU8sTUFBQSxDQUNMcFIsTUFBQUEsRUFDQWlTLE1BNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKRixTQUFTQSxJQUNDN0osRUFBQSxFQUNSNEIsRUFBSSxDQUFFakIsRUFBZUQsRW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xGYyxNbUNrRjRCbUosQ0FBL0QsRUFFQSxJQUFNa00sRUFBVS9XLEVBQVErSSxXJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FHeEIsR0FGQThOLEdBQWVoYixHQUFTZ2IsRUFBYUUsRUFBVSxHQUFLLE1BQTVCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUVuQkEsRUFBVSxDQUNiblUsRUFBSSxDQUFFekIsRUFBWVcsR0FBY0MsR0FBa0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNkIsQ0FBbEQsRUF5QkksSUFBRXhOLEVBQVdvTSxFQUFYcE0sT0FDQTJDLEVBQTJCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lILEVBQTNCakgsUUFBUytQLEVBQWtCOUksRUFBbEI4SSxLQUFNdUgsRUFBWXJRLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFacVEsUUFDakJuUyxFQUFNa1MsSUFBYUYsRUFBVzRELE9BQVcsRUFBQSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSTFWLEdBQU1oSSxFQUFTaWEsQ0FBVCxFQUl6RGxYLEVBRkFnVixFQUFPMEksR0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V2YixFQUFRLEtBQU12QyxFQUFRZ1EsV0FBWXdCLEVBQVNDLE1BQU1nRixhQUF6QycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFFWjBNLEVBQXdCalYsR0FBeEIsS0FBK0NtVixHQUFqRSxFQUNjaGhCLEVBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInK1MsRUFBTTVJLEVBQU0sU0FBWixFQUNBbkssRUFBQStTLEVBQU10SSxHQUFZaUQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQUswVCxNQUF2QixFQUNkcGhCLEVBQWMrUyxFQUFNbkksR0FBa0JvVyxFQUFtQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyWCxJQUFBQSxHQUFNLFdBQWEsRUFBNUUsRUFFQSxJQUFBLElBQVV3UCxFQUFJLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFHQSxFQUFJclcsRUFBS3FXLENBQU0sR0FBQSxDQUM5QixJQUFNa0ksRUFBV25oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBUSxLQUFNLEtBQU02UyxDQUFwQixFQUNYeUwsRUFBV3RlLEVBQVEsU0FBVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FBRW9oQixNQUFPM2pCLEVBQVFrWCxLQUFNM1ksS0FBTSxRQUE3QixFQUF5Q20nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbEIsQ0FBbkQsRUFDbkJqVCxFQUFXSSxFQUFPb0csTUFBT3VFLENBQWQsRUFBa0I3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ssSUFBSyxTQUFBckIsR0FBQSxPQUFTQSxFQUFNRyxNQUFNbEYsRUFBckIsQ0FBdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLEVBQ1hxWixFQUFXLENBQUV2TSxFQUFTLEdBQWUsRUFBVkMsRUFBY3ZILEVBQUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOFQsTUFBUTlULEVBQUtnQixPQUVqRWhULEVBQU04aUIsRUFBUSxRQUFTaGpCLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FPa2tCLEVBQVN2RyxDQUFULENBQTlCLEVBRUt2VSxFQUFRNmMsb0JBQ1gvbEIsRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU04aUIsRUFBUSxVQUFXaGpCLEVBQU8wa0IsRUFBVy9HLENBQVgsQ0FBaEMsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInR1luWixFQUFBcWhCLEVBQUlsWCxFQUFNLGNBQVYsRUFDQW5LLEVBQUF3ZSxFQUFRJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JVLEVBQU0sS0FBZCxFQUNkbkssRUFBY3dlLEVBQVFsVSxHQUFlOEQsRUFBUzNHLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLQUFNLEdBQWYsQ0FBckMsRUFDQXpILEVBQWN3ZSxFQUFRL1QsR0FBWTVHLEdBQVEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMGQsRUFBTXBJLEVBQUksQ0FBbEIsQ0FBbEMsRUFDY25aLEVBQUF3ZSxFQUFRcFUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQVcsQ0FBRyxDQUF0QixFQUVkNU0sRUFBTUQsS0FBTSxDQUFFOGpCLEdBQUFBLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFJN0MsT0FBQUEsRUFBUTNKLEtBQU1zRSxDQUFwQixDQUFaLENBQ0YsQ0FyRFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInM1EsRUFBQSxFQUNEYixFbkN0RzRCLHFCbUNzR0YsQ0FBRW9MLEtBQUFBLEVBQU12JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YsTUFBQUEsQ0FBUixFQUFpQmlSLEVBQU9ySCxFQUFPOEYsS0FBUDlGLENBQWxELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUNSLENBQ0YsRUFnSkV4QixRQUFBQSxFQUNBNkksTUFBQUEsRUFDQWpHLE9BQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxDQUxLLENBT1QsT2xCcE9nQixTQUFNcEIsRUFBZ0JrRyxFQUF3QjFJLEdBQ3REJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUFFNEksRUFBNkI1SSxFQUE3QjRJLGFBQWNJLEVBQWVoSixFQUFmZ0osV0FLaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCcEosRUFBaUMsR0FLdkMsU0FBU2lMLElBbURULElBQ1E1SyxFQUNFMkMsRUFwRFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSixFQUFPaUgsUUFBUW5SLFFBQVMsU0FBVStELEdBQ3pCQSxFQUFPeWdCLFdBQ050JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2EsRUFBQUEsRUFBUW5HLEVBQU9zTixNQUFmbkgsRUFDQXVhLEVBQUExZ0IsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTixPQUFRbkgsQ0FBZixFQUVSLENBTEZBLEVBT0tvRyxJQTRDQzNJLEVBQVFzQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZ0JDLElBQ3RCSSxFQUFPM0MsRUFBUDJDLElBRUp2QixHQUFheVosQ0FBakIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQ0FsWSxFQUFJUCxHQUFxQmlaLENBQXpCLEVBQ0ExWSxFQUFJLENBQUUxQixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBZVMsR0FBaUJpQyxDQUF0QyxFQUVBaEUsRUFBT2pILEtBQU1zSCxDQUFiLEVBQ00nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQUFBOEMsS0FBTWQsR0FBMEJPLEVBQU9pSCxPQUF2QyxFQWpEUixDQUtBLFNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTekksSUFDUHBCLEVBQU90SCxRQUFTLFNBQVMySCxHQUFFQSxFQUFNZSxRQUFOLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFrQixDQUE3QyxFQUNBOUssRUFBTzBKLENBQVAsQ0FDRixDQWtCUyxTQUFBbWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU1wVCxFQUFnQnROLEdBQ3ZCNEQsRUFBUXNDLEVBQWdCb0gsR0FFOUIxSixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTTJDLEdBQUl6QixFQUFZLFNBQUVtSCxFQUFPcUcsRUFBTWdHLEdBQ25DdFksRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQU82WixHQUFJN1osRUFBT21JLEdBQUkyRCxFQUFYLEVBQW9Cd00sRUFBT3JNLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUF0QyxDQUNBLENBRkYsRUFJQTFJLEVBQU9qSCxLQUFNc0gsQ0FBYixDQUNGLENBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3FCQSxTQUFTMkQsSUFDTzhFLEVBQUFBLEVBQVc2QixTQUFTNEQsS0FBTW5JLEdBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidrQmhHLEVBQVE0TSxZQUFjN0gsR0FBTSxXQUFhLEVBQXJGMkQsQ0FDaEIsQ0FPQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU0FBU29TLEVBQVN6UyxHQUNoQjdGLEVBQU8wVCxHQUFJN04sRUFBTUMsS0FBakI5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsQ0FDRixDQVFTLFNBQUE4WSxFQUFXalQsRUFBdUJsUSxHQUNwQ00sRUFBVTJULCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUFjTCxHQUFjNVQsQ0FBQSxDQUE1QixJQUNiMmlCLEVBQVN6UyxDQUFULEVBQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndkwsRUFBUzNFLENBQVQsRUFFSixDQUVPLE1BQUEsQ0FDTGtWLE1BQU96VyxFQUNMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzhSLEVBQVcyUSxNQUFNblYsSUFDakIsQ0FBRThFLFdBQVluUixHQUFhbVIsQ0FBYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsRUFBNEJKLEVBQWVJLENBQXpELEVBQ0EsQ0FBQSxDQUhLLEVBS1A2QixNQUFBQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQTdKLFFBQUFBLEVBQ0EwUixRQTFFRixXQUNVMVIsRUFBQSxFQUNGNkosRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsQ0FDUixDQStETyxDQVVULFFtQnBJZ0IsU0FBT3JJLEVBQWdCa0csRUFBd0IxSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDN0QsSUFBUWxKLEVBQVN5TCxFQUFnQkMsQ0FBaEIsRUFBVDFMLEtBS0prbUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQVcsRUFnQmYsU0FBU0MsRUFBUzlrQixHQUNoQixJQUVRNmIsRUFDQXhXLEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NBUSxFQUNBa2YsRUFrQmNsSixFQXZCakI3YixFQUFFZ2lCLGFBRUNuRyxHQURFbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLEVBQVdobEIsRUFBWGdsQixRQUNtQixFQUNyQjNmLEVBQVlELEdBQVFwRixHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEI2RixFQUFZZ0MsRUFBUW9kLG1CQUFxQixFQUN6Q0YsRUFBWWxkLEVBQVFxZCxZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBYyxFQUVuQ2hmLEVBQUs4ZSxHQUFXbmYsR0FBOEJrZixFQUF2QjFmLEVBQVl3ZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsSUFDdEN4YSxFQUFPMFQsR0FBSWxDLEVBQVksSUFBTSxHQUE3QnhSLEVBQ1d3YSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBQXhmLEdBY093VyxFQVhMQSxFQVlSaFUsRUFBUXNkLGNBQ1o5YSxDQUFBQSxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBTytCLE1BQU1DLEdBQUk5TyxDQUFqQjhNLEdBQ21ELENBQUEsSUFBbkRrRyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBV3dILFdBQVdxRixZQUFhdkIsQ0FBbkN0TCxHQWQyQjVMLEVBQVMzRSxDQUFULEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUVsQyxDQWVPLE1BQUEsQ0FDTDBTLE1BMUNGLFdBQ083SyxFQUFRdWQsT0FDWHptJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0IsRUFBTTRSLEVBQVc2QixTQUFTQyxNQUFPLFFBQVN5UyxFQUFTM1IsRUFBbkQsQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBRUosQ0FxQ08sQ0FHVCxPQzlDZ0IsU0FBTTlJLEVBQWdCa0csRUFBd0IxSSxHQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNUQsSUFBUTRDLEVBQU9MLEVBQWdCQyxDQUFoQixFQUFQSSxHQUNBNEgsRUFBVTlCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFXNkIsU0FBckJDLE1BS0Z1TSxFQUFVL1csRUFBUXdkLE1BQVEsQ0FBRXhkLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFRNEksYUFLcEM2VSxFQUFLbmlCLEVBQVEsT0FBUStMLEVBQVIsRUFLYnBFLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFXRCxHQWhDTSxHQWdDNkJwTSxFQUFPa1ksRUFBUSxDQUFBLENBQVIsQ0FBekIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBd0JsQyxTQUFTQSxFQUFRNUUsR0FDRDlPLEVBQUFvUCxFQUFPckUsR0FBVytELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDQUFsQixFQUVUQSxHQUNIN1EsRUFBUW1SLEVBQU9pVCxDQUFmLEVBQ0F4YSxFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUzFNLE1BQVQsSUFFQWdHLEVBQVFraEIsQ0FBUixFQUNBeGEsRUFBU2EsT0FBVCxFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FFSixDQWdCQSxTQUFTeVYsRUFBUy9CLEdBQ1hULEdBQ0gzYixFQUFjb1AsRUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0RSxHQUFXc1IsRUFBVyxNQUFRLFFBQW5ELENBRUosQ0FFTyxNQUFBLENBQ0wzTSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTUFsREYsV0FDT2tNLElBQ0h3QyxFQUFTLENBQUU3USxFQUFXZ1YsU0FBU3RaLFVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EvQixFQUNjaEosRUFBQW9QLEVBQU9wRSxHQUFhLENBQUEsQ0FBcEIsRUFDZHFYLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUFHRSxZQUFjLElBRWpCL2EsRUFBSVYsR0FBcUJ0TCxFQUFPMmlCLEVBQVMsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUEsQ0FBaEIsQ0FBekIsRUFDQTNXLEVBQUlULEdBQXNCdkwsRUFBTzJpQixFQUFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxDQUFBLENBQWhCLENBQTFCLEVBQ0EzVyxFQUFJLENBQUV4QixHQUFhVyxHQUFrQicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduTCxFQUFPa1ksRUFBUSxDQUFBLENBQVIsQ0FBNUMsRUFFSixFQXlDRXlLLFFBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQSxFQUNBdlksUUFwQkYsV0FDRWhHLEVBQWlCd1AsRUFBTyxDQUFFdEUsR0FBV0UsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dBQWFELEdBQWxELEVBQ0E1SixFQUFRa2hCLENBQVIsQ0FDRixDQWNPLENBS1QsSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDdkdhRyxHQUFvQixDQUMvQnRtQixLQUFvQixRQUNwQjBYLEtBQW9CLFNBQ3BCNk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE1BQW9CLElBQ3BCeE4sUUFBb0IsRUFDcEJ6RixZQUFvQixDQUFBLEVBQ3BCOEQsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09BQW9CLENBQUEsRUFDcEIzRixXQUFvQixDQUFBLEVBQ3BCOFQsbUJBQW9CLENBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBLEVBQ3BCNVosU0FBb0IsSUFDcEJnVixhQUFvQixDQUFBLEVBQ3BCQyxhQUFvQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBQSxFQUNwQkosY0FBb0IsQ0FBQSxFQUNwQmdHLE9BQW9CLGdDQUNwQnJPLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FvQixDQUFBLEVBQ3BCN0MsVUFBb0IsTUFDcEI2SCxVQUFvQixDQUFBLEVBQ3BCLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidKLGVBQW9CLDZDQUNwQjhTLEtBQW9CLENBQUEsRUFDcEJ6a0IsUTlCcUNxQixDQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckJ5UCxNQUFZOUIsR0FDWnFNLE1BQVlwTSxHQUNaK0gsT0FBWTdILEdBQ1pvUSxNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBWW5RLEdBQ1o2SCxLQUFZNUgsR0FDWjZILEtBQVk1SCxHQUNaK0IsV0FBWTlCLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHQUNaZ0osS0FBWS9JLEdBQ1owVSxRQXhDdUN0VixFQUFsQyxTQStCZ0IsRThCcEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInckJ3QyxLQzFCa0IsQ0FDbEI2RixLQUFZLGlCQUNaQyxLQUFZLGFBQ1oySSxNQUFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxvQkFDWkQsS0FBWSxtQkFDWnhOLE9BQVksaUJBQ1o4UyxNQUFZLGdCQUNaL0UsSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQVksaUJBQ1poVSxNQUFZLGlCQUNacUwsU0FBWSxXQUNaMUcsTUFBWSxRQUNaZ1UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLE9BQVkseUJBQ1oxUixXQUFZLFVBWk0sRUQyQmxCd0IsY0FBZSxDQUNidVIsTUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2EsRUFDYkUsWUFBYSxFQUNicEcsU0FBYSxPQUhBLENBckJnQixFRU9qQixTQUFBcScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHLEdBQU14YixFQUFnQmtHLEVBQXdCMUksR0FDdEQsSUFBRTRKLEVBQVdsQixFQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWGtCLE9BY1IsU0FBUzhGLElBQ1A5RixFQUFPdFIsUUFBUyxTQUFTK1AsR0FDdkJBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQUFNM00sTUFBTywyQkFBNkIsSUFBTTJNLEVBQU1DLE1BQXRELElBQUEsQ0FDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsQ0FGRixDQUdGLENBYU8sTUFBQSxDQUNMdUMsTUEzQkYsV0FDRXRJLEVBQWdCQywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBaEIsRUFBeUJJLEdBQUksQ0FBRTFCLEVBQWVRLEdBQWlCZ08sQ0FBL0QsQ0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0YsRUEwQkVuWixNQVBPLFNBQU8rUixFQUFlMlYsR0FDN0JyVSxFQUFPbE8sTUFBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsYUFBZCxXQUF3Q3NFLEVBQVE2ZCxNQUFoRCxNQUE2RDdkLEVBQVE4ZCxNQUFyRSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFDQTdtQixFQUFVZ25CLENBQVYsQ0FDRixFQUtFbmEsT0FBUTlNLEVBSEgsQ0FLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1QsQ0NyQ2dCLFNBQUFxUixHQUFPN0YsRUFBZ0JrRyxFQUF3QjFJLEdBQzdELElBTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJa2UsRUFQSWhKLEVBQTZCeE0sRUFBN0J3TSxLQUFNaEYsRUFBdUJ4SCxFQUF2QncnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSCxXQUFZb0QsRUFBVzVLLEVBQVg0SyxPQUNsQm5GLEVBQVN6RixFQUFXNkIsU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BCNEQsS0FDRmdRLEVBQWF2bkIsRUFBTzhFLEVBQU95UyxFQUFNLFlBQXBCLEVBZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEbkIsU0FBU3JLLElBQ1BxYSxFQUFZLEVBQVosRUFDQTdLLEVBQU94UCxPQUFQLEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNGLENBc0JPLE1BQUEsQ0FDTCtHLE1BaEVGLFdBQ0V0SSxFQUFnQkMsQ0FBaEIsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQXlCMUwsS0FBTXFYLEVBQU0sZ0JBQWlCLFNBQUtoVyxHQUNwREEsRUFBRWtFLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQUFXOFIsR0FBUStQLElBQ2pCcGEsRUFBQSxFQUNLb2EsRUFBQSxFQUVkLENBTEYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLENBTUYsRUEwREUzbkIsTUFqRE8sU0FBTytSLEVBQWUyVixHQUM3QixJQUFNckssJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VBQWNzQixFQUFLekIsV0FBWW5MLEVBQU8sQ0FBQSxDQUF4QixFQUNkb0wsRUFBYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3QixFQUFLZCxZQUFuQixFQUNBeUosRUE2QlIsU0FBbUJ2VixHQUNYLElBQUV5ViwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBZ0IvZCxFQUFoQitkLFlBRVIsR0FBS3ZiLEVBQU9nQyxHQUFJMEQsRUFBWDFGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxHQUFzQnViLEVBQWMsQ0FDakMsSUFBQXBQLEVBQU91QixFQUFXdUcsU0FBVSxDQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQSxDQUFyQixFQUNQamdCLEVBQU8wWixFQUFXNEQsT0FBbEIsRUFFTixHQUFnQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUFBVG5GLEdBQXVCblksR0FBVDhSLEdBQTRCOVIsR0FBUm1ZLEdBQXlCLElBQVZyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0csRUFDL0MsT0FBQXlWLENBRVgsQ0FFQSxPQUFPL2QsRUFBUTZkLEtBQ2pCLEVBMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDZ0N2VixHQUVRLEdBQWpDakssRUFBS3VWLEVBQWNGLElBQTRCLEdBQVRtSyxFQUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncEM3ZCxFQUFRb2UsVUFDWDlLLEVBQU9pRCxPQUFRM0MsRUFBYWlLLEVBQU8sQ0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0EsRUFBT0ksQ0FBMUMsR0FFWUUsZUFBY04sRUFBZCxNQUEyQjdkLEVBQVE4ZCxNQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBbkMsRUFDUDVJLEVBQUExQixVQUFXSSxFQUFhLENBQUEsQ0FBeEIsRUFDU3NLLEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBRCxJQUdoQi9JLEVBQUszQixLQUFNakwsQ0FBWCxFQUNLMlYsRUFBQSxFQUVUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxFQWlDRW5hLE9BQUFBLENBSEssQ0FLVCxDQy9FYXRCLGFBOERYLFNBQWFuRyxFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFBOEIyRCxHQTNDM0NxZSxLQUFTcGUsTUFBOEJzQyxFQUF2QyxFQUtBOGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQVMzVixXQUF5QixHQUt6QjJWLEtBQUE5WixNQUFxQkYsRTlGOUNULEc4Rm1EJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JCZ2EsS0FBUzVVLFFBQXdCLEdBS2pDNFUsS0FBaUJDLEVBQWMsR0FVL0JELEtBQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidRRSxFQUEyQyxHQWMzQzVWLEVBQU8vUSxFQUFVeUUsQ0FBQSxFQUFXYSxHQUFvQjEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQixTQUFVYSxDQUFWLEVBQXFCQSxFQUNuRXVCLEdBQUErSyxFQUFVQSxFQUFWLGNBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBLEVBSVIzSSxFQUFVbEYsRUFBTyxDQUNmc08sTUFBWXBOLEVBSGRxaUIsS0FBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxVixLQUFPQSxFQUdzQjlDLEVBQXBCLEdBQW9DLEdBQ2hEd0osV0FBWXJULEVBQWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMk0sRUFBTTdDLEVBQXBCLEdBQXlDLEVBRnRDLEVBR2Q4WCxHQUFVWSxFQUFPQyxTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBVXplLEdBQVcsRUFIeEIsRUFLYixJQUNGbEYsRUFBT2tGLEVBQVMwZSxLQUFLQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBTzNpQixFQUFjMk0sRUFBTWhMLEVBQWhDLENBQWhCLENBR0YsT0FGVXhGLEcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUNSeUYsR0FBUSxDQUFBLEVBQU8sY0FBZixDQUNGLENBRUF5Z0IsS0FBS0MsRUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0tqa0IsT0FBT2lCLE9BQVFSLEVBQU8sR0FBSWtGLEVBQTFCLENBQ1osNEJBVUE2SycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsTUFBQSxTQUFPK1QsRUFBbUR6TCxHQUEwQyxJQUFBMEwsRUFBQVIsS0FDMUY5WiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUFBc0I4WixLQUF0QjlaLE1BQU9tRSxFQUFlMlYsS0FBZjNWLFdBNEJSLE9BM0JQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzlLLEdBQVEyRyxFQUFNQyxHQUFJLEM5RjdHQyxFQThCRSxFOEYrRWIsRUFBb0MsaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCQUE1QyxFQUVBRCxFQUFNTCxJOUYvR2EsQzhGK0duQixFQUVBbWEsS0FBS1MsRUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUtwVyxFQUNMMlYsS0FBQVUsRUFBSzVMLEdBQWNrTCxLQUFLVSxJQUFRVixLQUFLJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzdaLEdBQUk0RCxFQUFULEVBQWtCNFYsR0FBTzNWLElBQ3pEZ1csS0FBQUUsRUFBSycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidLLEdBQWNQLEtBQUtFLEVBSXJCaGtCLEVBRmFLLEdBQVEsR0FBSW9rQixHQUF1QlgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEtBQUtFLEVBQUksQ0FBRXBMLFdBQVlrTCxLQUFLVSxDQUFuQixDQUFwQyxFQUVQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxTQUFFRSxFQUFXdGtCLEdBQzNCdWtCLEVBQVlELEVBQVdKLEVBQU1uVyxFQUFZbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidXLEVBQUtQLENBQWxDLEdBQ2xCNVYsRUFBWS9OLEdBQVF1a0IsR0FDVjdSLE9BQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInNlIsRUFBVTdSLE1BQW5CLENBQ1YsQ0FKTSxFQU1SOVMsRUFBUW1PLEVBQVksU0FBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F3VyxHQUNyQkEsRUFBQXJVLE9BQVNxVSxFQUFVclUsTUFBbkIsQ0FDVixDQUZGLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFQUlBd1QsS0FBS3RiLEtBQU03QixDQUFYLEVBRVUvSCxFQUFBa2xCLEtBQUsxViwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS2xDaEdzQnBCLGdCa0NnRzNCLEVBRVZoRCxFQUFNTCxJOUYzSFUsQzhGMkhoQixFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDQW1hLEtBQUt0YixLMUN4SStCLE8wQ3dJcEMsRUFFT3NiLElBQ1QsSUFvQkF0QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsS0FBQSxTQUFNcFQsR0FTRyxPQVJQMFUsS0FBSzVVLFFBQVE5USxLQUFNLENBQUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ1IsT0FBQUEsQ0FBRixDQUFuQixFQUNBQSxFQUFPRixRQUFROVEsS0FBTSxDQUFFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dSLE9BQVEwVSxLQUFNdkIsU0FBVSxDQUFBLENBQTFCLENBQXJCLEVBRUt1QixLQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBSzlaLE1BQU1DLEc5RnZKQSxDOEZ1SlgsSUFDRTZaLEtBQUFTLEVBQUdLLEtBQUsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInek0sUUFBUixFQUNFL0ksRUFBQWpCLFdBQVd5VyxLQUFLek0sUUFBaEIsR0FHRjJMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxJQUNULElBc0NBbkksR0FBQSxTQUFJQyxHQUVLLE9BREZrSSxLQUFBUyxFQUFHNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPLFdBQVdnRyxHQUFJQyxDQUFsQixFQUNFa0ksSUFDVCxJQTBCQXpiLEdBQUEsU0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUloRCxFQUEyQkcsR0FFdEIsT0FERnNlLEtBQUFwZSxNQUFNMkMsR0FBSWhELEVBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FRRyxDQUFsQixFQUNFc2UsSUFDVCxJQXFCQXZiLElBQUEsU0FBK0JsRCxHQUV0QicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsT0FERnllLEtBQUFwZSxNQUFNNkMsSUFBS2xELENBQVgsRUFDRXllLElBQ1QsSUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWUF0YixLQUFBLFNBQU05QyxHQUFzQixJQUFBbWYsRUFHbkIsT0FERm5mLEVBQUFBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxLQUFBQSxPQUFNOEMsS0FBTTlDLE1BQUFBLEVBQUFBLENBQUFBLEdBQVU1SixPQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQUEsRUFBT1UsVUFBVyxDQUFYLENBQWxDLENBQUEsRUFDT3NuQixJQUNULElBc0InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXJsQixJQUFBLFNBQUtzVixFQUE0RGhHLEdBRXhELE9BRFArVixLQUFLUyxFQUFHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xWLE9BQU81USxJQUFLc1YsRUFBUWhHLENBQTVCLEVBQ08rVixJQUNULElBUUE5aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCLE9BQUEsU0FBUXdULEdBRUMsT0FERnNPLEtBQUFTLEVBQUdsVixPQUFPck4sT0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVF3VCxDQUFsQixFQUNFc08sSUFDVCxJQVNBN1osR0FBQSxTQUFJbE4sR0FDSyxPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FBQSttQixLQUFLQyxFQUFHaG5CLE9BQVNBLENBQzFCLElBT0EwVixRQUFBLFdBRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTLE9BRFBxUixLQUFLdGIsS0FBTXJCLENBQVgsRUFDTzJjLElBQ1QsSUFTQXJkLFEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUFBLFNBQVN3TCxHQUEwQixLQUFBLElBQTFCQSxJQUFBQSxFQUFhLENBQUEsR0FDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsSUFBRXZNLEVBQWlCb2UsS0FBakJwZSxNQUFPc0UsRUFBVThaLEtBQVY5WixNQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnQlIsT0FkRkEsRUFBTUMsRzlGMVZRLEM4RjBWZCxFQUVhakMsRUFBQThiLElBQUEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLEVBQU96YixHMUM5VlcsUTBDOFZNeWIsS0FBS3JkLFFBQVFsSyxLQUFNdW5CLEtBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FNN1IsQ0FBekIsQ0FBeEIsR0FFUmpTLEVBQUE4akIsS0FBS1MsRUFBSSxTQUFhSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsR0FDbEJBLEVBQUFsZSxTQUFXa2UsRUFBVWxlLFFBQVN3TCxDQUFuQixHQUNwQiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0FBQSxDQUZLLEVBSVJ2TSxFQUFNOEMsS0FBTWYsQ0FBWixFQUNBL0IsRUFBTWUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1FBQU4sRUFDY3dMLEdBQUF0VyxFQUFPbW9CLEtBQUs1VSxPQUFaLEVBQ2RsRixFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBTUwsSTlGdlVhLEM4RnVVbkIsR0FHS21hLElBQ1QsMkJBT0EsV0FDRSxPQUFPQSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInS0FBS0MsQ0FDZCxNQU9BLFNBQWF0ZSxHQUNYcWUsS0FBS1MsRUFBR3pGLE1BQU1uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1YsSUFBS2xFLEVBQVMsQ0FBQSxFQUFNLENBQUEsQ0FBbEMsQ0FDRixxQkFPQSxXQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDRSxPQUFPcWUsS0FBS1MsRUFBR2xWLE9BQU84RyxVQUFXLENBQUEsQ0FBMUIsQ0EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ1Qsb0JBT0EsV0FDUyxPQUFBMk4sS0FBS1MsRUFBRzVPLFdBQVd1RyxTQUFuQixDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVCxRQTVYSyxTQUFNalUsRUFJSmljLFNBQW9CLEdBSmhCamMsRUFTSzVNLE9BQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTQSJ9JywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS5taW4uanMubWFwJywKICAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJywKICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciBjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIGZpeGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNTc2cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7IHBhZGRpbmc6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgV2lkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2NyZWVucyAqLyBAbWVkaWEgb25seSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NyZWVuIGFuZCAobWluLXdpZHRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IDk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fSwKIDM2OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYicvKiFcbiAqIFNwbGlkZS5qc1xuICogVmVyc2lvbiAgOiA0LjEuNFxuICogTGljZW5zZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIiIDogTUlUXG4gKiBDb3B5cmlnaHQ6IDIwMjIgTmFvdG9zaGkgRnVqaXRhXG4gKi9cbid1IgogICAgICAgICAgICAgICAgICAgICAgICBiInNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgIgogICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYidjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHRydWU7IGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvcicKICAgICAgICAgICAgICAgICAgICAgICAgYicua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzdGF0aWNQcm9wcyk7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgInByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290b3R5cGUiLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTsgcmV0dXJuIENvbnN0cnVjdG9yOyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIifVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCAiCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICB2YWx1ZTogdHJ1ZVxufSk7XG52YXIgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RJT04gPSAiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiO1xudmFyIENSRUFUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VEID0gMTtcbnZhciBNT1VOVEVEID0gMjtcbnZhciBJRExFID0gMztcbnZhciBNT1ZJTicKICAgICAgICAgICAgICAgICAgICAgICAgYidHID0gNDtcbnZhciBTQ1JPTExJTkcgPSA1O1xudmFyIERSQUdHSU5HID0gNjtcbnZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInREVTVFJPWUVEID0gNztcbnZhciBTVEFURVMgPSB7XG4gIENSRUFURUQ6IENSRUFURUQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICBNT1VOVEVEOiBNT1VOVEVELFxuICBJRExFOiBJRExFLFxuICBNT1ZJTkc6IE1PJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZJTkcsXG4gIFNDUk9MTElORzogU0NST0xMSU5HLFxuICBEUkFHR0lORzogRFJBR0dJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05HLFxuICBERVNUUk9ZRUQ6IERFU1RST1lFRFxufTtcblxuZnVuY3Rpb24gZW1wdHkoYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmF5KSB7XG4gIGFycmF5Lmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIHNsaWNlKGFycicKICAgICAgICAgICAgICAgICAgICAgICAgYidheUxpa2UsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuY2FsbChhcnJheUxpa2UsIHN0YXJ0LCBlbmQpO1xufVxuXG5mdW5jdGlvbiBhcHBseSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuYykge1xuICByZXR1cm4gZnVuYy5iaW5kLmFwcGx5KGZ1bmMsIFtudWxsXS5jb25jYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHNsaWNlKGFyZ3VtZW50cywgMSkpKTtcbn1cblxudmFyIG5leHRUaWNrID0gc2V0VGltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VvdXQ7XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG5mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFmKGZ1bmMpIHtcbiAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZih0eXBlLCBzdWJqZWN0KSB7XG4gIHJldHVybiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lwZW9mIHN1YmplY3QgPT09IHR5cGU7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHN1YicKICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0KSB7XG4gIHJldHVybiAhaXNOdWxsKHN1YmplY3QpICYmIHR5cGVPZigib2JqZWN0IicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHN1YmplY3QpO1xufVxuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzRnVuY3Rpb24gPSBhcHBseSh0eXBlT2YsICJmdW5jdGlvbiIpO1xudmFyIGlzU3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGFwcGx5KHR5cGVPZiwgInN0cmluZyIpO1xudmFyIGlzVW5kZWZpbmVkID0gYXBwbHkoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5cGVPZiwgInVuZGVmaW5lZCIpO1xuXG5mdW5jdGlvbiBpc051bGwoc3ViamVjdCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgcmV0dXJuIHN1YmplY3QgPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50KHN1YmplY3QpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3ViamVjdCBpbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFuY2VvZiAoc3ViamVjdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdycKICAgICAgICAgICAgICAgICAgICAgICAgYicpLkhUTUxFbGVtZW50O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc0FycicKICAgICAgICAgICAgICAgICAgICAgICAgYidheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59XG5cbmZ1bmN0aW9uIGZvckVhY2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgdG9BcnJheSh2YWx1ZXMpLmZvckVhY2goaXRlcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVlKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgPiAtMTtcbn1cblxuZnVuY3Rpb24gcHVzaCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJyYXksIGl0ZW1zKSB7XG4gIGFycmF5LnB1c2guYXBwbHkoYXJyYXksIHRvQXJyYXkoaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1zKSk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbSwgY2xhc3NlcywgYWRkKSB7XG4gIGlmIChlbG0pIHtcbiAgICBmb3JFYWNoKGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzLCBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVsbS5jbGFzc0xpc3RbYWRkID8gImFkZCIgOiAicmVtb3ZlIl0obmFtZSk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZENsYXNzKGVsbSwgY2xhc3NlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgdG9nZ2xlQ2xhc3MoZWxtLCBpc1N0cmluZyhjbGFzc2VzKSA/IGNsYXNzZXMucycKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGl0KCIgIikgOiBjbGFzc2VzLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kKHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnQsIGNoaWxkcmVuKSB7XG4gIGZvckVhY2goY2hpbGRyZW4sIHBhcmVudC5hcHBlbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2hpbGQuYmluZChwYXJlbnQpKTtcbn1cblxuZnVuY3Rpb24gYmVmb3JlKG5vZGVzLCByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmKSB7XG4gIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJlbnQgPSAocmVmIHx8IG5vZGUpLnBhcmVudE5vZGU7XG5cbiAgICBpZiAocGFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCkge1xuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShub2RlLCByZWYpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzKGVsbSwgc2VsZWN0b3IpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JldHVybiBpc0hUTUxFbGVtZW50KGVsbSkgJiYgKGVsbVsibXNNYXRjaGVzU2VsZWN0b3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInIl0gfHwgZWxtLm1hdGNoZXMpLmNhbGwoZWxtLCBzZWxlY3Rvcik7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjaGlsZHJlbihwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHZhciBjaGlsZHJlbjIgPSBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50ID8gc2xpY2UocGFyZW50LmNoaWxkcmVuKSA6IFtdO1xuICByZXR1cm4gc2VsZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yID8gY2hpbGRyZW4yLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21hdGNoZXMoY2hpbGQsIHNlbGVjdG9yKTtcbiAgfSkgOiBjaGlsZHJlbjI7XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBjaGlsZChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPyBjaGlsZHJlbihwYXJlbnQsIHNlbGVjdG9yKVswXSA6IHBhcmVudC5maXJzdEVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0Q2hpbGQ7XG59XG5cbnZhciBvd25LZXlzID0gT2JqZWN0LmtleXM7XG5cbmZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSwgcmlnaHQpIHtcbiAgaWYgKG9iamVjdCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAocmlnaHQgPyBvd25LZXlzKG9iamVjdCkucmV2ZXJzZSgpIDogb3duS2V5cyhvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0KSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBrZXkgIT09ICJfX3ByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290b19fIiAmJiBpdGVyYXRlZShvYmplY3Rba2V5XSwga2V5KTtcbiAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbiBhc3NpZ24ob2JqZWN0KSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICBmb3JPd24oc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAgfSk7XG4gIH0pO1xuICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gbWVyZ2Uob2JqZWN0KSB7XG4gIHNsaWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShhcmd1bWVudHMsIDEpLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgIGZvck8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd24oc291cmNlLCBmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgaWYgKGlzQXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHZhbHVlKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlLnNsaWNlKCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgb2JqZWN0W2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXldID0gbWVyZ2Uoe30sIGlzT2JqZWN0KG9iamVjdFtrZXldKSA/IG9iamVjdFtrZXldICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHt9LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmplY3Rba2V5XScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5cykge1xuICBmb3JFYWNoKGtleXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IG93bktleXMob2JqZWN0KSwgZnVuY3Rpb24gKGtleSkge1xuICAgIGRlbGV0ZSBvYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0W2tleV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxtcycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGF0dHJzKSB7XG4gIGZvckVhY2goZWxtcywgZnVuY3Rpb24gKGVsbSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoKGF0dHJzLCBmdW5jdGlvbiAoYXR0cikge1xuICAgICAgZWxtICYmIGVsbS5yZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcycKICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZShlbG1zLCBhdHRycywgdmFsdWUpIHtcbiAgaWYgKGlzT2JqZWN0KGF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidycykpIHtcbiAgICBmb3JPd24oYXR0cnMsIGZ1bmN0aW9uICh2YWx1ZTIsIG5hbWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICBzZXRBdHRyaWJ1dGUoZWxtcywgbmFtZSwgdmFsdWUyKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH0gZWxzZSB7XG4gICAgZm9yRWFjaChlbG1zLCBmdW5jdGlvbiAoZWxtKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaXNOdWxsKHZhbHVlKSB8fCB2YWx1ZSA9PT0gIiIgPyByZW1vdmVBdHRyaWJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKGVsbSwgYXR0cnMpIDogZWxtLnNldEF0dHJpYnV0ZShhdHRycywgU3RyaW5nKHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZSh0YWcsIGF0dHJzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyZW50KSB7XG4gIHZhciBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZycKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gIGlmIChhdHRycykge1xuICAgIGlzU3RyaW5nKGF0dHJzKSA/IGFkZENsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyhlbG0sIGF0dHJzKSA6IHNldEF0dHJpYnV0ZShlbG0sIGF0dHJzKTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJlbnQgJiYgYXBwZW5kKHBhcmVudCwgZWxtKTtcbiAgcmV0dXJuIGVsbTtcbn1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmZ1bmN0aW9uIHN0eWxlKGVsbSwgcHJvcCwgdmFsdWUpIHtcbiAgaWYgKGlzVW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaW5lZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbG0pW3BybycKICAgICAgICAgICAgICAgICAgICAgICAgYidwXTtcbiAgfVxuXG4gIGlmICghaXNOdWxsKHZhbHVlKSkge1xuICAgIGVsbS5zdHlsZVtwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvcF0gPSAiIiArIHZhbHVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BsYXkoZWxtLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGlzcGxheTIpIHtcbiAgc3R5bGUoZWxtLCAiZGlzcGxheSIsIGRpc3BsYXkyKTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIGZvY3VzKGVsbSkge1xuICBlbG1bInNldEFjdGl2ZSJdICYmIGVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21bInNldEFjdGl2ZSJdKCkgfHwgZWxtLmZvY3VzKHtcbiAgICBwcmV2ZW50U2Nyb2xsOiB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKGVsbSwgYXR0cikge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmV0dXJuIGVsbS5nZXRBdHRyaWJ1dGUoYXR0cik7XG59XG5cbmZ1bmN0aW9uIGhhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidDbGFzcyhlbG0sIGNsYXNzTmFtZSkge1xuICByZXR1cm4gZWxtICYmIGVsbS5jbGFzc0xpcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG59XG5cbmZ1bmN0aW9uIHJlY3QodGFyZ2V0KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICByZXR1cm4gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gcmVtb3ZlKG5vZGVzKSB7XG4gIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uIChubycKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSkge1xuICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgbicKICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH0pO1xufVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZnVuY3Rpb24gcGFyc2VIdG1sKGh0bWwpIHtcbiAgcmV0dXJuIGNoaWxkKG5ldyBEJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICJ0ZXh0L2h0bWwiKS5ib2R5KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbmZ1bmN0aW9uIHByZXZlbnQoZSwgc3RvcFByb3BhZ2F0aW9uKSB7XG4gIGUucCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXZlbnREZWZhdWx0KCk7XG5cbiAgaWYgKHN0b3BQcm9wYWdhdGlvbikge1xuICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5KHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBwYXJlbnQgJiYgcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gcXVlcnlBbGwocGFyZW50LCBzZWxlY3Rvcikge1xuICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yID8gc2xpY2UocGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKScKICAgICAgICAgICAgICAgICAgICAgICAgYicgOiBbXTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxtLCBjbGFzc2VzKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0b2dnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbWVPZihlKSB7XG4gIHJldHVybiBlLnRpbWVTdGFtcDtcbn1cblxuZnVuY3Rpb24gdW5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QodmFsdWUpIHtcbiAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8gdmFsdWUgKyAicHgiIDogIiI7XG59XG5cbnZhciBQUk9KRUNUX0NPREUgPSAic3BsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSI7XG52YXIgREFUQV9BVFRSSUJVVEUgPSAiZGF0YS0iICsgUFJPSkVDVF9DT0RFJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuZnVuY3Rpb24gYXNzZXJ0KGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICBpZiAoIScKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25kaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoIlsiICsgUFJPSkVDVF9DT0RFICcKICAgICAgICAgICAgICAgICAgICAgICAgYicrICJdICIgKyAobWVzc2FnZSB8fCAiIikpO1xuICB9XG59XG5cbnZhciBtaW4gPSBNYXRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5taW4sXG4gICAgbWF4ID0gTWF0aC5tYXgsXG4gICAgZmxvb3IgPSBNYXRoLmZsb29yJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICBjZWlsID0gTWF0aC5jZWlsLFxuICAgIGFicyA9IE1hdGguYWJzO1xuXG5mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gYXBwcm94aW1hdGVseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgcmV0dXJuIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnMoeCAtIHkpIDwgZXBzaWxvbjtcbn1cblxuZnVuY3Rpb24gYmV0d2VlbihudW1iZXIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB4LCB5LCBleGNsdXNpdmUpIHtcbiAgdmFyIG1pbmltdW0gPSBtaW4oeCwgeSk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgbWF4aW11bSA9IG1heCh4LCB5KTtcbiAgcmV0dXJuIGV4Y2x1c2l2ZSA/IG1pbmltJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VtIDwgbnVtYmVyICYmIG51bWJlciA8IG1heGltdW0gOiBtaW5pbXVtIDw9IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgbnVtYmVyIDw9IG1heGltdW07XG59XG5cbmZ1bmN0aW9uIGNsYW1wKG51bWJlciwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gsIHkpIHtcbiAgdmFyIG1pbmltdW0gPSBtaW4oeCwgeSk7XG4gIHZhciBtYXhpbXVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG1heCh4LCB5KTtcbiAgcmV0dXJuIG1pbihtYXgobWluaW11bSwgbnVtYmVyKSwgbWF4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltdW0pO1xufVxuXG5mdW5jdGlvbiBzaWduKHgpIHtcbiAgcmV0dXJuICsoeCA+IDApIC0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsoeCA8IDApO1xufVxuXG5mdW5jdGlvbiBjYW1lbFRvS2ViYWIoc3RyaW5nKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csICIkMS0kMiIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQoc3RyaW5nLCByZXBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZW1lbnRzKSB7XG4gIGZvckVhY2gocmVwbGFjZW1lbnRzLCBmdW5jdGlvbiAocmVwbGFjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50KSB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoIiVzIiwgIiIgKyByZXBsYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZW1lbnQpO1xuICB9KTtcbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZnVuY3Rpb24gcGFkKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIpIHtcbiAgcmV0dXJuIG51bWJlciA8IDEwID8gIjAiICsgbnVtYmVyIDogIiIgKycKICAgICAgICAgICAgICAgICAgICAgICAgYicgbnVtYmVyO1xufVxuXG52YXIgaWRzID0ge307XG5cbmZ1bmN0aW9uIHVuaXF1ZUlkKHByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaXgpIHtcbiAgcmV0dXJuICIiICsgcHJlZml4ICsgcGFkKGlkc1twcmVmaXhdID0gKGlkcycKICAgICAgICAgICAgICAgICAgICAgICAgYidbcHJlZml4XSB8fCAwKSArIDEpO1xufVxuXG5mdW5jdGlvbiBFdmVudEJpbmRlcigpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcblxuICBmdW5jdGlvbiBiaW5kKHRhcmdldHMsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBldmVudHMsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgZm9yRWFjaEV2ZW50KHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgaXNFdmVudFRhcmdldCA9ICgiYWRkRXZlbnRMaXN0ZW5lciIgaW4gdGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCk7XG4gICAgICB2YXIgcmVtb3ZlciA9IGlzRXZlbnRUYXJnZXQgPyB0YXJnZXQucmVtb3YnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUV2ZW50TGlzdGVuZXIuYmluZCh0YXJnZXQsIGV2ZW50LCBjYWxsYmFjaywgb3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgYicpIDogdGFyZ2V0WyJyZW1vdmVMaXN0ZW5lciJdLmJpbmQodGFyZ2V0LCBjYWxsYmFjayk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaXNFdmVudFRhcmdldCA/IHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJywgY2FsbGJhY2ssIG9wdGlvbnMpIDogdGFyZ2V0WyJhZGRMaXN0ZW5lciJdKGNhbGxiYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInayk7XG4gICAgICBsaXN0ZW5lcnMucHVzaChbdGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2FsbGJhY2ssIHJlbW92ZXJdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuYicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmQodGFyZ2V0cywgZXZlbnRzLCBjYWxsYmFjaykge1xuICAgIGZvckVhY2hFdmVudCh0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZ2V0cywgZXZlbnRzLCBmdW5jdGlvbiAodGFyZ2V0LCBldmVudCwgbmFtZXNwYWNlKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgbGlzdGVuZXJzID0gbGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAobGlzdGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lclswXSA9PT0gdGFyZ2V0ICYmIGxpc3RlbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1sxXSA9PT0gZXZlbnQgJiYgbGlzdGVuZXJbMl0gPT09IG5hbWVzcGFjZSAmJiAoIWNhbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmFjayB8fCBsaXN0ZW5lclszXSA9PT0gY2FsbGJhY2spKSB7XG4gICAgICAgICAgbGlzdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVyWzRdKCk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gZGlzcGF0Y2godGFyZ2V0LCB0eXBlLCBkZXRhaWwpIHtcbiAgICB2YXIgZTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGJ1YmJsZXMgPSB0cnVlO1xuXG4gICAgaWYgKHR5cGVvZiBDdXN0b21FdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQgPT09ICJmdW5jdGlvbiIpIHtcbiAgICAgIGUgPSBuZXcgQ3VzdG9tRXZlbnQodHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHtcbiAgICAgICAgYnViYmxlczogYnViYmxlcyxcbiAgICAgICAgZGV0YWlsOiBkZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0YWlsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZSA9IGRvY3VtZW50LmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGVFdmVudCgiQ3VzdG9tRXZlbnQiKTtcbiAgICAgIGUuaW5pdEN1c3RvbUV2ZW50KHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneXBlLCBidWJibGVzLCBmYWxzZSwgZGV0YWlsKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc3BhdGNoRXZlbnQoZSk7XG4gICAgcmV0dXJuIGU7XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZm9yRWFjaEV2ZW50KHRhcmdldHMsIGV2ZW50cywgaXRlcmF0ZWUpIHtcbiAgICBmb3JFYWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCh0YXJnZXRzLCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICB0YXJnZXQgJiYgZm9yRWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2goZXZlbnRzLCBmdW5jdGlvbiAoZXZlbnRzMikge1xuICAgICAgICBldmVudHMyLnNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCgiICIpLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50TlMpIHtcbiAgICAgICAgICB2YXIgZnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdtZW50ID0gZXZlbnROUy5zcGxpdCgiLiIpO1xuICAgICAgICAgIGl0ZXJhdGVlKHRhcmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXQsIGZyYWdtZW50WzBdLCBmcmFnbWVudFsxXSk7XG4gICAgICAgIH0pO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICBsaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGRhdGFbNF0oKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfSk7XG4gICAgZW1wdHkobGlzdGVuZXJzKTtcbiAgfVxuXG4gIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24ge1xuICAgIGJpbmQ6IGJpbmQsXG4gICAgdW5iaW5kOiB1bmJpbmQsXG4gICAgZGlzcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGNoOiBkaXNwYXRjaCxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4gIH07XG59XG5cbnZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfTU9VTlRFRCA9ICJtb3VudGVkIjtcbnZhciBFVkVOVF9SRUFEWSA9ICJyZWFkeScKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX01PVkUgPSAibW92ZSI7XG52YXIgRVZFTlRfTU9WRUQgPSAibScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVkIjtcbnZhciBFVkVOVF9DTElDSyA9ICJjbGljayI7XG52YXIgRVZFTlRfQUNUSScKICAgICAgICAgICAgICAgICAgICAgICAgYidWRSA9ICJhY3RpdmUiO1xudmFyIEVWRU5UX0lOQUNUSVZFID0gImluYWN0aXZlIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgRVZFTlRfVklTSUJMRSA9ICJ2aXNpYmxlIjtcbnZhciBFVkVOVF9ISURERU4gPSAiaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGRlbiI7XG52YXIgRVZFTlRfUkVGUkVTSCA9ICJyZWZyZXNoIjtcbnZhciBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfVVBEQVRFRCA9ICJ1cGRhdGVkIjtcbnZhciBFVkVOVF9SRVNJWkUgPSAicmVzaXplJwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgRVZFTlRfUkVTSVpFRCA9ICJyZXNpemVkIjtcbnZhciBFVkVOVF9EUkFHJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJkcmFnIjtcbnZhciBFVkVOVF9EUkFHR0lORyA9ICJkcmFnZ2luZyI7XG52YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX0RSQUdHRUQgPSAiZHJhZ2dlZCI7XG52YXIgRVZFTlRfU0NST0xMID0gInNjcm9sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2wiO1xudmFyIEVWRU5UX1NDUk9MTEVEID0gInNjcm9sbGVkIjtcbnZhciBFVkVOVF9PJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFUkZMT1cgPSAib3ZlcmZsb3ciO1xudmFyIEVWRU5UX0RFU1RST1kgPSAiZGVzdHJveSI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIEVWRU5UX0FSUk9XU19NT1VOVEVEID0gImFycm93czptb3VudGVkIjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgRVZFTlRfQVJST1dTX1VQREFURUQgPSAiYXJyb3dzOnVwZGF0ZWQiO1xudmFyIEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19QQUdJTkFUSU9OX01PVU5URUQgPSAicGFnaW5hdGlvbjptb3VudGVkIjtcbnZhciBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUEFHSU5BVElPTl9VUERBVEVEID0gInBhZ2luYXRpb246dXBkYXRlZCI7XG52YXIgRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX05BVklHQVRJT05fTU9VTlRFRCA9ICJuYXZpZ2F0aW9uOm1vdW50ZWQiO1xudmFyIEVWJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9BVVRPUExBWV9QTEFZID0gImF1dG9wbGF5OnBsYXkiO1xudmFyIEVWRU5UX0FVVE9QJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBWV9QTEFZSU5HID0gImF1dG9wbGF5OnBsYXlpbmciO1xudmFyIEVWRU5UX0FVVE9QTEFZJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19QQVVTRSA9ICJhdXRvcGxheTpwYXVzZSI7XG52YXIgRVZFTlRfTEFaWUxPQURfTE9BREVEJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJsYXp5bG9hZDpsb2FkZWQiO1xudmFyIEVWRU5UX1NMSURFX0tFWURPV04gPSAic2siJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBFVkVOVF9TSElGVEVEID0gInNoIjtcbnZhciBFVkVOVF9FTkRfSU5ERVhfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NIQU5HRUQgPSAiZWkiO1xuXG5mdW5jdGlvbiBFdmVudEludGVyZmFjZShTcGxpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICB2YXIgYnVzID0gU3BsaWRlMiA/IFNwbGlkZTIuZXZlbnQuYnVzIDogZG9jdW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgdmFyIGJpbmRlciA9IEV2ZW50QmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlcigpO1xuXG4gIGZ1bmN0aW9uIG9uKGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICBiaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGVyLmJpbmQoYnVzLCB0b0FycmF5KGV2ZW50cykuam9pbigiICIpLCBmdW5jdGlvbiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KGNhbGxiYWNrLCBpc0FycmF5KGUuZGV0YWlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgPyBlLmRldGFpbCA6IFtdKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGV2ZW50KSB7XG4gICAgYmluZGVyLmRpc3BhdGNoKGJ1cywgZXZlbnQsIHNsaWNlKGFyZ3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudHMsIDEpKTtcbiAgfVxuXG4gIGlmIChTcGxpZGUyKSB7XG4gICAgU3BsaWRlMi5ldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQub24oRVZFTlRfREVTVFJPWSwgYmluZGVyLmRlc3Ryb3kpO1xuICB9XG5cbiAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBhc3NpZ24oYmluZGVyLCB7XG4gICAgYnVzOiBidXMsXG4gICAgb246IG9uLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBvZmY6IGFwcGx5KGJpbmRlci51bmJpbmQsIGJ1cyksXG4gICAgZW1pdDogZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXRcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFJlcXVlc3RJbnRlcnZhbChpbnRlcnZhbCwgbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduSW50ZXJ2YWwsIG9uVXBkYXRlLCBsaW1pdCkge1xuICB2YXIgbm93ID0gRGF0ZS5uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ293O1xuICB2YXIgc3RhcnRUaW1lO1xuICB2YXIgcmF0ZSA9IDA7XG4gIHZhciBpZDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBwYXVzZWQgPSB0cnVlO1xuICB2YXIgY291bnQgPSAwO1xuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB1cGRhdGUoKSB7XG4gICAgaWYgKCFwYXVzZWQpIHtcbiAgICAgIHJhdGUgPSBpbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J2YWwgPyBtaW4oKG5vdygpIC0gc3RhcnRUaW1lKSAvIGludGVydmFsLCAxKSA6IDE7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb25VcGRhdGUgJiYgb25VcGRhdGUocmF0ZSk7XG5cbiAgICAgIGlmIChyYXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA+PSAxKSB7XG4gICAgICAgIG9uSW50ZXJ2YWwoKTtcbiAgICAgICAgc3RhcnRUaW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG5vdygpO1xuXG4gICAgICAgIGlmIChsaW1pdCAmJiArK2NvdW50ID49IGxpbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICAgIHJldHVybiBwYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBpZCA9IHJhZih1cGRhdGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGFydChyZXN1bWUpIHtcbiAgICByZXN1bWUgfHwgY2FuY2VsKCk7XG4gICAgc3RhcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVGltZSA9IG5vdygpIC0gKHJlc3VtZSA/IHJhdGUgKiBpbnRlcnZhbCA6IDApO1xuICAgIHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXVzZWQgPSBmYWxzZTtcbiAgICBpZCA9IHJhZih1cGRhdGUpO1xuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIHBhdXNlKCkge1xuICAgIHBhdXNlZCA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gcmV3aW5kKCkge1xuICAgIHN0YXJ0VGltZSA9IG5vdygpO1xuICAgIHJhdGUgPSAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIGlmIChvblVwZGF0ZSkge1xuICAgICAgb25VcGRhdGUocmF0ZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBpZCAmJiBjYW5jZWxBbicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbWF0aW9uRnJhbWUoaWQpO1xuICAgIHJhdGUgPSAwO1xuICAgIGlkID0gMDtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldCh0aW1lKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVydmFsID0gdGltZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUGF1c2VkKCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gcGF1c2VkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIHJld2luZDogcmV3aW5kLFxuICAgIHBhdXNlOiBwYXVzZSxcbiAgICBjYW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsOiBjYW5jZWwsXG4gICAgc2V0OiBzZXQsXG4gICAgaXNQYXVzZWQ6IGlzUGF1c2VkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xufVxuXG5mdW5jdGlvbiBTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0ZSA9IGluaXRpYWxTdGF0ZTtcblxuICBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzKHN0YXRlcykge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gaW5jbHVkZXModG9BcnJheShzdGF0ZXMpLCBzdGF0ZSk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIHtcbiAgICBzZXQ6IHNldCxcbiAgICBpczogaXNcbiAgfTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIFRocm90dGxlKGZ1bmMsIGR1cmF0aW9uKSB7XG4gIHZhciBpbnRlcnZhbCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidSZXF1ZXN0SW50ZXJ2YWwoZHVyYXRpb24gfHwgMCwgZnVuYywgbnVsbCwgMSk7XG4gIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gZnVuY3Rpb24gKCkge1xuICAgIGludGVydmFsLmlzUGF1c2VkKCkgJiYgaW50ZXJ2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidsLnN0YXJ0KCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIE1lZGlhKFNwbGlkZTIsIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgc3RhdGUgPSBTcGxpZGUyLnN0YXRlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGJyZWFrcG9pbnRzID0gb3B0aW9ucy5icmVha3BvaW50cyB8fCB7fTtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZWR1Y2VkTW90aW9uID0gb3B0aW9ucy5yZWR1Y2VkTW90aW9uIHx8IHt9O1xuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JpbmRlciA9IEV2ZW50QmluZGVyKCk7XG4gIHZhciBxdWVyaWVzID0gW107XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHNldHVwKCkge1xuICAgIHZhciBpc01pbiA9IG9wdGlvbnMubWVkaWFRdWVyeScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPT09ICJtaW4iO1xuICAgIG93bktleXMoYnJlYWtwb2ludHMpLnNvcnQoZnVuY3Rpb24gKCcKICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBtKSB7XG4gICAgICByZXR1cm4gaXNNaW4gPyArbiAtICttIDogK20gLSArbjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZWdpc3RlcihicmVhaycKICAgICAgICAgICAgICAgICAgICAgICAgYidwb2ludHNba2V5XSwgIigiICsgKGlzTWluID8gIm1pbiIgOiAibWF4IikgKyAiLXdpZHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJzoiICsga2V5ICsgInB4KSIpO1xuICAgIH0pO1xuICAgIHJlZ2lzdGVyKHJlZHVjZWRNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290aW9uLCBNRURJQV9QUkVGRVJTX1JFRFVDRURfTU9USU9OKTtcbiAgICB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KGNvbXBsZXRlbHkpIHtcbiAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKGNvbXBsZXRlbHkpIHtcbiAgICAgIGJpbmRlci5kZXN0cm95KCk7XG4gICAgfVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKG9wdGlvbnMyLCBxdWVyeSkge1xuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgcXVlcnlMaXN0ID0gbWF0Y2hNZWRpYShxdWVyeSk7XG4gICAgYmluZGVyLmJpbmQocXVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J5TGlzdCwgImNoYW5nZSIsIHVwZGF0ZSk7XG4gICAgcXVlcmllcy5wdXNoKFtvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJzIsIHF1ZXJ5TGlzdF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZGVzdHJveWVkID0gc3RhdGUuaXMoREVTVFJPWUVEKTtcbiAgICB2YXIgZGlyZWN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBtZXJnZWQgPSBxdWVyaWVzLnJlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoZnVuY3Rpb24gKG1lcmdlZDIsIGVudHJ5KSB7XG4gICAgICByZXR1cm4gbWVyZ2UobWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmdlZDIsIGVudHJ5WzFdLm1hdGNoZXMgPyBlbnRyeVswXSA6IHt9KTtcbiAgICB9LCB7fSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIG9taXQob3B0aW9ucyk7XG4gICAgc2V0KG1lcmdlZCk7XG5cbiAgICBpZiAobycKICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMuZGVzdHJveSkge1xuICAgICAgU3BsaWRlMi5kZXN0cm95KG9wdGlvbnMuZGVzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3kgPT09ICJjb21wbGV0ZWx5Iik7XG4gICAgfSBlbHNlIGlmIChkZXN0cm95ZWQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICBkZXN0cm95KHRydWUpO1xuICAgICAgU3BsaWRlMi5tb3VudCgpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0aW9uICE9PSBvcHRpb25zLmRpcmVjdGlvbiAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgU3BsaWRlMi5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVkdWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhlbmFibGUpIHtcbiAgICBpZiAobWF0Y2hNZWRpYShNRURJQV9QUkVGRVJTX1JFRFVDRURfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ01PVElPTikubWF0Y2hlcykge1xuICAgICAgZW5hYmxlID8gbWVyZ2Uob3B0aW9ucywgcmVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VjZWRNb3Rpb24pIDogb21pdChvcHRpb25zLCBvd25LZXlzKHJlZHVjZWRNb3Rpb24pKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2V0KG9wdHMsIGJhc2UsIG5vdGlmeSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBtZXJnZShvcHRpb25zLCBvcHRzKTtcbiAgICBiYXNlICYmIG1lcmdlKE9iaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3QuZ2V0UHJvdG90eXBlT2Yob3B0aW9ucyksIG9wdHMpO1xuXG4gICAgaWYgKG5vdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZnkgfHwgIXN0YXRlLmlzKENSRUFURUQpKSB7XG4gICAgICBTcGxpZGUyLmVtaXQoRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUX1VQREFURUQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgYidldHVwOiBzZXR1cCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHJlZHVjZTogcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZHVjZSxcbiAgICBzZXQ6IHNldFxuICB9O1xufVxuXG52YXIgQVJST1cgPSAiQXJyb3ciOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbnZhciBBUlJPV19MRUZUID0gQVJST1cgKyAiTGVmdCI7XG52YXIgQVJST1dfUklHSCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUID0gQVJST1cgKyAiUmlnaHQiO1xudmFyIEFSUk9XX1VQID0gQVJST1cgKyAiVXAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBBUlJPV19ET1dOID0gQVJST1cgKyAiRG93biI7XG52YXIgTFRSID0gImx0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IiO1xudmFyIFJUTCA9ICJydGwiO1xudmFyIFRUQiA9ICJ0dGIiO1xudmFyIE9SSUVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBVElPTl9NQVAgPSB7XG4gIHdpZHRoOiBbImhlaWdodCJdLFxuICBsZWZ0OiBbInRvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLCAicmlnaHQiXSxcbiAgcmlnaHQ6IFsiYm90dG9tIiwgImxlZnQiXSxcbiAgeDogWycKICAgICAgICAgICAgICAgICAgICAgICAgYicieSJdLFxuICBYOiBbIlkiXSxcbiAgWTogWyJYIl0sXG4gIEFycm93TGVmdDogW0FSUk8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInV19VUCwgQVJST1dfUklHSFRdLFxuICBBcnJvd1JpZ2h0OiBbQVJST1dfRE9XTiwgQVJST1cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0xFRlRdXG59O1xuXG5mdW5jdGlvbiBEaXJlY3Rpb24oU3BsaWRlMiwgQ29tcG9uZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MyLCBvcHRpb25zKSB7XG4gIGZ1bmN0aW9uIHJlc29sdmUocHJvcCwgYXhpc09ubHksIGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlY3Rpb24pIHtcbiAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gfHwgb3B0aW9ucy5kaXJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uO1xuICAgIHZhciBpbmRleCA9IGRpcmVjdGlvbiA9PT0gUlRMICYmICFheGlzT25sJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3kgPyAxIDogZGlyZWN0aW9uID09PSBUVEIgPyAwIDogLTE7XG4gICAgcmV0dXJuIE9SSUVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RBVElPTl9NQVBbcHJvcF0gJiYgT1JJRU5UQVRJT05fTUFQW3Byb3BdW2luZGV4XSB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvcC5yZXBsYWNlKC93aWR0aHxsZWZ0fHJpZ2h0L2ksIGZ1bmN0aW9uIChtYXRjaCwgbycKICAgICAgICAgICAgICAgICAgICAgICAgYidmZnNldCkge1xuICAgICAgdmFyIHJlcGxhY2VtZW50ID0gT1JJRU5UQVRJT05fTUFQW21hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjaC50b0xvd2VyQ2FzZSgpXVtpbmRleF0gfHwgbWF0Y2g7XG4gICAgICByZXR1cm4gb2ZmcycKICAgICAgICAgICAgICAgICAgICAgICAgYidldCA+IDAgPyByZXBsYWNlbWVudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHJlcGxhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlbWVudC5zbGljZSgxKSA6IHJlcGxhY2VtZW50O1xuICAgIH0pO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG9yaWVudCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAqIChvcHRpb25zLmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXJlY3Rpb24gPT09IFJUTCA/IDEgOiAtMSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXNvbHZlOiByZXNvbHZlLFxuICAgIG9yaWVudDogb3JpZW50XG4gIH07XG59XG5cbnZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgUk9MRSA9ICJyb2xlIjtcbnZhciBUQUJfSU5ERVggPSAidGFiaW5kZXgiO1xudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidESVNBQkxFRCA9ICJkaXNhYmxlZCI7XG52YXIgQVJJQV9QUkVGSVggPSAiYXJpYS0iJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBBUklBX0NPTlRST0xTID0gQVJJQV9QUkVGSVggKyAiY29udHJvbHMiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBBUklBX0NVUlJFTlQgPSBBUklBX1BSRUZJWCArICJjdXJyZW50IjtcbnZhciBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19TRUxFQ1RFRCA9IEFSSUFfUFJFRklYICsgInNlbGVjdGVkIjtcbnZhciBBUklBX0xBQkVMJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEFSSUFfUFJFRklYICsgImxhYmVsIjtcbnZhciBBUklBX0xBQkVMTEVEQlkgPSBBUklBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19QUkVGSVggKyAibGFiZWxsZWRieSI7XG52YXIgQVJJQV9ISURERU4gPSBBUklBX1BSRUZJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ggKyAiaGlkZGVuIjtcbnZhciBBUklBX09SSUVOVEFUSU9OID0gQVJJQV9QUkVGSVggKyAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yaWVudGF0aW9uIjtcbnZhciBBUklBX1JPTEVERVNDUklQVElPTiA9IEFSSUFfUFJFRklYJwogICAgICAgICAgICAgICAgICAgICAgICBiJyArICJyb2xlZGVzY3JpcHRpb24iO1xudmFyIEFSSUFfTElWRSA9IEFSSUFfUFJFRklYICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJsaXZlIjtcbnZhciBBUklBX0JVU1kgPSBBUklBX1BSRUZJWCArICJidXN5IjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQVJJQV9BVE9NSUMgPSBBUklBX1BSRUZJWCArICJhdG9taWMiO1xudmFyIEFMTF9BVFRSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lCVVRFUyA9IFtST0xFLCBUQUJfSU5ERVgsIERJU0FCTEVELCBBUklBX0NPTlRST0xTLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVJJQV9DVVJSRU5ULCBBUklBX0xBQkVMLCBBUklBX0xBQkVMTEVEQlksIEFSSUFfSElERCcKICAgICAgICAgICAgICAgICAgICAgICAgYidFTiwgQVJJQV9PUklFTlRBVElPTiwgQVJJQV9ST0xFREVTQ1JJUFRJT05dO1xudmFyIENMQScKICAgICAgICAgICAgICAgICAgICAgICAgYidTU19QUkVGSVggPSBQUk9KRUNUX0NPREUgKyAiX18iO1xudmFyIFNUQVRVU19DTEFTU19QUicKICAgICAgICAgICAgICAgICAgICAgICAgYidFRklYID0gImlzLSI7XG52YXIgQ0xBU1NfUk9PVCA9IFBST0pFQ1RfQ09ERTtcbnZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfVFJBQ0sgPSBDTEFTU19QUkVGSVggKyAidHJhY2siO1xudmFyIENMQVNTX0xJUycKICAgICAgICAgICAgICAgICAgICAgICAgYidUID0gQ0xBU1NfUFJFRklYICsgImxpc3QiO1xudmFyIENMQVNTX1NMSURFID0gQ0xBU1NfUCcKICAgICAgICAgICAgICAgICAgICAgICAgYidSRUZJWCArICJzbGlkZSI7XG52YXIgQ0xBU1NfQ0xPTkUgPSBDTEFTU19TTElERSArICItLScKICAgICAgICAgICAgICAgICAgICAgICAgYidjbG9uZSI7XG52YXIgQ0xBU1NfQ09OVEFJTkVSID0gQ0xBU1NfU0xJREUgKyAiX19jb250YScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmVyIjtcbnZhciBDTEFTU19BUlJPV1MgPSBDTEFTU19QUkVGSVggKyAiYXJyb3dzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgQ0xBU1NfQVJST1cgPSBDTEFTU19QUkVGSVggKyAiYXJyb3ciO1xudmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19BUlJPV19QUkVWID0gQ0xBU1NfQVJST1cgKyAiLS1wcmV2IjtcbnZhciBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfQVJST1dfTkVYVCA9IENMQVNTX0FSUk9XICsgIi0tbmV4dCI7XG52YXIgQ0xBU1NfUEFHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lOQVRJT04gPSBDTEFTU19QUkVGSVggKyAicGFnaW5hdGlvbiI7XG52YXIgQ0xBU1NfUEFHJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lOQVRJT05fUEFHRSA9IENMQVNTX1BBR0lOQVRJT04gKyAiX19wYWdlIjtcbnZhciBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUFJPR1JFU1MgPSBDTEFTU19QUkVGSVggKyAicHJvZ3Jlc3MiO1xudmFyIENMQVNTX1BSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09HUkVTU19CQVIgPSBDTEFTU19QUk9HUkVTUyArICJfX2JhciI7XG52YXIgQ0xBU1NfVE9HJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0dMRSA9IENMQVNTX1BSRUZJWCArICJ0b2dnbGUiO1xudmFyIENMQVNTX1RPR0dMRV9QTEFZJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENMQVNTX1RPR0dMRSArICJfX3BsYXkiO1xudmFyIENMQVNTX1RPR0dMRV9QQVVTRSA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19UT0dHTEUgKyAiX19wYXVzZSI7XG52YXIgQ0xBU1NfU1BJTk5FUiA9IENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19QUkVGSVggKyAic3Bpbm5lciI7XG52YXIgQ0xBU1NfU1IgPSBDTEFTU19QUkVGSVggKyAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NyIjtcbnZhciBDTEFTU19JTklUSUFMSVpFRCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luaXRpYWxpemVkIjtcbnZhciBDTEFTU19BQ1RJVkUgPSBTVEFUVVNfQ0xBU1NfUFJFRklYJwogICAgICAgICAgICAgICAgICAgICAgICBiJyArICJhY3RpdmUiO1xudmFyIENMQVNTX1BSRVYgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyJwcmV2IjtcbnZhciBDTEFTU19ORVhUID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG52YXIgQ0xBU1NfVklTSUJMRSA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAidmlzaWJsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiO1xudmFyIENMQVNTX0xPQURJTkcgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImxvYWRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25nIjtcbnZhciBDTEFTU19GT0NVU19JTiA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiZm9jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VzLWluIjtcbnZhciBDTEFTU19PVkVSRkxPVyA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZXJmbG93IjtcbnZhciBTVEFUVVNfQ0xBU1NFUyA9IFtDTEFTU19BQ1RJVkUsIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19WSVNJQkxFLCBDTEFTU19QUkVWLCBDTEFTU19ORVhULCBDTEFTU19MT0FESU5HLCBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfRk9DVVNfSU4sIENMQVNTX09WRVJGTE9XXTtcbnZhciBDTEFTU0VTID0ge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGU6IENMQVNTX1NMSURFLFxuICBjbG9uZTogQ0xBU1NfQ0xPTkUsXG4gIGFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3M6IENMQVNTX0FSUk9XUyxcbiAgYXJyb3c6IENMQVNTX0FSUk9XLFxuICBwcmV2OiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfQVJST1dfUFJFVixcbiAgbmV4dDogQ0xBU1NfQVJST1dfTkVYVCxcbiAgcGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2luYXRpb246IENMQVNTX1BBR0lOQVRJT04sXG4gIHBhZ2U6IENMQVNTX1BBR0lOQVRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInX1BBR0UsXG4gIHNwaW5uZXI6IENMQVNTX1NQSU5ORVJcbn07XG5cbmZ1bmN0aW9uIGNsbycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXN0KGZyb20sIHNlbGVjdG9yKSB7XG4gIGlmIChpc0Z1bmN0aW9uKGZyb20uY2xvc2VzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpKSB7XG4gICAgcmV0dXJuIGZyb20uY2xvc2VzdChzZWxlY3Rvcik7XG4gIH1cblxuICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGVsbSA9IGZyb207XG5cbiAgd2hpbGUgKGVsbSAmJiBlbG0ubm9kZVR5cGUgPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxKSB7XG4gICAgaWYgKG1hdGNoZXMoZWxtLCBzZWxlY3RvcikpIHtcbiAgICAgIGJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VhaztcbiAgICB9XG5cbiAgICBlbG0gPSBlbG0ucGFyZW50RWxlbWVudDtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICByZXR1cm4gZWxtO1xufVxuXG52YXIgRlJJQ1RJT04gPSA1O1xudmFyIExPRycKICAgICAgICAgICAgICAgICAgICAgICAgYidfSU5URVJWQUwgPSAyMDA7XG52YXIgUE9JTlRFUl9ET1dOX0VWRU5UUyA9ICJ0b3VjaHN0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidydCBtb3VzZWRvd24iO1xudmFyIFBPSU5URVJfTU9WRV9FVkVOVFMgPSAidG91Y2htb3ZlICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VzZW1vdmUiO1xudmFyIFBPSU5URVJfVVBfRVZFTlRTID0gInRvdWNoZW5kIHRvdWNoYycKICAgICAgICAgICAgICAgICAgICAgICAgYidhbmNlbCBtb3VzZXVwIGNsaWNrIjtcblxuZnVuY3Rpb24gRWxlbWVudHMoU3BsaWRlMicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UgPSBFdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZS5vbicKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlLmJpbmQ7XG5cbiAgdmFyIHJvb3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gU3BsaWRlMi5yb290O1xuICB2YXIgaTE4biA9IG9wdGlvbnMuaTE4bjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBlbGVtZW50cyA9IHt9O1xuICB2YXIgc2xpZGVzID0gW107XG4gIHZhciByb290Q2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzZXMgPSBbXTtcbiAgdmFyIHRyYWNrQ2xhc3NlcyA9IFtdO1xuICB2YXIgdHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgbGlzdDtcbiAgdmFyIGlzVXNpbmdLZXk7XG5cbiAgZnVuY3Rpb24gc2V0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidwKCkge1xuICAgIGNvbGxlY3QoKTtcbiAgICBpbml0KCk7XG4gICAgdXBkYXRlKCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3kpO1xuICAgIG9uKEVWRU5UX1JFRlJFU0gsIHNldHVwKTtcbiAgICBvbihFVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfVVBEQVRFRCwgdXBkYXRlKTtcbiAgICBiaW5kKGRvY3VtZW50LCBQT0lOVEVSX0RPVycKICAgICAgICAgICAgICAgICAgICAgICAgYidOX0VWRU5UUyArICIga2V5ZG93biIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpc1VzaW5nSycKICAgICAgICAgICAgICAgICAgICAgICAgYidleSA9IGUudHlwZSA9PT0gImtleWRvd24iO1xuICAgIH0sIHtcbiAgICAgIGNhcHR1cicKICAgICAgICAgICAgICAgICAgICAgICAgYidlOiB0cnVlXG4gICAgfSk7XG4gICAgYmluZChyb290LCAiZm9jdXNpbiIsIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAoKSB7XG4gICAgICB0b2dnbGVDbGFzcyhyb290LCBDTEFTU19GT0NVU19JTiwgISFpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidVc2luZ0tleSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KGNvbXBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0ZWx5KSB7XG4gICAgdmFyIGF0dHJzID0gQUxMX0FUVFJJQlVURVMuY29uY2F0KCJzdHlsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UiKTtcbiAgICBlbXB0eShzbGlkZXMpO1xuICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290Q2xhc3Nlcyk7XG4gICAgcmVtb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3NlcyknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHJlbW92ZUF0dHJpYnV0ZShbdHJhY2ssIGxpc3RdLCBhdHRycyk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlbW92ZUF0dHJpYnV0ZShyb290LCBjb21wbGV0ZWx5ID8gYXR0cnMgOiBbInN0eWxlIicKICAgICAgICAgICAgICAgICAgICAgICAgYicsIEFSSUFfUk9MRURFU0NSSVBUSU9OXSk7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvb3RDbGFzc2VzKTtcbiAgICByZW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3Nlcyk7XG4gICAgcm9vdENsYXNzZXMgPSBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xhc3NlcyhDTEFTU19ST09UKTtcbiAgICB0cmFja0NsYXNzZXMgPSBnZXRDbGFzc2VzKEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19UUkFDSyk7XG4gICAgYWRkQ2xhc3Mocm9vdCwgcm9vdENsYXNzZXMpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBhZGRDbGFzcyh0cmFjaywgdHJhY2tDbGFzc2VzKTtcbiAgICBzZXRBdHRyaWJ1dGUocm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QsIEFSSUFfTEFCRUwsIG9wdGlvbnMubGFiZWwpO1xuICAgIHNldEF0dHJpYnV0ZShyb28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgQVJJQV9MQUJFTExFREJZLCBvcHRpb25zLmxhYmVsbGVkYnkpO1xuICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGNvbGxlY3QoKSB7XG4gICAgdHJhY2sgPSBmaW5kKCIuIiArIENMQVNTX1RSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FDSyk7XG4gICAgbGlzdCA9IGNoaWxkKHRyYWNrLCAiLiIgKyBDTEFTU19MSVNUKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYXNzZXJ0KHRyYWNrICYmIGxpc3QsICJBIHRyYWNrL2xpc3QgZWxlbWVudCBpcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWlzc2luZy4iKTtcbiAgICBwdXNoKHNsaWRlcywgY2hpbGRyZW4obGlzdCwgIi4iICsgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1NMSURFICsgIjpub3QoLiIgKyBDTEFTU19DTE9ORSArICIpIikpO1xuICAgIGZvck8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd24oe1xuICAgICAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gICAgICBwYWdpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjogQ0xBU1NfUEFHSU5BVElPTixcbiAgICAgIHByZXY6IENMQVNTX0FSUk9XX1BSRScKICAgICAgICAgICAgICAgICAgICAgICAgYidWLFxuICAgICAgbmV4dDogQ0xBU1NfQVJST1dfTkVYVCxcbiAgICAgIGJhcjogQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BST0dSRVNTX0JBUixcbiAgICAgIHRvZ2dsZTogQ0xBU1NfVE9HR0xFXG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGZ1bmN0aW9uIChjbGFzc05hbWUsIGtleSkge1xuICAgICAgZWxlbWVudHNba2V5XSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidmaW5kKCIuIiArIGNsYXNzTmFtZSk7XG4gICAgfSk7XG4gICAgYXNzaWduKGVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cywge1xuICAgICAgcm9vdDogcm9vdCxcbiAgICAgIHRyYWNrOiB0cmFjayxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBsaXN0OiBsaXN0LFxuICAgICAgc2xpZGVzOiBzbGlkZXNcbiAgICB9KTtcbiAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBpZCA9IHJvb3QuaWQgfHwgdW5pcXVlSWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFBST0pFQ1RfQ09ERSk7XG4gICAgdmFyIHJvbGUgPSBvcHRpb25zLnJvbGU7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJvb3QuaWQgPSBpZDtcbiAgICB0cmFjay5pZCA9IHRyYWNrLmlkIHx8IGlkICsgIi10cmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2siO1xuICAgIGxpc3QuaWQgPSBsaXN0LmlkIHx8IGlkICsgIi1saXN0IjtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIWdldEF0dHJpYnV0ZShyb290LCBST0xFKSAmJiByb290LnRhZ05hbWUgIT09ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInU0VDVElPTiIgJiYgcm9sZSkge1xuICAgICAgc2V0QXR0cmlidXRlKHJvb3QsIFJPTEUsIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2xlKTtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9ST0xFREVTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NSSVBUSU9OLCBpMThuLmNhcm91c2VsKTtcbiAgICBzZXRBdHRyaWJ1dGUobGlzdCwgUk9MJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0UsICJwcmVzZW50YXRpb24iKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbmQoc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSB7XG4gICAgdmFyIGVsbSA9IHF1ZXJ5KHJvb3QsIHNlbGVjdG9yKTtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGVsbSAmJiBjbG9zZXN0KGVsbSwgIi4iICsgQ0xBU1NfUk9PVCkgPT09IHJvb3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz8gZWxtIDogdm9pZCAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NlcyhiYXNlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHJldHVybiBbYmFzZSArICItLSIgKyBvcHRpb25zLnR5cGUsIGJhc2UgKyAiLScKICAgICAgICAgICAgICAgICAgICAgICAgYictIiArIG9wdGlvbnMuZGlyZWN0aW9uLCBvcHRpb25zLmRyYWcgJiYgYmFzZSArICItLWRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZ2FibGUiLCBvcHRpb25zLmlzTmF2aWdhdGlvbiAmJiBiYXNlICsgIi0tbmF2IiwgYmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgPT09IENMQVNTX1JPT1QgJiYgQ0xBU1NfQUNUSVZFXTtcbiAgfVxuXG4gIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gYXNzaWduKGVsZW1lbnRzLCB7XG4gICAgc2V0dXA6IHNldHVwLFxuICAgIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveVxuICB9KTtcbn1cblxudmFyIFNMSURFJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJzbGlkZSI7XG52YXIgTE9PUCA9ICJsb29wIjtcbnZhciBGQURFID0gImZhZGUiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuZnVuY3Rpb24gU2xpZGUkMShTcGxpZGUyLCBpbmRleCwgc2xpZGVJbmRleCwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlKSB7XG4gIHZhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIG9uID0gZXZlbnQub24sXG4gICAgICBlbWl0ID0gZXZlbnQuZW1pdCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiaW5kID0gZXZlbnQuYmluZDtcbiAgdmFyIENvbXBvbmVudHMgPSBTcGxpZGUyLkNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzLFxuICAgICAgcm9vdCA9IFNwbGlkZTIucm9vdCxcbiAgICAgIG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zID0gU3BsaWRlMi5vcHRpb25zO1xuICB2YXIgaXNOYXZpZ2F0aW9uID0gb3B0aW9ucy5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NOYXZpZ2F0aW9uLFxuICAgICAgdXBkYXRlT25Nb3ZlID0gb3B0aW9ucy51cGRhdGVPbk1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlLFxuICAgICAgaTE4biA9IG9wdGlvbnMuaTE4bixcbiAgICAgIHBhZ2luYXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gb3B0aW9ucy5wYWdpbmF0aW9uLFxuICAgICAgc2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlRm9jdXM7XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gIHZhciBzdHlsZXMgPSBnZXRBdHRyaWJ1dGUoc2xpZGUsICJzdHlsZSIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGxhYmVsID0gZ2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0xBQkVMKTtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0Nsb25lID0gc2xpZGVJbmRleCA+IC0xO1xuICB2YXIgY29udGFpbmVyID0gY2hpbGQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlLCAiLiIgKyBDTEFTU19DT05UQUlORVIpO1xuICB2YXIgZGVzdHJveWVkO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpZiAoIWlzQ2xvbmUpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZS5pZCA9IHJvb3QuaWQgKyAiLXNsaWRlIiArIHBhZChpbmRleCArIDEpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgcGFnaW5hdGlvbiA/ICJ0YWJwYW5lbCIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogImdyb3VwIik7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lQVElPTiwgaTE4bi5zbGlkZSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBQkVMLCBsYWJlbCB8fCBmb3JtYXQoaTE4bi5zbGlkZUxhYmVsLCBbaW5kZXggKyAxLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU3BsaWRlMi5sZW5ndGhdKSk7XG4gICAgfVxuXG4gICAgbGlzdGVuKCk7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gbGlzdGVuKCkge1xuICAgIGJpbmQoc2xpZGUsICJjbGljayIsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBseShlbWl0LCBFVkVOVF9DTElDSywgc2VsZikpO1xuICAgIGJpbmQoc2xpZGUsICJrZScKICAgICAgICAgICAgICAgICAgICAgICAgYid5ZG93biIsIGFwcGx5KGVtaXQsIEVWRU5UX1NMSURFX0tFWURPV04sIHNlbGYpKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb24oW0VWRU5UX01PVkVELCBFVkVOVF9TSElGVEVELCBFVkVOVF9TQ1JPTExFRF0sIHVwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RhdGUpO1xuICAgIG9uKEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCwgaW5pdE5hdmlnYXRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKTtcblxuICAgIGlmICh1cGRhdGVPbk1vdmUpIHtcbiAgICAgIG9uKEVWRU5UX01PVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFLCBvbk1vdmUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGRlc3Ryb3llZCA9IHRydWU7XG4gICAgZXZlbnQuZGVzdHJveSgpO1xuICAgIHJlbScKICAgICAgICAgICAgICAgICAgICAgICAgYidvdmVDbGFzcyhzbGlkZSwgU1RBVFVTX0NMQVNTRVMpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicoc2xpZGUsIEFMTF9BVFRSSUJVVEVTKTtcbiAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsICJzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUiLCBzdHlsZXMpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9MQUJFTCwgbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhYmVsIHx8ICIiKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXROYXZpZ2F0aW9uKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgY29udHJvbHMgPSBTcGxpZGUyLnNwbGlkZXMubWFwKGZ1bmN0aW9uICh0YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0KSB7XG4gICAgICB2YXIgU2xpZGUyID0gdGFyZ2V0LnNwbGlkZS5Db21wb25lbnRzLlMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMuZ2V0QXQoaW5kZXgpO1xuICAgICAgcmV0dXJuIFNsaWRlMiA/IFNsaWRlMi5zbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUuaWQgOiAiIjtcbiAgICB9KS5qb2luKCIgIik7XG4gICAgc2V0QXR0cmlidXRlKHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSwgQVJJQV9MQUJFTCwgZm9ybWF0KGkxOG4uc2xpZGVYLCAoaXNDbG9uZSA/IHNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZUluZGV4IDogaW5kZXgpICsgMSkpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ09OVFJPTFMsIGNvbnRyb2xzKTtcbiAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIFJPTEUsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZUZvY3VzID8gImJ1dHRvbiIgOiAiIik7XG4gICAgc2xpZGVGb2N1cyAmJiByZW1vdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlQXR0cmlidXRlKHNsaWRlLCBBUklBX1JPTEVERVNDUklQVElPTik7XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gb25Nb3ZlKCkge1xuICAgIGlmICghZGVzdHJveWVkKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIWRlc3Ryb3llZCkge1xuICAgICAgdmFyIGN1cnIgPSBTcGxpZGUyLmluZGV4OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHVwZGF0ZUFjdGl2aXR5KCk7XG4gICAgICB1cGRhdGVWaXNpYmlsaXR5KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIENMQVNTX1BSRVYsIGluZGV4ID09PSBjdScKICAgICAgICAgICAgICAgICAgICAgICAgYidyciAtIDEpO1xuICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIENMQVNTX05FWFQsIGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0gY3VyciArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUFjdGl2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0eSgpIHtcbiAgICB2YXIgYWN0aXZlID0gaXNBY3RpdmUoKTtcblxuICAgIGlmIChhYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aXZlICE9PSBoYXNDbGFzcyhzbGlkZSwgQ0xBU1NfQUNUSVZFKSkge1xuICAgICAgdG9nZycKICAgICAgICAgICAgICAgICAgICAgICAgYidsZUNsYXNzKHNsaWRlLCBDTEFTU19BQ1RJVkUsIGFjdGl2ZSk7XG4gICAgICBzZXRBdHRyaScKICAgICAgICAgICAgICAgICAgICAgICAgYididXRlKHNsaWRlLCBBUklBX0NVUlJFTlQsIGlzTmF2aWdhdGlvbiAmJiBhY3RpdmUgfHwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIiKTtcbiAgICAgIGVtaXQoYWN0aXZlID8gRVZFTlRfQUNUSVZFIDogRVZFTlRfSU5BQ1RJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFLCBzZWxmKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVWaXNpYmlsaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpIHtcbiAgICB2YXIgdmlzaWJsZSA9IGlzVmlzaWJsZSgpO1xuICAgIHZhciBoaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVuID0gIXZpc2libGUgJiYgKCFpc0FjdGl2ZSgpIHx8IGlzQ2xvbmUpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICghU3BsaWRlMi5zdGF0ZS5pcyhbTU9WSU5HLCBTQ1JPTExJTkddKSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9ISURERU4sIGhpZGRlbiB8fCAiIik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIHNldEF0dHJpYnV0ZShxdWVyeUFsbChzbGlkZSwgb3B0aW9ucy5mb2MnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXNhYmxlTm9kZXMgfHwgIiIpLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogIiIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIGlmIChzbGlkZUZvY3VzKSB7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogMCk7XG4gICAgfVxuXG4gICAgaWYgKHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXNpYmxlICE9PSBoYXNDbGFzcyhzbGlkZSwgQ0xBU1NfVklTSUJMRSkpIHtcbiAgICAgIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfVklTSUJMRSwgdmlzaWJsZSk7XG4gICAgICBlbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCh2aXNpYmxlID8gRVZFTlRfVklTSUJMRSA6IEVWRU5UX0hJRERFTiwgc2VsZik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGlmICghdmlzaWJsZSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT0gc2xpZGUpIHtcbiAgICAgIHZhciBTbGlkZTIgPSBDb21wb25lbnRzLlNsaWRlcy5nZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXQoU3BsaWRlMi5pbmRleCk7XG4gICAgICBTbGlkZTIgJiYgZm9jdXMoU2xpZGUyLnNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3R5bGUkMShwcm9wLCB2YWx1ZSwgdScKICAgICAgICAgICAgICAgICAgICAgICAgYidzZUNvbnRhaW5lcikge1xuICAgIHN0eWxlKHVzZUNvbnRhaW5lciAmJiBjb250YWluZXIgfCcKICAgICAgICAgICAgICAgICAgICAgICAgYid8IHNsaWRlLCBwcm9wLCB2YWx1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0FjdGl2ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIGN1cnIgPSBTcGxpZGUyLmluZGV4O1xuICAgIHJldHVybiBjdXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInciA9PT0gaW5kZXggfHwgb3B0aW9ucy5jbG9uZVN0YXR1cyAmJiBjdXJyID09PSBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVmlzaWJsZSgpIHtcbiAgICBpZiAoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIuaXMoRkFERSkpIHtcbiAgICAgIHJldHVybiBpc0FjdGl2ZSgpO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgdHJhY2tSZWN0ID0gcmVjdChDb21wb25lbnRzLkVsZW1lbnRzLnRyYWNrKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdmFyIHNsaWRlUmVjdCA9IHJlY3Qoc2xpZGUpO1xuICAgIHZhciBsZWZ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHJlc29sdmUoImxlZnQiLCB0cnVlKTtcbiAgICB2YXIgcmlnaHQgPSByZXNvbHZlKCJyaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQiLCB0cnVlKTtcbiAgICByZXR1cm4gZmxvb3IodHJhY2tSZWN0W2xlZnRdKSA8PSBjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidpbChzbGlkZVJlY3RbbGVmdF0pICYmIGZsb29yKHNsaWRlUmVjdFtyaWdodF0pIDw9IGNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsKHRyYWNrUmVjdFtyaWdodF0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNXaXRoaW4oZicKICAgICAgICAgICAgICAgICAgICAgICAgYidyb20sIGRpc3RhbmNlKSB7XG4gICAgdmFyIGRpZmYgPSBhYnMoZnJvbSAtIGluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG5cbiAgICBpZiAoIWlzQ2xvbmUgJiYgKG9wdGlvbnMucmV3aW5kIHx8IFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLmlzKExPT1ApKSkge1xuICAgICAgZGlmZiA9IG1pbihkaWZmLCBTcGxpZGUyLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ggLSBkaWZmKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlmZiA8PSBkaXN0YW5jZTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICB2YXIgc2VsZiA9IHtcbiAgICBpbmRleDogaW5kZXgsXG4gICAgc2xpZGVJbicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXg6IHNsaWRlSW5kZXgsXG4gICAgc2xpZGU6IHNsaWRlLFxuICAgIGNvbnRhaW5lcicKICAgICAgICAgICAgICAgICAgICAgICAgYic6IGNvbnRhaW5lcixcbiAgICBpc0Nsb25lOiBpc0Nsb25lLFxuICAgIG1vdW50OiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc3R5bGU6IHN0eWxlJDEsXG4gICAgaXNXaXRoaW46IGlzV2l0aGluXG4gIH07XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gc2VsZjtcbn1cblxuZnVuY3Rpb24gU2xpZGVzKFNwbGlkZTIsIENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMiA9IEV2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlMi5vbixcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMi5lbWl0LFxuICAgICAgYmluZCA9IF9FdicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRJbnRlcmZhY2UyLmJpbmQ7XG5cbiAgdmFyIF9Db21wb25lbnRzMiRFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBDb21wb25lbnRzMi5FbGVtZW50cyxcbiAgICAgIHNsaWRlcyA9IF9Db21wb25lbnRzMicKICAgICAgICAgICAgICAgICAgICAgICAgYickRWxlbWVudHMuc2xpZGVzLFxuICAgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgYicubGlzdDtcbiAgdmFyIFNsaWRlczIgPSBbXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaW5pdCgpO1xuICAgIG9uKEVWRU5UX1JFRlJFU0gsIGRlc3Ryb3kpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvbihFVkVOVF9SRUZSRVNILCBpbml0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHNsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZSwgaW5kZXgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICByZWdpc3RlcihzbGlkZSwgaW5kZXgsIC0xKTtcbiAgICB9KTtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIGZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgU2xpZGUyLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgICBlbXB0eShTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVzMik7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgZm9yRWFjaCQxJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICBTbGlkZTIudXBkYXRlKCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXIoc2xpZGUsIGluZGV4LCBzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleCkge1xuICAgIHZhciBvYmplY3QgPSBTbGlkZSQxKFNwbGlkZTIsIGluZGV4LCBzbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVJbmRleCwgc2xpZGUpO1xuICAgIG9iamVjdC5tb3VudCgpO1xuICAgIFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicyLnB1c2gob2JqZWN0KTtcbiAgICBTbGlkZXMyLnNvcnQoZnVuY3Rpb24gKFNsaWRlMSwgUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlMikge1xuICAgICAgcmV0dXJuIFNsaWRlMS5pbmRleCAtIFNsaWRlMi5pbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3g7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXQoZXhjbHVkZUNsb25lcykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gZXhjbHVkZUNsb25lcyA/IGZpbHRlcihmdW5jdGlvbiAoU2xpZGUyKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgcmV0dXJuICFTbGlkZTIuaXNDbG9uZTtcbiAgICB9KSA6IFNsaWRlczInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SW4ocGFnZSkge1xuICAgIHZhciBDb250cm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXI7XG4gICAgdmFyIGluZGV4ID0gQ29udHJvbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsZXIudG9JbmRleChwYWdlKTtcbiAgICB2YXIgbWF4ID0gQ29udHJvbGxlci5oYXNGb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYicoKSA/IDEgOiBvcHRpb25zLnBlclBhZ2U7XG4gICAgcmV0dXJuIGZpbHRlcihmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKFNsaWRlMikge1xuICAgICAgcmV0dXJuIGJldHdlZW4oU2xpZGUyLmluZGV4LCBpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGluZGV4ICsgbWF4IC0gMSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoaW5kZXgpIHtcbiAgICByZXR1cm4gZmlsdGVyKGluZGV4KVswXTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBhZGQoaXRlbXMsIGluZGV4KSB7XG4gICAgZm9yRWFjaChpdGVtcywgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIChzbGlkZSkge1xuICAgICAgaWYgKGlzU3RyaW5nKHNsaWRlKSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc2xpZGUgPSBwYXJzZUh0bWwoc2xpZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzSFRNTEVsZW1lbnQoc2xpZGUpKSB7XG4gICAgICAgIHZhciByZWYgPSBzbGlkZXNbaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4XTtcbiAgICAgICAgcmVmID8gYmVmb3JlKHNsaWRlLCByZWYpIDogYXBwZW5kKGxpc3QsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzbGlkZSk7XG4gICAgICAgIGFkZENsYXNzKHNsaWRlLCBvcHRpb25zLmNsYXNzZXMuc2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlKTtcbiAgICAgICAgb2JzZXJ2ZUltYWdlcyhzbGlkZSwgYXBwbHkoZW1pdCwgRVZFTlRfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JFU0laRSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGVtaXQoRVZFTlRfUkVGUkVTSCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlJDEobWF0Y2hlcikge1xuICAgIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoZmlsdGVyKG1hdGNoZXIpLm1hcChmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIFNsaWRlMi5zbGlkZTtcbiAgICB9KSk7XG4gICAgZW1pdChFVkVOVF9SRUZSRVNIJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JFYWNoJDEoaXRlcmF0ZWUsIGV4Y2x1ZGVDbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVzKSB7XG4gICAgZ2V0KGV4Y2x1ZGVDbG9uZXMpLmZvckVhY2goaXRlcmF0ZWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbHRlcihtYXRjaGVyKSB7XG4gICAgcmV0dXJuIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZXMyLmZpbHRlcihpc0Z1bmN0aW9uKG1hdGNoZXIpID8gbWF0Y2hlciA6IGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiAoU2xpZGUyKSB7XG4gICAgICByZXR1cm4gaXNTdHJpbmcobWF0Y2hlcikgPyBtYXRjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyhTbGlkZTIuc2xpZGUsIG1hdGNoZXIpIDogaW5jbHVkZXModG9BcnJheShtYXRjaGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyksIFNsaWRlMi5pbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdHlsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHJvcCwgdmFsdWUsIHVzZUNvbnRhaW5lcikge1xuICAgIGZvckVhY2gkMShmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFNsaWRlMikge1xuICAgICAgU2xpZGUyLnN0eWxlKHByb3AsIHZhbHVlLCB1c2VDb250YWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9ic2VydmVJbWFnZXMoZWxtLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FsbGJhY2spIHtcbiAgICB2YXIgaW1hZ2VzID0gcXVlcnlBbGwoZWxtLCAiaW1nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIpO1xuICAgIHZhciBsZW5ndGggPSBpbWFnZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbicKICAgICAgICAgICAgICAgICAgICAgICAgYidndGgpIHtcbiAgICAgIGltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGJpbmQoaW1nLCAibG9hZCBlcnJvciIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKCEgLS1sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGVuZ3RoKGV4Y2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWRlQ2xvbmVzKSB7XG4gICAgcmV0dXJuIGV4Y2x1ZGVDbG9uZXMgPyBzbGlkZXMubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaCA6IFNsaWRlczIubGVuZ3RoO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNFbm91Z2goKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJldHVybiBTbGlkZXMyLmxlbmd0aCA+IG9wdGlvbnMucGVyUGFnZTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHJveSxcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICByZWdpc3RlcjogcmVnaXN0ZXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIGdldDogZ2V0LFxuICAgIGdldEluOiBnZXRJbixcbiAgICBnZXRBdDogZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0LFxuICAgIGFkZDogYWRkLFxuICAgIHJlbW92ZTogcmVtb3ZlJDEsXG4gICAgZm9yRScKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2g6IGZvckVhY2gkMSxcbiAgICBmaWx0ZXI6IGZpbHRlcixcbiAgICBzdHlsZTogcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlLFxuICAgIGdldExlbmd0aDogZ2V0TGVuZ3RoLFxuICAgIGlzRW5vdWdoOiBpcycKICAgICAgICAgICAgICAgICAgICAgICAgYidFbm91Z2hcbiAgfTtcbn1cblxuZnVuY3Rpb24gTGF5b3V0KFNwbGlkZTIsIENvbXBvbmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlMyA9IEV2ZW50SW50ZXJmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlMy5vbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMy5iaW5kLFxuICAgICAgZW1pdCA9IF9FdmVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UzLmVtaXQ7XG5cbiAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZXM7XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlc29sdmU7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgX0NvbXBvbmVudHMyJEVsZW1lbnRzMiA9IENvbXBvbmVudHMyLkVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgIHJvb3QgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnJvb3QsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdHJhY2sgPSBfQ29tcG9uZW50czIkRWxlbWVudHMyLnRyYWNrLFxuICAgICAgbGlzdCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBfQ29tcG9uZW50czIkRWxlbWVudHMyLmxpc3Q7XG4gIHZhciBnZXRBdCA9IFNsaWRlcy5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXQsXG4gICAgICBzdHlsZVNsaWRlcyA9IFNsaWRlcy5zdHlsZTtcbiAgdmFyIHZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0aWNhbDtcbiAgdmFyIHJvb3RSZWN0O1xuICB2YXIgb3ZlcmZsb3c7XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgICBiaW5kKHdpbmRvdywgInJlc2knCiAgICAgICAgICAgICAgICAgICAgICAgIGInemUgbG9hZCIsIFRocm90dGxlKGFwcGx5KGVtaXQsIEVWRU5UX1JFU0laRSkpKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCBpbml0KTtcbiAgICBvbihFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfUkVTSVpFLCByZXNpemUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmVydGljYWwgPSBvcHRpb25zLmRpcmVjdGlvbiA9PT0gVFRCO1xuICAgIHN0eWxlKHJvbycKICAgICAgICAgICAgICAgICAgICAgICAgYid0LCAibWF4V2lkdGgiLCB1bml0KG9wdGlvbnMud2lkdGgpKTtcbiAgICBzdHlsZSh0cmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHJlc29sdmUoInBhZGRpbmdMZWZ0IiksIGNzc1BhZGRpbmcoZmFsc2UpKTtcbiAgICBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUodHJhY2ssIHJlc29sdmUoInBhZGRpbmdSaWdodCIpLCBjc3NQYWRkaW5nKHRydWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgcmVzaXplKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzaXplKGZvcmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkge1xuICAgIHZhciBuZXdSZWN0ID0gcmVjdChyb290KTtcblxuICAgIGlmIChmb3JjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgfHwgcm9vdFJlY3Qud2lkdGggIT09IG5ld1JlY3Qud2lkdGggfHwgcm9vdFJlY3QuaGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCAhPT0gbmV3UmVjdC5oZWlnaHQpIHtcbiAgICAgIHN0eWxlKHRyYWNrLCAiaGVpZ2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndCIsIGNzc1RyYWNrSGVpZ2h0KCkpO1xuICAgICAgc3R5bGVTbGlkZXMocmVzb2x2ZSgibWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmdpblJpZ2h0IiksIHVuaXQob3B0aW9ucy5nYXApKTtcbiAgICAgIHN0eWxlU2xpZGVzKCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInd2lkdGgiLCBjc3NTbGlkZVdpZHRoKCkpO1xuICAgICAgc3R5bGVTbGlkZXMoImhlaWdodCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBjc3NTbGlkZUhlaWdodCgpLCB0cnVlKTtcbiAgICAgIHJvb3RSZWN0ID0gbmV3UmVjdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0KEVWRU5UX1JFU0laRUQpO1xuXG4gICAgICBpZiAob3ZlcmZsb3cgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyE9PSAob3ZlcmZsb3cgPSBpc092ZXJmbG93KCkpKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhyb290LCBDTEFTU19PVkVSRkxPVywgb3ZlcmZsb3cpO1xuICAgICAgICBlbWl0KEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19PVkVSRkxPVywgb3ZlcmZsb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjc3NQYWRkaW5nKHJpZ2h0KSB7XG4gICAgdmFyIHBhZGRpbmcgPSBvcHRpb25zLnBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RkaW5nO1xuICAgIHZhciBwcm9wID0gcmVzb2x2ZShyaWdodCA/ICJyaWdodCIgOiAibGVmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QiKTtcbiAgICByZXR1cm4gcGFkZGluZyAmJiB1bml0KHBhZGRpbmdbcHJvcF0gfHwgKGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09iamVjdChwYWRkaW5nKSA/IDAgOiBwYWRkaW5nKSkgfHwgIjBweCI7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gY3NzVHJhY2tIZWlnaHQoKSB7XG4gICAgdmFyIGhlaWdodCA9ICIiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgaGVpZ2h0ID0gY3NzSGVpZ2h0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgICAgYXNzZXJ0KGhlaWdodCwgImhlaWdodCBvciBoZWlnaHRSYXRpbyBpcyBtaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzc2luZy4iKTtcbiAgICAgIGhlaWdodCA9ICJjYWxjKCIgKyBoZWlnaHQgKyAiIC0gIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3NQYWRkaW5nKGZhbHNlKSArICIgLSAiICsgY3NzUGFkZGluZyh0cnVlKSArICIpIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc0hlaScKICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQoKSB7XG4gICAgcmV0dXJuIHVuaXQob3B0aW9ucy5oZWlnaHQgfHwgcmVjdChsaXN0KScKICAgICAgICAgICAgICAgICAgICAgICAgYicud2lkdGggKiBvcHRpb25zLmhlaWdodFJhdGlvKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NTbGlkZVdpZHRoKCkge1xuICAgIHJldHVybiBvcHRpb25zLmF1dG9XaWR0aCA/IG51bGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDogdW5pdChvcHRpb25zLmZpeGVkV2lkdGgpIHx8ICh2ZXJ0aWNhbCA/ICIiIDogY3NzUycKICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlU2l6ZSgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlSGVpZ2h0KCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByZXR1cm4gdW5pdChvcHRpb25zLmZpeGVkSGVpZ2h0KSB8fCAodmVydGljYWwgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5hdXRvSGVpZ2h0ID8gbnVsbCA6IGNzc1NsaWRlU2l6ZSgpIDogY3NzSGVpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodCgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1NsaWRlU2l6ZSgpIHtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCA9IHVuaXQob3B0aW9ucy5nYXApO1xuICAgIHJldHVybiAiY2FsYygoMTAwJSIgKyAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCAmJiAiICsgIiArIGdhcCkgKyAiKS8iICsgKG9wdGlvbnMucGVyUGFnZSB8fCAxKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKyAoZ2FwICYmICIgLSAiICsgZ2FwKSArICIpIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0U2l6ZSgpIHtcbiAgICByZXR1cm4gcmVjdChsaXN0KVtyZXNvbHZlKCJ3aWR0aCInCiAgICAgICAgICAgICAgICAgICAgICAgIGInKV07XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZVNpemUoaW5kZXgsIHdpdGhvdXRHYXApJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIFNsaWRlID0gZ2V0QXQoaW5kZXggfHwgMCk7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZSA/IHJlY3QoU2xpZGUuc2xpZGUpW3Jlc29sdmUoIndpZHRoIildICsgKHdpdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3V0R2FwID8gMCA6IGdldEdhcCgpKSA6IDA7XG4gIH1cblxuICBmdW5jdGlvbiB0b3RhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xTaXplKGluZGV4LCB3aXRob3V0R2FwKSB7XG4gICAgdmFyIFNsaWRlID0gZ2V0QXQoaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4KTtcblxuICAgIGlmIChTbGlkZSkge1xuICAgICAgdmFyIHJpZ2h0ID0gcmVjdChTbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUuc2xpZGUpW3Jlc29sdmUoInJpZ2h0IildO1xuICAgICAgdmFyIGxlZnQgPSByZWN0KCcKICAgICAgICAgICAgICAgICAgICAgICAgYidsaXN0KVtyZXNvbHZlKCJsZWZ0IildO1xuICAgICAgcmV0dXJuIGFicyhyaWdodCAtIGxlZicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KSArICh3aXRob3V0R2FwID8gMCA6IGdldEdhcCgpKTtcbiAgICB9XG5cbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBzbGlkZXJTaXplKHdpdGhvdXRHYXApIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIHRvdGFsU2l6ZShTcGxpZGUyLmxlbmd0aCAtIDEpIC0gdG90YWxTaXplJwogICAgICAgICAgICAgICAgICAgICAgICBiJygwKSArIHNsaWRlU2l6ZSgwLCB3aXRob3V0R2FwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRHYXAoKSB7XG4gICAgdmFyIFNsaWRlID0gZ2V0QXQoMCk7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZSAmJiBwYXJzZUZsb2F0KHN0eWxlKFNsaWRlLnNsaWRlLCByZXNvbHZlKCJtYXJnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luUmlnaHQiKSkpIHx8IDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQYWRkaW5nKHJpZycKICAgICAgICAgICAgICAgICAgICAgICAgYidodCkge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KHN0eWxlKHRyYWNrLCByZXNvbHZlKCJwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZGluZyIgKyAocmlnaHQgPyAiUmlnaHQiIDogIkxlZnQiKSkpKSB8fCAwO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIGlzT3ZlcmZsb3coKSB7XG4gICAgcmV0dXJuIFNwbGlkZTIuaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzKEZBREUpIHx8IHNsaWRlclNpemUodHJ1ZSkgPiBsaXN0U2l6ZSgpO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIHJlc2l6ZTogcmVzaXplLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsaXN0U2l6ZTogbGlzdFNpemUsXG4gICAgc2xpZGVTaXplOiBzbGlkZVNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIHNsaWRlclNpemU6IHNsaWRlclNpemUsXG4gICAgdG90YWxTaXplOiB0b3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWxTaXplLFxuICAgIGdldFBhZGRpbmc6IGdldFBhZGRpbmcsXG4gICAgaXNPdmVyZmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3c6IGlzT3ZlcmZsb3dcbiAgfTtcbn1cblxudmFyIE1VTFRJUExJRVIgPSAyO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gQ2xvbmVzKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgdmFyIG9uID0gZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLm9uO1xuICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtZW50cyxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG4gIHZhciByZXNvbHZlID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICB2YXIgY2xvbmVzID0gW107XG4gIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgY2xvbmVDb3VudDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBvbihFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfUkVGUkVTSCwgcmVtb3VudCk7XG4gICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NJWkVdLCBvYnNlcnZlKTtcblxuICAgIGlmIChjbG9uZUNvdW50ID0gY29tcHV0ZUNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZUNvdW50KCkpIHtcbiAgICAgIGdlbmVyYXRlKGNsb25lQ291bnQpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyLkxheW91dC5yZXNpemUodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHJlbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICAgIG1vdW50KCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICByZW1vdmUoY2xvbmVzKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1wdHkoY2xvbmVzKTtcbiAgICBldmVudC5kZXN0cm95KCk7XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gb2JzZXJ2ZSgpIHtcbiAgICB2YXIgY291bnQgPSBjb21wdXRlQ2xvbmVDb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcblxuICAgIGlmIChjbG9uZUNvdW50ICE9PSBjb3VudCkge1xuICAgICAgaWYgKGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG9uZUNvdW50IDwgY291bnQgfHwgIWNvdW50KSB7XG4gICAgICAgIGV2ZW50LmVtaXQoRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFRlJFU0gpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdlbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmF0ZShjb3VudCkge1xuICAgIHZhciBzbGlkZXMgPSBTbGlkZXMuZ2V0KCkuc2xpY2UoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIGxlbmd0aCA9IHNsaWRlcy5sZW5ndGg7XG5cbiAgICBpZiAobGVuZ3RoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgd2hpbGUgKHNsaWRlcy5sZW5ndGggPCBjb3VudCkge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcHVzaChzbGlkZXMsIHNsaWRlcyk7XG4gICAgICB9XG5cbiAgICAgIHB1c2goc2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcy5zbGljZSgtY291bnQpLCBzbGlkZXMuc2xpY2UoMCwgY291bnQpKS5mb3JFYWNoKGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAoU2xpZGUsIGluZGV4KSB7XG4gICAgICAgIHZhciBpc0hlYWQgPSBpbmRleCA8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb3VudDtcbiAgICAgICAgdmFyIGNsb25lID0gY2xvbmVEZWVwKFNsaWRlLnNsaWRlLCBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgpO1xuICAgICAgICBpc0hlYWQgPyBiZWZvcmUoY2xvbmUsIHNsaWRlc1swXS5zbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIDogYXBwZW5kKEVsZW1lbnRzLmxpc3QsIGNsb25lKTtcbiAgICAgICAgcHVzaChjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLCBjbG9uZSk7XG4gICAgICAgIFNsaWRlcy5yZWdpc3RlcihjbG9uZSwgaW5kZXggLSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgKyAoaXNIZWFkID8gMCA6IGxlbmd0aCksIFNsaWRlLmluZGV4KTtcbiAgICAgIH0pJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbG9uZURlZXAoZWxtLCBpbmRleCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB2YXIgY2xvbmUgPSBlbG0uY2xvbmVOb2RlKHRydWUpO1xuICAgIGFkZENsYXNzKGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uZSwgb3B0aW9ucy5jbGFzc2VzLmNsb25lKTtcbiAgICBjbG9uZS5pZCA9IFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Jvb3QuaWQgKyAiLWNsb25lIiArIHBhZChpbmRleCArIDEpO1xuICAgIHJldHVybiBjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXRlQ2xvbmVDb3VudCgpIHtcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsb25lczIgPSBvcHRpb25zLmNsb25lcztcblxuICAgIGlmICghU3BsaWRlMi5pcygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTE9PUCkpIHtcbiAgICAgIGNsb25lczIgPSAwO1xuICAgIH0gZWxzZSBpZiAoaXNVbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZpbmVkKGNsb25lczIpKSB7XG4gICAgICB2YXIgZml4ZWRTaXplID0gb3B0aW9uc1tyZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb2x2ZSgiZml4ZWRXaWR0aCIpXSAmJiBDb21wb25lbnRzMi5MYXlvdXQuc2xpZGVTaXplKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicwKTtcbiAgICAgIHZhciBmaXhlZENvdW50ID0gZml4ZWRTaXplICYmIGNlaWwocmVjdChFbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMudHJhY2spW3Jlc29sdmUoIndpZHRoIildIC8gZml4ZWRTaXplKTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjbG9uZXMyID0gZml4ZWRDb3VudCB8fCBvcHRpb25zW3Jlc29sdmUoImF1dG9XaWR0aCIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ10gJiYgU3BsaWRlMi5sZW5ndGggfHwgb3B0aW9ucy5wZXJQYWdlICogTVVMVElQTElFUjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lczI7XG4gIH1cblxuICByZXR1cm4ge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveVxuICB9O1xufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gTW92ZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19FdmVudEludGVyZmFjZTQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF9FdmVudEludGVyZmFjZTQub24sXG4gICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJzQuZW1pdDtcblxuICB2YXIgc2V0ID0gU3BsaWRlMi5zdGF0ZS5zZXQ7XG4gIHZhciBfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyJExheW91dCA9IENvbXBvbmVudHMyLkxheW91dCxcbiAgICAgIHNsaWRlUycKICAgICAgICAgICAgICAgICAgICAgICAgYidpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnNsaWRlU2l6ZSxcbiAgICAgIGdldFBhZGRpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnID0gX0NvbXBvbmVudHMyJExheW91dC5nZXRQYWRkaW5nLFxuICAgICAgdG90YWxTaXplICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IF9Db21wb25lbnRzMiRMYXlvdXQudG90YWxTaXplLFxuICAgICAgbGlzdFNpemUgPSBfQycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyJExheW91dC5saXN0U2l6ZSxcbiAgICAgIHNsaWRlclNpemUgPSBfQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMyJExheW91dC5zbGlkZXJTaXplO1xuICB2YXIgX0NvbXBvbmVudHMyJERpcmVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbyA9IENvbXBvbmVudHMyLkRpcmVjdGlvbixcbiAgICAgIHJlc29sdmUgPSBfQ29tcG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudHMyJERpcmVjdGlvLnJlc29sdmUsXG4gICAgICBvcmllbnQgPSBfQ29tcG9uZW50czIkRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcmVjdGlvLm9yaWVudDtcbiAgdmFyIF9Db21wb25lbnRzMiRFbGVtZW50czMgPSBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIuRWxlbWVudHMsXG4gICAgICBsaXN0ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMycKICAgICAgICAgICAgICAgICAgICAgICAgYicubGlzdCxcbiAgICAgIHRyYWNrID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMy50cmFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2s7XG4gIHZhciBUcmFuc2l0aW9uO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIFQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmFuc2l0aW9uID0gQ29tcG9uZW50czIuVHJhbnNpdGlvbjtcbiAgICBvbihbRVZFTlRfTU8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVU5URUQsIEVWRU5UX1JFU0laRUQsIEVWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0hdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVwb3NpdGlvbik7XG4gIH1cblxuICBmdW5jdGlvbiByZXBvc2l0aW9uKCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIUNvbXBvbmVudHMyLkNvbnRyb2xsZXIuaXNCdXN5KCkpIHtcbiAgICAgIENvbXBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lbnRzMi5TY3JvbGwuY2FuY2VsKCk7XG4gICAgICBqdW1wKFNwbGlkZTIuaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIENvbXBvbmVudHMyLlNsaWRlcy51cGRhdGUoKTtcbiAgICB9XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gbW92ZShkZXN0LCBpbmRleCwgcHJldiwgY2FsbGJhY2spIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgaWYgKGRlc3QgIT09IGluZGV4ICYmIGNhblNoaWZ0KGRlc3QgPiBwcmV2KSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGNhbmNlbCgpO1xuICAgICAgdHJhbnNsYXRlKHNoaWZ0KGdldFBvc2l0aW9uKCksICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0ID4gcHJldiksIHRydWUpO1xuICAgIH1cblxuICAgIHNldChNT1ZJTkcpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0KEVWRU5UX01PVkUsIGluZGV4LCBwcmV2LCBkZXN0KTtcbiAgICBUcmFuc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5zdGFydChpbmRleCwgZnVuY3Rpb24gKCkge1xuICAgICAgc2V0KElETEUpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVtaXQoRVZFTlRfTU9WRUQsIGluZGV4LCBwcmV2LCBkZXN0KTtcbiAgICAgIGNhbGxiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FjayAmJiBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24ganVtcCgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXgpIHtcbiAgICB0cmFuc2xhdGUodG9Qb3NpdGlvbihpbmRleCwgdHJ1ZSkpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZShwb3NpdGlvbiwgcHJldmVudExvb3AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgaWYgKCFTcGxpZGUyLmlzKEZBREUpKSB7XG4gICAgICB2YXIgZGVzdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aW9uID0gcHJldmVudExvb3AgPyBwb3NpdGlvbiA6IGxvb3AocG9zaXRpb24pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHN0eWxlKGxpc3QsICJ0cmFuc2Zvcm0iLCAidHJhbnNsYXRlIiArIHJlc29sdmUoIicKICAgICAgICAgICAgICAgICAgICAgICAgYidYIikgKyAiKCIgKyBkZXN0aW5hdGlvbiArICJweCkiKTtcbiAgICAgIHBvc2l0aW9uICE9PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdGluYXRpb24gJiYgZW1pdChFVkVOVF9TSElGVEVEKTtcbiAgICB9XG4gIH1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZnVuY3Rpb24gbG9vcChwb3NpdGlvbikge1xuICAgIGlmIChTcGxpZGUyLmlzKExPT1ApJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIGluZGV4ID0gdG9JbmRleChwb3NpdGlvbik7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGV4Y2VlZGVkTWF4ID0gaW5kZXggPiBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmQoKTtcbiAgICAgIHZhciBleGNlZWRlZE1pbiA9IGluZGV4IDwgMDtcblxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChleGNlZWRlZE1pbiB8fCBleGNlZWRlZE1heCkge1xuICAgICAgICBwb3NpdGlvbiA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBzaGlmdChwb3NpdGlvbiwgZXhjZWVkZWRNYXgpO1xuICAgICAgfVxuICAgIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gcG9zaXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBzaGlmdChwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sIGJhY2t3YXJkcykge1xuICAgIHZhciBleGNlc3MgPSBwb3NpdGlvbiAtIGdldExpbWl0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhiYWNrd2FyZHMpO1xuICAgIHZhciBzaXplID0gc2xpZGVyU2l6ZSgpO1xuICAgIHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbiAtPSBvcmllbnQoc2l6ZSAqIChjZWlsKGFicyhleGNlc3MpIC8gc2l6ZSkgfHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDEpKSAqIChiYWNrd2FyZHMgPyAxIDogLTEpO1xuICAgIHJldHVybiBwb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgdHJhbnNsYXRlKGdldFBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbigpLCB0cnVlKTtcbiAgICBUcmFuc2l0aW9uLmNhbmNlbCgpO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIHRvSW5kZXgocG9zaXRpb24pIHtcbiAgICB2YXIgU2xpZGVzID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLlNsaWRlcy5nZXQoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNsaWRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNsaWRlSW5kZXggPSBTbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInW2ldLmluZGV4O1xuICAgICAgdmFyIGRpc3RhbmNlID0gYWJzKHRvUG9zaXRpb24oc2xpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXgsIHRydWUpIC0gcG9zaXRpb24pO1xuXG4gICAgICBpZiAoZGlzdGFuY2UgPD0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG1pbkRpc3RhbmNlKSB7XG4gICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBpbmRleCA9IHNsaWRlSW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIGZ1bmN0aW9uIHRvUG9zaXRpb24oaW5kZXgsIHRyaW1taW5nKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBwb3NpdGlvbiA9IG9yaWVudCh0b3RhbFNpemUoaW5kZXggLSAxKSAtIG9mZnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoaW5kZXgpKTtcbiAgICByZXR1cm4gdHJpbW1pbmcgPyB0cmltKHBvc2l0aW9uKSA6IHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFBvc2l0aW9uKCkge1xuICAgIHZhciBsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmdCA9IHJlc29sdmUoImxlZnQiKTtcbiAgICByZXR1cm4gcmVjdChsaXN0KVtsZWZ0XSAtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyByZWN0KHRyYWNrKVtsZWZ0XSArIG9yaWVudChnZXRQYWRkaW5nKGZhbHNlKSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gdHJpbShwb3NpdGlvbikge1xuICAgIGlmIChvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cmltU3BhY2UgJiYgU3BsaWRlMi5pcyhTTElERSkpIHtcbiAgICAgIHBvc2l0aW9uID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYW1wKHBvc2l0aW9uLCAwLCBvcmllbnQoc2xpZGVyU2l6ZSh0cnVlKSAtIGxpc3RTaXonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSgpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG9mZnNldChpbmRleCkge1xuICAgIHZhciBmb2N1cyA9IG9wdGlvbnMuZm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHJldHVybiBmb2N1cyA9PT0gImNlbnRlciIgPyAobGlzdFNpemUoKSAtIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZVNpemUoaW5kZXgsIHRydWUpKSAvIDIgOiArZm9jdXMgKiBzbGlkZVNpemUoaW5kZXgpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid8fCAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGltaXQobWF4KSB7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0b1Bvc2l0aW9uKG1heCA/IENvbXBvbmVudHMyLkNvbnRyb2xsZXIuZ2V0RW5kKCkgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCwgISFvcHRpb25zLnRyaW1TcGFjZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjYW5TaGlmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoYmFja3dhcmRzKSB7XG4gICAgdmFyIHNoaWZ0ZWQgPSBvcmllbnQoc2hpZnQoZ2V0UG9zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2l0aW9uKCksIGJhY2t3YXJkcykpO1xuICAgIHJldHVybiBiYWNrd2FyZHMgPyBzaGlmdGVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA+PSAwIDogc2hpZnRlZCA8PSBsaXN0W3Jlc29sdmUoInNjcm9sbFdpZHRoIildIC0gcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3QodHJhY2spW3Jlc29sdmUoIndpZHRoIildO1xuICB9XG5cbiAgZnVuY3Rpb24gZXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkTGltaXQobWF4LCBwb3NpdGlvbikge1xuICAgIHBvc2l0aW9uID0gaXNVbmRlZmluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VkKHBvc2l0aW9uKSA/IGdldFBvc2l0aW9uKCkgOiBwb3NpdGlvbjtcbiAgICB2YXIgZXhjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VlZGVkTWluID0gbWF4ICE9PSB0cnVlICYmIG9yaWVudChwb3NpdGlvbikgPCBvcmllbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGdldExpbWl0KGZhbHNlKSk7XG4gICAgdmFyIGV4Y2VlZGVkTWF4ID0gbWF4ICE9PSBmYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2UgJiYgb3JpZW50KHBvc2l0aW9uKSA+IG9yaWVudChnZXRMaW1pdCh0cnVlKSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBleGNlZWRlZE1pbiB8fCBleGNlZWRlZE1heDtcbiAgfVxuXG4gIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBtb3ZlOiBtb3ZlLFxuICAgIGp1bXA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidqdW1wLFxuICAgIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICAgIHNoaWZ0OiBzaGlmdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgY2FuY2VsOiBjYW5jZWwsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9Qb3NpdGlvbjogdG9Qb3NpdGlvbixcbiAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIGdldExpbWl0OiBnZXRMaW1pdCxcbiAgICBleGNlZWRlZExpbWl0OiBleGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWVkZWRMaW1pdCxcbiAgICByZXBvc2l0aW9uOiByZXBvc2l0aW9uXG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBDb250cm9sbGVyKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgX0V2ZW50SW50ZXJmYWNlNSA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNS5vbixcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJmYWNlNS5lbWl0O1xuXG4gIHZhciBNb3ZlID0gQ29tcG9uZW50czIuTW92ZTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBnZXRQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24sXG4gICAgICBnZXRMaW1pdCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBNb3ZlLmdldExpbWl0LFxuICAgICAgdG9Qb3NpdGlvbiA9IE1vdmUudG9Qb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb247XG4gIHZhciBfQ29tcG9uZW50czIkU2xpZGVzID0gQ29tcG9uZW50czIuU2xpZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcyxcbiAgICAgIGlzRW5vdWdoID0gX0NvbXBvbmVudHMyJFNsaWRlcy5pc0Vub3VnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2gsXG4gICAgICBnZXRMZW5ndGggPSBfQ29tcG9uZW50czIkU2xpZGVzLmdldExlbmcnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGg7XG4gIHZhciBvbWl0RW5kID0gb3B0aW9ucy5vbWl0RW5kO1xuICB2YXIgaXNMb28nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncCA9IFNwbGlkZTIuaXMoTE9PUCk7XG4gIHZhciBpc1NsaWRlID0gU3BsaWRlMi5pcyhTTEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInREUpO1xuICB2YXIgZ2V0TmV4dCA9IGFwcGx5KGdldEFkamFjZW50LCBmYWxzZSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgZ2V0UHJldiA9IGFwcGx5KGdldEFkamFjZW50LCB0cnVlKTtcbiAgdmFyIGN1cnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInSW5kZXggPSBvcHRpb25zLnN0YXJ0IHx8IDA7XG4gIHZhciBlbmRJbmRleDtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBwcmV2SW5kZXggPSBjdXJySW5kZXg7XG4gIHZhciBzbGlkZUNvdW50O1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBlck1vdmU7XG4gIHZhciBwZXJQYWdlO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpbml0KCk7XG4gICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9FTkRfSU5ERVhfQ0hBTkdFRF0sIGluaXQpO1xuICAgIG9uKEVWRU5UX1JFU0laRUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidvblJlc2l6ZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICBzbGlkZUNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VudCA9IGdldExlbmd0aCh0cnVlKTtcbiAgICBwZXJNb3ZlID0gb3B0aW9ucy5wZXJNb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgIGVuZEluZGV4ID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEVuZCgpO1xuICAgIHZhciBpbmRleCA9IGNsYW1wKGN1cnJJbmRleCwgMCwgb21pdEVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2QgPyBlbmRJbmRleCA6IHNsaWRlQ291bnQgLSAxKTtcblxuICAgIGlmIChpbmRleCAhJwogICAgICAgICAgICAgICAgICAgICAgICBiJz09IGN1cnJJbmRleCkge1xuICAgICAgY3VyckluZGV4ID0gaW5kZXg7XG4gICAgICBNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ292ZS5yZXBvc2l0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25SZXNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCgpIHtcbiAgICBpZiAoZW5kSW5kZXggIT09IGdldEVuZCgpKSB7XG4gICAgICBlbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGdvKGNvbnRyb2wsIGFsbG93U2FtZUluZGV4LCBjYWxsYmFjaykge1xuICAgIGlmICghaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzQnVzeSgpKSB7XG4gICAgICB2YXIgZGVzdCA9IHBhcnNlKGNvbnRyb2wpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBpbmRleCA9IGxvb3AoZGVzdCk7XG5cbiAgICAgIGlmIChpbmRleCA+IC0xICcKICAgICAgICAgICAgICAgICAgICAgICAgYicmJiAoYWxsb3dTYW1lSW5kZXggfHwgaW5kZXggIT09IGN1cnJJbmRleCkpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHNldEluZGV4KGluZGV4KTtcbiAgICAgICAgTW92ZS5tb3ZlKGRlc3QsIGluZGV4LCBwcicKICAgICAgICAgICAgICAgICAgICAgICAgYidldkluZGV4LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHNuYXAsIGNhbGxiYWNrKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIENvbXBvbmVudHMyLlNjcm9sbC5zY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hcCwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGluZGV4ID0gbG9vcChNb3ZlLnRvSW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4KGdldFBvc2l0aW9uKCkpKTtcbiAgICAgIHNldEluZGV4KG9taXRFbmQgPyBtaW4oaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4LCBlbmRJbmRleCkgOiBpbmRleCk7XG4gICAgICBjYWxsYmFjayAmJiBjYWxsYmFjaygpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlKGNvbnRyb2wpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGluZGV4ID0gY3VyckluZGV4O1xuXG4gICAgaWYgKGlzU3RyaW5nKGNvbnRyb2wpJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgdmFyIF9yZWYgPSBjb250cm9sLm1hdGNoKC8oWytcXC08Pl0pKFxcZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicrKT8vKSB8fCBbXSxcbiAgICAgICAgICBpbmRpY2F0b3IgPSBfcmVmWzFdLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBudW1iZXIgPSBfcmVmWzJdO1xuXG4gICAgICBpZiAoaW5kaWNhdG9yID09PScKICAgICAgICAgICAgICAgICAgICAgICAgYicgIisiIHx8IGluZGljYXRvciA9PT0gIi0iKSB7XG4gICAgICAgIGluZGV4ID0gY29tcHV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidEZXN0SW5kZXgoY3VyckluZGV4ICsgKygiIiArIGluZGljYXRvciArICgrbnVtYmVyIHx8JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxKSksIGN1cnJJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKGluZGljYXRvciA9PT0gIj4iJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICBpbmRleCA9IG51bWJlciA/IHRvSW5kZXgoK251bWJlcikgOiBnZXROJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4dCh0cnVlKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5kaWNhdG9yID09PSAiPCIpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGluZGV4ID0gZ2V0UHJldih0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlIHtcbiAgICAgIGluZGV4ID0gaXNMb29wID8gY29udHJvbCA6IGNsYW1wKGNvbnRyb2wsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAwLCBlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIGdldEFkamFjZW50KHByZXYsIGRlc3RpbmF0aW9uKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBudW1iZXIgPSBwZXJNb3ZlIHx8IChoYXNGb2N1cygpID8gMSA6IHBlclBhZ2UpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZGVzdCA9IGNvbXB1dGVEZXN0SW5kZXgoY3VyckluZGV4ICsgbnVtYmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIChwcmV2ID8gLTEgOiAxKSwgY3VyckluZGV4LCAhKHBlck1vdmUgfHwgaGFzRm9jdXMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykpKTtcblxuICAgIGlmIChkZXN0ID09PSAtMSAmJiBpc1NsaWRlKSB7XG4gICAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgYicgKCFhcHByb3hpbWF0ZWx5RXF1YWwoZ2V0UG9zaXRpb24oKSwgZ2V0TGltaXQoIXByZXYpJwogICAgICAgICAgICAgICAgICAgICAgICBiJywgMSkpIHtcbiAgICAgICAgcmV0dXJuIHByZXYgPyAwIDogZW5kSW5kZXg7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZXN0aW5hdGlvbiA/IGRlc3QgOiBsb29wKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVEZXN0SW5kZXgoZGVzdCwgZnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb20sIHNuYXBQYWdlKSB7XG4gICAgaWYgKGlzRW5vdWdoKCkgfHwgaGFzRm9jdXMoKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIHZhciBpbmRleCA9IGNvbXB1dGVNb3ZhYmxlRGVzdEluZGV4KGRlc3QpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgICAgaWYgKGluZGV4ICE9PSBkZXN0KSB7XG4gICAgICAgIGZyb20gPSBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcbiAgICAgICAgZGVzdCA9IGluZGV4O1xuICAgICAgICBzbmFwUGFnZSA9IGZhbHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlc3QgPCAwIHx8IGRlc3QgPiBlbmRJbmRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gpIHtcbiAgICAgICAgaWYgKCFwZXJNb3ZlICYmIChiZXR3ZWVuKDAsIGRlc3QsIGZyb20sJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cnVlKSB8fCBiZXR3ZWVuKGVuZEluZGV4LCBmcm9tLCBkZXN0LCB0cnVlKSkpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgZGVzdCA9IHRvSW5kZXgodG9QYWdlKGRlc3QpKTtcbiAgICAgICAgfSBlbHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICAgICAgaWYgKGlzTG9vcCkge1xuICAgICAgICAgICAgZGVzdCA9IHNuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FwUGFnZSA/IGRlc3QgPCAwID8gLShzbGlkZUNvdW50ICUgcGVyUGFnZSB8fCBwZXJQYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkgOiBzbGlkZUNvdW50IDogZGVzdDtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLnJld2luZCkge1xuICAgICAgICAgICAgZGVzdCA9IGRlc3QgPCAwID8gZW5kSW5kZXggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVzdCA9IC0xO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzbicKICAgICAgICAgICAgICAgICAgICAgICAgYidhcFBhZ2UgJiYgZGVzdCAhPT0gZnJvbSkge1xuICAgICAgICAgIGRlc3QgPSB0b0luZGV4KCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0b1BhZ2UoZnJvbSkgKyAoZGVzdCA8IGZyb20gPyAtMSA6IDEpKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGVzdCA9IC0xO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICByZXR1cm4gZGVzdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVNb3ZhYicKICAgICAgICAgICAgICAgICAgICAgICAgYidsZURlc3RJbmRleChkZXN0KSB7XG4gICAgaWYgKGlzU2xpZGUgJiYgb3B0aW9ucy50cmltUycKICAgICAgICAgICAgICAgICAgICAgICAgYidwYWNlID09PSAibW92ZSIgJiYgZGVzdCAhPT0gY3VyckluZGV4KSB7XG4gICAgICB2YXIgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvc2l0aW9uID0gZ2V0UG9zaXRpb24oKTtcblxuICAgICAgd2hpbGUgKHBvc2l0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0gdG9Qb3NpdGlvbihkZXN0LCB0cnVlKSAmJiBiZXR3ZWVuKGRlc3QsIDAsIFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLmxlbmd0aCAtIDEsICFvcHRpb25zLnJld2luZCkpIHtcbiAgICAgICAgZGVzdCA8IGN1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JySW5kZXggPyAtLWRlc3QgOiArK2Rlc3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBkZXN0O1xuICB9XG5cbiAgZnVuY3Rpb24gbG9vcChpbmRleCkge1xuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gaXNMb29wID8gKGluZGV4ICsgc2xpZGVDb3VudCkgJSBzbGlkZUNvdW50IHx8IDAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogaW5kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRFbmQoKSB7XG4gICAgdmFyIGVuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBzbGlkZUNvdW50IC0gKGhhc0ZvY3VzKCkgfHwgaXNMb29wICYmIHBlck1vdmUgPyAxICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IHBlclBhZ2UpO1xuXG4gICAgd2hpbGUgKG9taXRFbmQgJiYgZW5kLS0gPiAwKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKHRvUG9zaXRpb24oc2xpZGVDb3VudCAtIDEsIHRydWUpICE9PSB0b1BvcycKICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbihlbmQsIHRydWUpKSB7XG4gICAgICAgIGVuZCsrO1xuICAgICAgICBicmVhaycKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYW1wKGVuZCwgMCwgc2xpZGVDJwogICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgLSAxKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSW5kZXgocGFnZSkge1xuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gY2xhbXAoaGFzRm9jdXMoKSA/IHBhZ2UgOiBwZXJQYWdlICogcGFnZSwgMCwgZScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZEluZGV4KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvUGFnZShpbmRleCkge1xuICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gaGFzRm9jdXMoKSA/IG1pbihpbmRleCwgZW5kSW5kZXgpIDogZmxvb3IoKGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneCA+PSBlbmRJbmRleCA/IHNsaWRlQ291bnQgLSAxIDogaW5kZXgpIC8gcGVyUGFnZSk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gdG9EZXN0KGRlc3RpbmF0aW9uKSB7XG4gICAgdmFyIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29zZXN0ID0gTW92ZS50b0luZGV4KGRlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gaXNTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPyBjbGFtcChjbG9zZXN0LCAwLCBlbmRJbmRleCkgOiBjbG9zZXN0O1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIHNldEluZGV4KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ICE9PSBjdXJySScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KSB7XG4gICAgICBwcmV2SW5kZXggPSBjdXJySW5kZXg7XG4gICAgICBjdXJySScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SW5kZXgocHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3YpIHtcbiAgICByZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJbmRleDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBoYXNGb2N1cygpIHtcbiAgICByZXR1cm4gIWlzVW5kZWZpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZChvcHRpb25zLmZvY3VzKSB8fCBvcHRpb25zLmlzTmF2aWdhdGlvbjtcbiAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiBpc0J1c3koKSB7XG4gICAgcmV0dXJuIFNwbGlkZTIuc3RhdGUuaXMoW00nCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1ZJTkcsIFNDUk9MTElOR10pICYmICEhb3B0aW9ucy53YWl0Rm9yVHJhbnNpdGlvbjtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBnbzogZ28sXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNjcm9sbDogc2Nyb2xsLFxuICAgIGdldE5leHQ6IGdldE5leHQsXG4gICAgZ2V0UHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXY6IGdldFByZXYsXG4gICAgZ2V0QWRqYWNlbnQ6IGdldEFkamFjZW50LFxuICAgIGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRFbmQ6IGdldEVuZCxcbiAgICBzZXRJbmRleDogc2V0SW5kZXgsXG4gICAgZ2V0SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4OiBnZXRJbmRleCxcbiAgICB0b0luZGV4OiB0b0luZGV4LFxuICAgIHRvUGFnZTonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRvUGFnZSxcbiAgICB0b0Rlc3Q6IHRvRGVzdCxcbiAgICBoYXNGb2N1czogaGFzRm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3VzLFxuICAgIGlzQnVzeTogaXNCdXN5XG4gIH07XG59XG5cbnZhciBYTUxfTkFNRV9TUEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ0UgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO1xudmFyIFBBVEggPSAibTE1LjUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIDAuOTMyLTQuMyA0LjM4IDE0LjUgMTQuNi0xNC41IDE0LjUgNC4zIDQuNCAxNC42LTE0LicKICAgICAgICAgICAgICAgICAgICAgICAgYic2IDQuNC00LjMtNC40LTQuNC0xNC42LTE0LjZ6IjtcbnZhciBTSVpFID0gNDA7XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBBcnJvd3MoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24gPSBldmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24sXG4gICAgICBiaW5kID0gZXZlbnQuYmluZCxcbiAgICAgIGVtaXQgPSBldmVudC4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW1pdDtcbiAgdmFyIGNsYXNzZXMgPSBvcHRpb25zLmNsYXNzZXMsXG4gICAgICBpMTgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiA9IG9wdGlvbnMuaTE4bjtcbiAgdmFyIEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzLFxuICAgICAgQ29udHJvbGxlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5hcnJvd3MsXG4gICAgICB0cmFjayA9IEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVtZW50cy50cmFjaztcbiAgdmFyIHdyYXBwZXIgPSBwbGFjZWhvbGRlcjtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBwcmV2ID0gRWxlbWVudHMucHJldjtcbiAgdmFyIG5leHQgPSBFbGVtZW50cy5uZScKICAgICAgICAgICAgICAgICAgICAgICAgYid4dDtcbiAgdmFyIGNyZWF0ZWQ7XG4gIHZhciB3cmFwcGVyQ2xhc3NlcztcbiAgdmFyIGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJvd3MgPSB7fTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9uKEVWRU5UX1VQREFURUQsIHJlbW91bnQpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbW91bnQoKSB7XG4gICAgZGVzdHJveSgpO1xuICAgIG1vdW50KCk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMuYXJyb3dzOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIGlmIChlbmFibGVkICYmICEocHJldiAmJiBuZXh0KSkge1xuICAgICAgY3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWF0ZUFycm93cygpO1xuICAgIH1cblxuICAgIGlmIChwcmV2ICYmIG5leHQpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBhc3NpZ24oYXJyb3dzLCB7XG4gICAgICAgIHByZXY6IHByZXYsXG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYiduZXh0OiBuZXh0XG4gICAgICB9KTtcbiAgICAgIGRpc3BsYXkod3JhcHBlciwgZW5hYicKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWQgPyAiIiA6ICJub25lIik7XG4gICAgICBhZGRDbGFzcyh3cmFwcGVyLCB3cmFwcGVyQycKICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzZXMgPSBDTEFTU19BUlJPV1MgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcblxuICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgbGlzdGVuKCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB1cGRhdGUoKTtcbiAgICAgICAgc2V0QXR0cmlidXRlKFtwcmV2LCBuZXh0XSwgQVJJQScKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ09OVFJPTFMsIHRyYWNrLmlkKTtcbiAgICAgICAgZW1pdChFVkVOVF9BUlJPV1NfTU9VTicKICAgICAgICAgICAgICAgICAgICAgICAgYidURUQsIHByZXYsIG5leHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95KCkge1xuICAgIGV2ZW50LmRlc3Ryb3koKTtcbiAgICByZW1vdmVDbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgYicod3JhcHBlciwgd3JhcHBlckNsYXNzZXMpO1xuXG4gICAgaWYgKGNyZWF0ZWQpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZW1vdmUocGxhY2Vob2xkZXIgPyBbcHJldiwgbmV4dF0gOiB3cmFwcGVyKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBwcmV2ID0gbmV4dCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVBdHRyaWJ1dGUoW3ByZXYsIG5leHRdLCBBTExfQVRUUklCVVRFUyk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIGZ1bmN0aW9uIGxpc3RlbigpIHtcbiAgICBvbihbRVZFTlRfTU9VTlRFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0QsIEVWRU5UX01PVkVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9TQ1JPTExFRCwgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0VORF9JTkRFWF9DSEFOR0VEXSwgdXBkYXRlKTtcbiAgICBiaW5kKG5leHQsICJjbGljayInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhcHBseShnbywgIj4iKSk7XG4gICAgYmluZChwcmV2LCAiY2xpY2siLCBhcHBseShnbywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICI8IikpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ28oY29udHJvbCkge1xuICAgIENvbnRybycKICAgICAgICAgICAgICAgICAgICAgICAgYidsbGVyLmdvKGNvbnRyb2wsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXInCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm93cygpIHtcbiAgICB3cmFwcGVyID0gcGxhY2Vob2xkZXIgfHwgY3JlYXRlKCJkaXYiLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhc3Nlcy5hcnJvd3MpO1xuICAgIHByZXYgPSBjcmVhdGVBcnJvdyh0cnVlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbmV4dCA9IGNyZWF0ZUFycm93KGZhbHNlKTtcbiAgICBjcmVhdGVkID0gdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgYXBwZW5kKHdyYXBwZXIsIFtwcmV2LCBuZXh0XSk7XG4gICAgIXBsYWNlaCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbGRlciAmJiBiZWZvcmUod3JhcHBlciwgdHJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNyZWF0ZUFycm93KHByZXYyKSB7XG4gICAgdmFyIGFycm93ID0gIjxidXR0b24gY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIiIgKyBjbGFzc2VzLmFycm93ICsgIiAiICsgKHByZXYyID8gY2xhc3Nlcy5wcmV2IDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNsYXNzZXMubmV4dCkgKyAiXFwiIHR5cGU9XFwiYnV0dG9uXFwiPjxzdmcgeG1sbnM9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xcIiIgKyBYTUxfTkFNRV9TUEFDRSArICJcXCIgdmlld0JveD1cXCIwIDAgIiArIFNJWicKICAgICAgICAgICAgICAgICAgICAgICAgYidFICsgIiAiICsgU0laRSArICJcXCIgd2lkdGg9XFwiIiArIFNJWkUgKyAiXFwiIGhlaWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaHQ9XFwiIiArIFNJWkUgKyAiXFwiIGZvY3VzYWJsZT1cXCJmYWxzZVxcIj48cGF0aCBkPScKICAgICAgICAgICAgICAgICAgICAgICAgYidcXCIiICsgKG9wdGlvbnMuYXJyb3dQYXRoIHx8IFBBVEgpICsgIlxcIiAvPiI7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBwYXJzZUh0bWwoYXJyb3cpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpIHtcbiAgICBpZiAocHJldiAmJiBuZXh0KSB7XG4gICAgICB2YXIgaW5kZXggPSBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BsaWRlMi5pbmRleDtcbiAgICAgIHZhciBwcmV2SW5kZXggPSBDb250cm9sbGVyLmdldFByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2KCk7XG4gICAgICB2YXIgbmV4dEluZGV4ID0gQ29udHJvbGxlci5nZXROZXh0KCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgdmFyIHByZXZMYWJlbCA9IHByZXZJbmRleCA+IC0xICYmIGluZGV4IDwgcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZJbmRleCA/IGkxOG4ubGFzdCA6IGkxOG4ucHJldjtcbiAgICAgIHZhciBuZXh0TGFiZWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbmV4dEluZGV4ID4gLTEgJiYgaW5kZXggPiBuZXh0SW5kZXggPyBpMThuLmZpcnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IGkxOG4ubmV4dDtcbiAgICAgIHByZXYuZGlzYWJsZWQgPSBwcmV2SW5kZXggPCAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIG5leHQuZGlzYWJsZWQgPSBuZXh0SW5kZXggPCAwO1xuICAgICAgc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShwcmV2LCBBUklBX0xBQkVMLCBwcmV2TGFiZWwpO1xuICAgICAgc2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZShuZXh0LCBBUklBX0xBQkVMLCBuZXh0TGFiZWwpO1xuICAgICAgZW1pdChFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQVJST1dTX1VQREFURUQsIHByZXYsIG5leHQsIHByZXZJbmRleCwgbmV4dEluZGV4KTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhcnJvd3M6IGFycm93cyxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTogdXBkYXRlXG4gIH07XG59XG5cbnZhciBJTlRFUlZBTF9EQVRBX0FUVFJJQlVURSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidEQVRBX0FUVFJJQlVURSArICItaW50ZXJ2YWwiO1xuXG5mdW5jdGlvbiBBdXRvcGxheScKICAgICAgICAgICAgICAgICAgICAgICAgYicoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2U2ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2U2Lm9uLFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTYuYmluZCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlNi5lbWl0O1xuXG4gIHZhciBpbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwob3B0aW9ucy5pbnRlcnZhbCwgU3BsaWRlMi5nby5iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZChTcGxpZGUyLCAiPiIpLCBvbkFuaW1hdGlvbkZyYW1lKTtcbiAgdmFyIGlzUGF1c2VkJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGludGVydmFsLmlzUGF1c2VkO1xuICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudHMsXG4gICAgICBfQ29tcG9uZW50czIkRWxlbWVudHM0ID0gQ29tcG9uZW50czIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0VsZW1lbnRzLFxuICAgICAgcm9vdCA9IF9Db21wb25lbnRzMiRFbGVtZW50czQucm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3QsXG4gICAgICB0b2dnbGUgPSBfQ29tcG9uZW50czIkRWxlbWVudHM0LnRvZ2dsZScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIHZhciBhdXRvcGxheSA9IG9wdGlvbnMuYXV0b3BsYXk7XG4gIHZhciBob3ZlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidlZDtcbiAgdmFyIGZvY3VzZWQ7XG4gIHZhciBzdG9wcGVkID0gYXV0b3BsYXkgPT09ICcKICAgICAgICAgICAgICAgICAgICAgICAgYicicGF1c2UiO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmIChhdXRvcGxheSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGxpc3RlbigpO1xuICAgICAgdG9nZ2xlICYmIHNldEF0dHJpYnV0ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9nZ2xlLCBBUklBX0NPTlRST0xTLCBFbGVtZW50cy50cmFjay5pZCk7XG4gICAgICBzdG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlZCB8fCBwbGF5KCk7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gbGlzdGVuKCkge1xuICAgIGlmIChvcHRpb25zLnBhdXNlT25Ib3ZlcikgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGJpbmQocm9vdCwgIm1vdXNlZW50ZXIgbW91c2VsZWF2ZSIsIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkge1xuICAgICAgICBob3ZlcmVkID0gZS50eXBlID09PSAibW91c2VlbnRlciI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBhdXRvVG9nZ2xlKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMucGF1c2VPbkZvY3VzKSB7XG4gICAgICBiaW5kKHJvb3QsICJmb2N1c2luIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N1c291dCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGZvY3VzZWQgPSBlLnR5cGUgPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAiZm9jdXNpbiI7XG4gICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgIH0pO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBpZiAodG9nZ2xlKSB7XG4gICAgICBiaW5kKHRvZ2dsZSwgImNsaWNrIiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3RvcHBlZCA/IHBsYXkoKSA6IHBhdXNlKHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uKFtFVkVOVF9NT1ZFLCBFVkVOVF9TQycKICAgICAgICAgICAgICAgICAgICAgICAgYidST0xMLCBFVkVOVF9SRUZSRVNIXSwgaW50ZXJ2YWwucmV3aW5kKTtcbiAgICBvbihFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfTU9WRSwgb25Nb3ZlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYXkoKSB7XG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhpc1BhdXNlZCgpICYmIENvbXBvbmVudHMyLlNsaWRlcy5pc0Vub3VnaCgpKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaW50ZXJ2YWwuc3RhcnQoIW9wdGlvbnMucmVzZXRQcm9ncmVzcyk7XG4gICAgICBmb2N1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlZCA9IGhvdmVyZWQgPSBzdG9wcGVkID0gZmFsc2U7XG4gICAgICB1cGRhdGUoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0KEVWRU5UX0FVVE9QTEFZX1BMQVkpO1xuICAgIH1cbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBwYXVzZShzdG9wKSB7XG4gICAgaWYgKHN0b3AgPT09IHZvaWQgMCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHN0b3AgPSB0cnVlO1xuICAgIH1cblxuICAgIHN0b3BwZWQgPSAhIXN0b3A7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHVwZGF0ZSgpO1xuXG4gICAgaWYgKCFpc1BhdXNlZCgpKSB7XG4gICAgICBpbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ2YWwucGF1c2UoKTtcbiAgICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUEFVU0UpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhdXRvVG9nZ2xlKCkge1xuICAgIGlmICghcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0b3BwZWQpIHtcbiAgICAgIGhvdmVyZWQgfHwgZm9jdXNlZCA/IHBhdXNlKGZhbHNlKSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidwbGF5KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgYicodG9nZ2xlKSB7XG4gICAgICB0b2dnbGVDbGFzcyh0b2dnbGUsIENMQVNTX0FDVElWRSwgIScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdG9wcGVkKTtcbiAgICAgIHNldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUFfTEFCRUwsIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLmkxOG5bc3RvcHBlZCA/ICJwbGF5IiA6ICJwYXVzZSJdKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gb25BbmltYXRpb25GcmFtZShyYXRlKSB7XG4gICAgdmFyIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgPSBFbGVtZW50cy5iYXI7XG4gICAgYmFyICYmIHN0eWxlKGJhciwgIndpZHRoIiwgcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUgKiAxMDAgKyAiJSIpO1xuICAgIGVtaXQoRVZFTlRfQVVUT1BMQVlfUExBWUlORywgcmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Nb3ZlKGluZGV4KSB7XG4gICAgdmFyIFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZSA9IENvbXBvbmVudHMyLlNsaWRlcy5nZXRBdChpbmRleCk7XG4gICAgaW50ZXJ2YWwucycKICAgICAgICAgICAgICAgICAgICAgICAgYidldChTbGlkZSAmJiArZ2V0QXR0cmlidXRlKFNsaWRlLnNsaWRlLCBJTlRFUlZBTF9EQVRBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ19BVFRSSUJVVEUpIHx8IG9wdGlvbnMuaW50ZXJ2YWwpO1xuICB9XG5cbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGludGVydmFsLmNhbmNlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgcGxheTogcGxheSxcbiAgICBwYXVzZTogcGF1c2UsXG4gICAgaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpc1BhdXNlZFxuICB9O1xufVxuXG5mdW5jdGlvbiBDb3ZlcihTcGxpZGUyLCBDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTcgPSBFdmVudEludCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FdmVudEludGVyZmFjZTcub247JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmIChvcHRpb25zLmNvdmVyKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgb24oRVZFTlRfTEFaWUxPQURfTE9BREVELCBhcHBseSh0b2dnbGUsIHRydWUpKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRCwgRVZFTlRfUkVGUicKICAgICAgICAgICAgICAgICAgICAgICAgYidFU0hdLCBhcHBseShjb3ZlciwgdHJ1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBjb3Zlcihjb3ZlcjIpIHtcbiAgICBDb21wb25lbnRzMi5TbGlkZXMuZm9yRWFjaChmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gKFNsaWRlKSB7XG4gICAgICB2YXIgaW1nID0gY2hpbGQoU2xpZGUuY29udGFpbmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCBTbGlkZS5zbGlkZSwgImltZyIpO1xuXG4gICAgICBpZiAoaW1nICYmIGltZy5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JjKSB7XG4gICAgICAgIHRvZ2dsZShjb3ZlcjIsIGltZywgU2xpZGUpO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvZ2dsZShjb3ZlcjIsIGltZywgU2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlKSB7XG4gICAgU2xpZGUuc3R5bGUoImJhY2tncm91bmQiLCBjb3ZlcjIgPyAiY2VudGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInci9jb3ZlciBuby1yZXBlYXQgdXJsKFxcIiIgKyBpbWcuc3JjICsgIlxcIikiIDogIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCB0cnVlKTtcbiAgICBkaXNwbGF5KGltZywgY292ZXIyID8gIm5vbmUiIDogIiIpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBseShjb3ZlciwgZmFsc2UpXG4gIH07XG59XG5cbnZhciBCT1VOQ0VfRElGRl9USFJFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NIT0xEID0gMTA7XG52YXIgQk9VTkNFX0RVUkFUSU9OID0gNjAwO1xudmFyIEZSSUNUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lPTl9GQUNUT1IgPSAwLjY7XG52YXIgQkFTRV9WRUxPQ0lUWSA9IDEuNTtcbnZhciBNJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lOX0RVUkFUSU9OID0gODAwO1xuXG5mdW5jdGlvbiBTY3JvbGwoU3BsaWRlMiwgQ29tJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U4ID0gRXZlbnRJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U4Lm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbixcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2U4LmVtaXQ7XG5cbiAgdmFyIHNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBTcGxpZGUyLnN0YXRlLnNldDtcbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgdmFyIGdldFBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbiAgICAgIGdlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RMaW1pdCA9IE1vdmUuZ2V0TGltaXQsXG4gICAgICBleGNlZWRlZExpbWl0ID0gTW92ZS5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hjZWVkZWRMaW1pdCxcbiAgICAgIHRyYW5zbGF0ZSA9IE1vdmUudHJhbnNsYXRlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGlzU2xpZGUgPSBTcGxpZGUyLmlzKFNMSURFKTtcbiAgdmFyIGludGVydmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbDtcbiAgdmFyIGNhbGxiYWNrO1xuICB2YXIgZnJpY3Rpb24gPSAxO1xuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBtb3VudCgpIHtcbiAgICBvbihFVkVOVF9NT1ZFLCBjbGVhcik7XG4gICAgb24oWycKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIXSwgY2FuY2VsKTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBzY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCBvblNjcm9sbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZCwgbm9Db25zdHJhaW4pIHtcbiAgICB2YXIgZnJvbSA9IGdldFBvc2l0aW9uKCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGNsZWFyKCk7XG5cbiAgICBpZiAoc25hcCAmJiAoIWlzU2xpZGUgfHwgIWV4YycKICAgICAgICAgICAgICAgICAgICAgICAgYidlZWRlZExpbWl0KCkpKSB7XG4gICAgICB2YXIgc2l6ZSA9IENvbXBvbmVudHMyLkxheW91dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuc2xpZGVyU2l6ZSgpO1xuICAgICAgdmFyIG9mZnNldCA9IHNpZ24oZGVzdGluYXRpb24pICcKICAgICAgICAgICAgICAgICAgICAgICAgYicqIHNpemUgKiBmbG9vcihhYnMoZGVzdGluYXRpb24pIC8gc2l6ZSkgfHwgMDtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0aW5hdGlvbiA9IE1vdmUudG9Qb3NpdGlvbihDb21wb25lbnRzMi5Db250cm9sbGVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50b0Rlc3QoZGVzdGluYXRpb24gJSBzaXplKSkgKyBvZmZzZXQ7XG4gICAgfVxuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBub0Rpc3RhbmNlID0gYXBwcm94aW1hdGVseUVxdWFsKGZyb20sIGRlc3RpbmF0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiwgMSk7XG4gICAgZnJpY3Rpb24gPSAxO1xuICAgIGR1cmF0aW9uID0gbm9EaXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2UgPyAwIDogZHVyYXRpb24gfHwgbWF4KGFicyhkZXN0aW5hdGlvbiAtIGZyb20pIC8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIEJBU0VfVkVMT0NJVFksIE1JTl9EVVJBVElPTik7XG4gICAgY2FsbGJhY2sgPSBvblNjcm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGxlZDtcbiAgICBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChkdXJhdGlvbiwgb25FbmQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhcHBseSh1cGRhdGUsIGZyb20sIGRlc3RpbmF0aW9uLCBub0NvbnN0cmFpbiksIDEpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBzZXQoU0NST0xMSU5HKTtcbiAgICBlbWl0KEVWRU5UX1NDUk9MTCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGludGVydmFsLnN0YXJ0KCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVuZCgpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgc2V0KElETEUpO1xuICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfU0NST0xMRUQpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKGZyb20sIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbywgbm9Db25zdHJhaW4sIHJhdGUpIHtcbiAgICB2YXIgcG9zaXRpb24gPSBnZXRQb3NpdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24oKTtcbiAgICB2YXIgdGFyZ2V0ID0gZnJvbSArICh0byAtIGZyb20pICogZWFzaW5nKHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlKTtcbiAgICB2YXIgZGlmZiA9ICh0YXJnZXQgLSBwb3NpdGlvbikgKiBmcmljdGlvbjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdHJhbnNsYXRlKHBvc2l0aW9uICsgZGlmZik7XG5cbiAgICBpZiAoaXNTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgJiYgIW5vQ29uc3RyYWluICYmIGV4Y2VlZGVkTGltaXQoKSkge1xuICAgICAgZnJpY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uICo9IEZSSUNUSU9OX0ZBQ1RPUjtcblxuICAgICAgaWYgKGFicyhkaWZmKSA8IEJPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1VOQ0VfRElGRl9USFJFU0hPTEQpIHtcbiAgICAgICAgc2Nyb2xsKGdldExpbWl0KGV4Y2VlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlZExpbWl0KHRydWUpKSwgQk9VTkNFX0RVUkFUSU9OLCBmYWxzZSwgY2FsbGJhY2ssIHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhcigpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgaWYgKGludGVydmFsKSB7XG4gICAgICBpbnRlcnZhbC5jYW5jZWwoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIGlmIChpbnRlcnZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgJiYgIWludGVydmFsLmlzUGF1c2VkKCkpIHtcbiAgICAgIGNsZWFyKCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb25FbmQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBlYXNpbmcodCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgZWFzaW5nRnVuYyA9IG9wdGlvbnMuZWFzaW5nRnVuYztcbiAgICByZXR1cm4gZWFzaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZ0Z1bmMgPyBlYXNpbmdGdW5jKHQpIDogMSAtIE1hdGgucG93KDEgLSB0LCA0KTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBjbGVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsXG4gICAgc2Nyb2xsOiBzY3JvbGwsXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbnZhciBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyA9IHtcbiAgcGFzc2l2ZTogZmFsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlLFxuICBjYXB0dXJlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBEcmFnKFNwbGlkZTIsIEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlOSA9IEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlOS5vbiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlOS5lbWl0LFxuICAgICAgYmluZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBfRXZlbnRJbnRlcmZhY2U5LmJpbmQsXG4gICAgICB1bmJpbmQgPSBfRXZlbnRJbnRlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlOS51bmJpbmQ7XG5cbiAgdmFyIHN0YXRlID0gU3BsaWRlMi5zdGF0ZTtcbiAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBNb3ZlID0gQ29tcG9uZW50czIuTW92ZSxcbiAgICAgIFNjcm9sbCA9IENvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5TY3JvbGwsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXIsXG4gICAgICB0cmFjayA9IENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJlZHVjZSA9IENvbXBvbmVudHMyLk1lZGlhLnJlZHVjZTtcbiAgdmFyIF9Db21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIkRGlyZWN0aW8yID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLFxuICAgICAgcmVzb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8yLnJlc29sdmUsXG4gICAgICBvcmllbnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0NvbXBvbmVudHMyJERpcmVjdGlvMi5vcmllbnQ7XG4gIHZhciBnZXRQb3NpdGlvbiA9IE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgZXhjZWVkZWRMaW1pdCA9IE1vdmUuZXhjZWVkZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTGltaXQ7XG4gIHZhciBiYXNlUG9zaXRpb247XG4gIHZhciBiYXNlRXZlbnQ7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IgcHJldkJhc2VFdmVudDtcbiAgdmFyIGlzRnJlZTtcbiAgdmFyIGRyYWdnaW5nO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGV4Y2VlZGVkID0gZmFsc2U7XG4gIHZhciBjbGlja1ByZXZlbnRlZDtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBkaXNhYmxlZDtcbiAgdmFyIHRhcmdldDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgYmluZCh0cmFjaywgUE9JTlRFUl9NT1ZFX0VWRU5UUywgbm9vcCwgU0NST0xMX0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSVNURU5FUl9PUFRJT05TKTtcbiAgICBiaW5kKHRyYWNrLCBQT0lOVEVSX1VQX0VWRU5UUywnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5vb3AsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICBiaW5kKHRyYWNrLCBQT0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRFUl9ET1dOX0VWRU5UUywgb25Qb2ludGVyRG93biwgU0NST0xMX0xJU1RFTkVSX09QVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidJT05TKTtcbiAgICBiaW5kKHRyYWNrLCAiY2xpY2siLCBvbkNsaWNrLCB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgY2FwdHVyZTogdHJ1ZVxuICAgIH0pO1xuICAgIGJpbmQodHJhY2ssICJkcmFnc3RhcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiwgcHJldmVudCk7XG4gICAgb24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1VQREFURURdLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgaW5pdCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZhciBkcmFnID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMuZHJhZztcbiAgICBkaXNhYmxlKCFkcmFnKTtcbiAgICBpc0ZyZWUgPSBkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZyA9PT0gImZyZWUiO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGVyRG93bihlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIGNsaWNrUHJldmVudGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIWRpc2FibGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCkge1xuICAgICAgdmFyIGlzVG91Y2ggPSBpc1RvdWNoRXZlbnQoZSk7XG5cbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoaXNEcmFnZ2FibGUoZS50YXJnZXQpICYmIChpc1RvdWNoIHx8ICFlLmJ1dHRvbiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIGlmICghQ29udHJvbGxlci5pc0J1c3koKSkge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB0YXJnZXQgPSBpc1RvdWNoID8gdHJhY2sgOiB3aW5kb3c7XG4gICAgICAgICAgZHJhZ2cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nID0gc3RhdGUuaXMoW01PVklORywgU0NST0xMSU5HXSk7XG4gICAgICAgICAgcHJldkInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNlRXZlbnQgPSBudWxsO1xuICAgICAgICAgIGJpbmQodGFyZ2V0LCBQT0lOVEVSX01PVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0VWRU5UUywgb25Qb2ludGVyTW92ZSwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBiaW5kKHRhcmdldCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uUG9pbnRlclVwLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuICAgICAgICAgIE1vdmUuY2FuY2VsJwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgICAgICAgIFNjcm9sbC5jYW5jZWwoKTtcbiAgICAgICAgICBzYXZlKGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2ZW50KGUsIHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUG9pbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidNb3ZlKGUpIHtcbiAgICBpZiAoIXN0YXRlLmlzKERSQUdHSU5HKSkge1xuICAgICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0YXRlLnNldChEUkFHR0lORyk7XG4gICAgICBlbWl0KEVWRU5UX0RSQUcpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBpZiAoZS5jYW5jZWxhYmxlKSB7XG4gICAgICBpZiAoZHJhZ2dpbmcpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIE1vdmUudHJhbnNsYXRlKGJhc2VQb3NpdGlvbiArIGNvbnN0cmFpbihkaWYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZkNvb3JkKGUpKSk7XG4gICAgICAgIHZhciBleHBpcmVkID0gZGlmZlRpbWUoZSkgPiBMT0cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0lOVEVSVkFMO1xuICAgICAgICB2YXIgaGFzRXhjZWVkZWQgPSBleGNlZWRlZCAhPT0gKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneGNlZWRlZCA9IGV4Y2VlZGVkTGltaXQoKSk7XG5cbiAgICAgICAgaWYgKGV4cGlyZWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IGhhc0V4Y2VlZGVkKSB7XG4gICAgICAgICAgc2F2ZShlKTtcbiAgICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBjbGlja1ByZXZlbnRlZCA9IHRydWU7XG4gICAgICAgIGVtaXQoRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0RSQUdHSU5HKTtcbiAgICAgICAgcHJldmVudChlKTtcbiAgICAgIH0gZWxzZSBpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGlzU2xpZGVyRGlyZWN0aW9uKGUpKSB7XG4gICAgICAgIGRyYWdnaW5nID0gc2hvdWxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1N0YXJ0KGUpO1xuICAgICAgICBwcmV2ZW50KGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBvblBvaW50ZXJVcChlKSB7XG4gICAgaWYgKHN0YXRlLmlzKERSJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FHR0lORykpIHtcbiAgICAgIHN0YXRlLnNldChJRExFKTtcbiAgICAgIGVtaXQoRVZFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05UX0RSQUdHRUQpO1xuICAgIH1cblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgbW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoZSk7XG4gICAgICBwcmV2ZW50KGUpO1xuICAgIH1cblxuICAgIHVuYmluZCh0YXJnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0LCBQT0lOVEVSX01PVkVfRVZFTlRTLCBvblBvaW50ZXJNb3ZlKTtcbiAgICB1bmJpbmQodCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmdldCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uUG9pbnRlclVwKTtcbiAgICBkcmFnZ2luZycKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgIGlmICghJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Rpc2FibGVkICYmIGNsaWNrUHJldmVudGVkKSB7XG4gICAgICBwcmV2ZW50KGUsIHRydWUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlKGUpIHtcbiAgICBwcmV2QmFzZUV2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudCA9IGJhc2VFdmVudDtcbiAgICBiYXNlRXZlbnQgPSBlO1xuICAgIGJhc2VQb3NpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gPSBnZXRQb3NpdGlvbigpO1xuICB9XG5cbiAgZnVuY3Rpb24gbW92ZShlKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciB2ZWxvY2l0eSA9IGNvbXB1dGVWZWxvY2l0eShlKTtcbiAgICB2YXIgZGVzdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmF0aW9uID0gY29tcHV0ZURlc3RpbmF0aW9uKHZlbG9jaXR5KTtcbiAgICB2YXIgcmV3aW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCA9IG9wdGlvbnMucmV3aW5kICYmIG9wdGlvbnMucmV3aW5kQnlEcmFnO1xuICAgIHJlZHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoZmFsc2UpO1xuXG4gICAgaWYgKGlzRnJlZSkge1xuICAgICAgQ29udHJvbGxlci5zJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nyb2xsKGRlc3RpbmF0aW9uLCAwLCBvcHRpb25zLnNuYXApO1xuICAgIH0gZWxzZSBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIuaXMoRkFERSkpIHtcbiAgICAgIENvbnRyb2xsZXIuZ28ob3JpZW50KHNpZ24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbG9jaXR5KSkgPCAwID8gcmV3aW5kID8gIjwiIDogIi0iIDogcmV3aW5kID8gIj4iIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInICIrIik7XG4gICAgfSBlbHNlIGlmIChTcGxpZGUyLmlzKFNMSURFKSAmJiBleGNlZWRlZCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgcmV3aW5kKSB7XG4gICAgICBDb250cm9sbGVyLmdvKGV4Y2VlZGVkTGltaXQodHJ1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gIj4iIDogIjwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgQ29udHJvbGxlci5nbygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29udHJvbGxlci50b0Rlc3QoZGVzdGluYXRpb24pLCB0cnVlKTtcbiAgICB9XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmVkdWNlKHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2hvdWxkU3RhcnQoZSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgdGhyZXNob2xkcyA9IG9wdGlvbnMuZHJhZ01pblRocmVzaG9sZDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGlzT2JqID0gaXNPYmplY3QodGhyZXNob2xkcyk7XG4gICAgdmFyIG1vdXNlICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGlzT2JqICYmIHRocmVzaG9sZHMubW91c2UgfHwgMDtcbiAgICB2YXIgdG91Y2ggPSAoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzT2JqID8gdGhyZXNob2xkcy50b3VjaCA6ICt0aHJlc2hvbGRzKSB8fCAxMDtcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gKGlzVG91Y2hFdmVudChlKSA/IHRvdWNoIDogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdXNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU2xpZGVyRGlyZWN0aW9uKGUpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIGFicyhkaWZmQ29vcmQoZSkpID4gYWJzKGRpZmZDb29yZChlLCB0cnVlKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0ZVZlbG9jaXR5KGUpIHtcbiAgICBpZiAoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIuaXMoTE9PUCkgfHwgIWV4Y2VlZGVkKSB7XG4gICAgICB2YXIgdGltZSA9IGRpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ZmVGltZShlKTtcblxuICAgICAgaWYgKHRpbWUgJiYgdGltZSA8IExPR19JTlRFUlZBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0wpIHtcbiAgICAgICAgcmV0dXJuIGRpZmZDb29yZChlKSAvIHRpbWU7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcHV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VEZXN0aW5hdGlvbih2ZWxvY2l0eSkge1xuICAgIHJldHVybiBnZXRQb3NpdGlvbigpICsgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NpZ24odmVsb2NpdHkpICogbWluKGFicyh2ZWxvY2l0eSkgKiAob3B0aW9ucy5mbGlja1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3dlciB8fCA2MDApLCBpc0ZyZWUgPyBJbmZpbml0eSA6IENvbXBvbmVudHMyLkxheW91dCcKICAgICAgICAgICAgICAgICAgICAgICAgYicubGlzdFNpemUoKSAqIChvcHRpb25zLmZsaWNrTWF4UGFnZXMgfHwgMSkpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIGRpZmZDb29yZChlLCBvcnRob2dvbmFsKSB7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiBjb29yZE9mKGUsIG9ydGhvZ29uYWwpIC0gY29vcmRPZihnZXRCYXNlRXZlbnQoZSksJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcnRob2dvbmFsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpZmZUaW1lKGUpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRpbWVPZihlKSAtIHRpbWVPZihnZXRCYXNlRXZlbnQoZSkpO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIGdldEJhc2VFdmVudChlKSB7XG4gICAgcmV0dXJuIGJhc2VFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnQgPT09IGUgJiYgcHJldkJhc2VFdmVudCB8fCBiYXNlRXZlbnQ7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gY29vcmRPZihlLCBvcnRob2dvbmFsKSB7XG4gICAgcmV0dXJuIChpc1RvdWNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50KGUpID8gZS5jaGFuZ2VkVG91Y2hlc1swXSA6IGUpWyJwYWdlIiArIHJlc29sdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG9ydGhvZ29uYWwgPyAiWSIgOiAiWCIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhaW4oZGlmZikge1xuICAgIHJldHVybiBkaWZmIC8gKGV4Y2VlZGVkICYmIFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKFNMSURFKSA/IEZSSUNUSU9OIDogMSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc0RyYScKICAgICAgICAgICAgICAgICAgICAgICAgYidnZ2FibGUodGFyZ2V0Mikge1xuICAgIHZhciBub0RyYWcgPSBvcHRpb25zLm5vRHJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2c7XG4gICAgcmV0dXJuICFtYXRjaGVzKHRhcmdldDIsICIuIiArIENMQVNTX1BBR0lOQVRJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09OX1BBR0UgKyAiLCAuIiArIENMQVNTX0FSUk9XKSAmJiAoIW5vRHJhZyB8fCAhbWF0Y2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXModGFyZ2V0Miwgbm9EcmFnKSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1RvdWNoRXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250KGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIFRvdWNoRXZlbnQgIT09ICJ1bmRlZmluZWQiJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBlIGluc3RhbmNlb2YgVG91Y2hFdmVudDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyYWdnaW5nKCkge1xuICAgIHJldHVybiBkcmFnZ2luZztcbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBkaXNhYmxlKHZhbHVlKSB7XG4gICAgZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkaXNhYmxlOiBkaXNhYmxlLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpc0RyYWdnaW5nOiBpc0RyYWdnaW5nXG4gIH07XG59XG5cbnZhciBOT1JNQUxJWkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVElPTl9NQVAgPSB7XG4gIFNwYWNlYmFyOiAiICIsXG4gIFJpZ2h0OiBBUlJPV19SSUcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInSFQsXG4gIExlZnQ6IEFSUk9XX0xFRlQsXG4gIFVwOiBBUlJPV19VUCxcbiAgRG93bjogJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FSUk9XX0RPV05cbn07XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUtleShrZXkpIHtcbiAga2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneSA9IGlzU3RyaW5nKGtleSkgPyBrZXkgOiBrZXkua2V5O1xuICByZXR1cm4gTk9STUFMSVonCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVRJT05fTUFQW2tleV0gfHwga2V5O1xufVxuXG52YXIgS0VZQk9BUkRfRVZFTlQgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2tleWRvd24iO1xuXG5mdW5jdGlvbiBLZXlib2FyZChTcGxpZGUyLCBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJzIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTEwID0gRXZlbnRJbnRlcmZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxMC5vbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMTAuYmluZCxcbiAgICAgIHVuYmluZCA9IF9FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UxMC51bmJpbmQ7XG5cbiAgdmFyIHJvb3QgPSBTcGxpZGUyLnJvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ290O1xuICB2YXIgcmVzb2x2ZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZTtcbiAgdmFyIHRhcmdldDtcbiAgdmFyIGRpc2FibGVkO1xuXG4gIGZ1bmN0aW9uIG1vdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpIHtcbiAgICBpbml0KCk7XG4gICAgb24oRVZFTlRfVVBEQVRFRCwgZGVzdHJveScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIG9uKEVWRU5UX1VQREFURUQsIGluaXQpO1xuICAgIG9uKEVWRU5UX01PVicKICAgICAgICAgICAgICAgICAgICAgICAgYidFLCBvbk1vdmUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIga2V5JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JvYXJkID0gb3B0aW9ucy5rZXlib2FyZDtcblxuICAgIGlmIChrZXlib2FyZCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHRhcmdldCA9IGtleWJvYXJkID09PSAiZ2xvYmFsIiA/IHdpbmRvdyA6IHJvb3Q7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgYmluZCh0YXJnZXQsIEtFWUJPQVJEX0VWRU5ULCBvbktleWRvd24pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHVuYmluZCh0YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0LCBLRVlCT0FSRF9FVkVOVCk7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNhYmxlKHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSkge1xuICAgIGRpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiBvbk0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlKCkge1xuICAgIHZhciBfZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICBkaXNhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQgPSB0cnVlO1xuICAgIG5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgIGRpc2EnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmxlZCA9IF9kaXNhYmxlZDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uS2V5ZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvd24oZSkge1xuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIHZhciBrZXkgPSBubycKICAgICAgICAgICAgICAgICAgICAgICAgYidybWFsaXplS2V5KGUpO1xuXG4gICAgICBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XXycKICAgICAgICAgICAgICAgICAgICAgICAgYidMRUZUKSkge1xuICAgICAgICBTcGxpZGUyLmdvKCI8Iik7XG4gICAgICB9IGVsc2UgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChrZXkgPT09IHJlc29sdmUoQVJST1dfUklHSFQpKSB7XG4gICAgICAgIFNwbGlkZTIuZycKICAgICAgICAgICAgICAgICAgICAgICAgYidvKCI+Iik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgZGlzYWJsZTogZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc2FibGVcbiAgfTtcbn1cblxudmFyIFNSQ19EQVRBX0FUVFJJQlVURSA9IERBVEFfQVRUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQlVURSArICItbGF6eSI7XG52YXIgU1JDU0VUX0RBVEFfQVRUUklCVVRFID0gU1JDX0RBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1RBX0FUVFJJQlVURSArICItc3Jjc2V0IjtcbnZhciBJTUFHRV9TRUxFQ1RPUiA9ICJbIiArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTUkNfREFUQV9BVFRSSUJVVEUgKyAiXSwgWyIgKyBTUkNTRVRfREFUQV9BVFRSSUJVVEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICsgIl0iO1xuXG5mdW5jdGlvbiBMYXp5TG9hZChTcGxpZGUyLCBDb21wb25lbnRzMiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTExID0gRXZlbnRJbnRlcmZhY2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxMS5vbixcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBvZmYgPSBfRXZlbnRJbnRlcmZhY2UxMS5vZmYsXG4gICAgICBiaW5kID0gX0V2ZW50SW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVyZmFjZTExLmJpbmQsXG4gICAgICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMTEuZW1pdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIGlzU2VxdWVudGlhbCA9IG9wdGlvbnMubGF6eUxvYWQgPT09ICJzZXEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWVudGlhbCI7XG4gIHZhciBldmVudHMgPSBbRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRF07XG4gIHZhciBlbnRyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChvcHRpb25zLmxhenlMb2FkKSB7XG4gICAgICBpbml0KCk7XG4gICAgICBvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfUkVGUkVTSCwgaW5pdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoKSB7XG4gICAgZW1wdHkoZW50cmllcyk7XG4gICAgcmVnaXN0ZXIoKTtcblxuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaXNTZXF1ZW50aWFsKSB7XG4gICAgICBsb2FkTmV4dCgpO1xuICAgIH0gZWxzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgb2ZmKGV2ZW50cyk7XG4gICAgICBvbihldmVudHMsIGNoZWNrKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBjaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzdGVyKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBDb21wb25lbnRzMi5TbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBxdWVyeUFsbChTbGlkZS5zbGlkZSwgSU1BR0VfU0VMRUNUT1IpLmZvckVhY2goZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIChpbWcpIHtcbiAgICAgICAgdmFyIHNyYyA9IGdldEF0dHJpYnV0ZShpbWcsIFMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgICAgICB2YXIgc3Jjc2V0ID0gZ2V0QXR0cmlidXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJQlVURSk7XG5cbiAgICAgICAgaWYgKHNyYyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIT09IGltZy5zcmMgfHwgc3Jjc2V0ICE9PSBpbWcuc3Jjc2V0KSB7XG4gICAgICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBjbGFzc05hbWUgPSBvcHRpb25zLmNsYXNzZXMuc3Bpbm5lcjtcbiAgICAgICAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudCA9IGltZy5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgIHZhciBzcGlubmVyID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNoaWxkKHBhcmVudCwgIi4iICsgY2xhc3NOYW1lKSB8fCBjcmVhdGUoInNwYW4iLCBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NOYW1lLCBwYXJlbnQpO1xuICAgICAgICAgIGVudHJpZXMucHVzaChbaW1nLCBTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHNwaW5uZXJdKTtcbiAgICAgICAgICBpbWcuc3JjIHx8IGRpc3BsYXkoaW1nLCAibm9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gY2hlY2soKSB7XG4gICAgZW50cmllcyA9IGVudHJpZXMuZmlsdGVyKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZGF0YSkge1xuICAgICAgdmFyIGRpc3RhbmNlID0gb3B0aW9ucy5wZXJQYWdlICogKChvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5wcmVsb2FkUGFnZXMgfHwgMSkgKyAxKSAtIDE7XG4gICAgICByZXR1cm4gZGF0YScKICAgICAgICAgICAgICAgICAgICAgICAgYidbMV0uaXNXaXRoaW4oU3BsaWRlMi5pbmRleCwgZGlzdGFuY2UpID8gbG9hZChkYXRhKSA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cnVlO1xuICAgIH0pO1xuICAgIGVudHJpZXMubGVuZ3RoIHx8IG9mZihldmVudHMpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWQoZGF0YSkge1xuICAgIHZhciBpbWcgPSBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYVswXTtcbiAgICBhZGRDbGFzcyhkYXRhWzFdLnNsaWRlLCBDTEFTU19MT0FESU5HKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgYmluZChpbWcsICJsb2FkIGVycm9yIiwgYXBwbHkob25Mb2FkLCBkYXRhJwogICAgICAgICAgICAgICAgICAgICAgICBiJykpO1xuICAgIHNldEF0dHJpYnV0ZShpbWcsICJzcmMiLCBnZXRBdHRyaWJ1dGUoaW1nLCBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JDX0RBVEFfQVRUUklCVVRFKSk7XG4gICAgc2V0QXR0cmlidXRlKGltZywgInNyY3NldCIsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNTRVRfREFUQV9BVFRSSUJVVEUpKTtcbiAgICByZW1vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlQXR0cmlidXRlKGltZywgU1JDX0RBVEFfQVRUUklCVVRFKTtcbiAgICByZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKGltZywgU1JDU0VUX0RBVEFfQVRUUklCVVRFKTtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvbkxvYWQoZGF0YSwgZSkge1xuICAgIHZhciBpbWcgPSBkYXRhWzBdLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgU2xpZGUgPSBkYXRhWzFdO1xuICAgIHJlbW92ZUNsYXNzKFNsaWRlLnNsaWRlLCBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfTE9BRElORyk7XG5cbiAgICBpZiAoZS50eXBlICE9PSAiZXJyb3IiKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmVtb3ZlKGRhdGFbMl0pO1xuICAgICAgZGlzcGxheShpbWcsICIiKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBlbWl0KEVWRU5UX0xBWllMT0FEX0xPQURFRCwgaW1nLCBTbGlkZSk7XG4gICAgICBlbWknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndChFVkVOVF9SRVNJWkUpO1xuICAgIH1cblxuICAgIGlzU2VxdWVudGlhbCAmJiBsb2FkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ05leHQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvYWROZXh0KCkge1xuICAgIGVudHJpZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmxlbmd0aCAmJiBsb2FkKGVudHJpZXMuc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogYXBwbHkoZW1wdHksIGVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWVzKSxcbiAgICBjaGVjazogY2hlY2tcbiAgfTtcbn1cblxuZnVuY3Rpb24gUGFnaW5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24oU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIGV2ZW50ID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0V2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24gPSBldmVudC5vbixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBlbWl0ID0gZXZlbnQuZW1pdCxcbiAgICAgIGJpbmQgPSBldmVudC5iaW5kO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcyxcbiAgICAgIEVsZW1lbnRzID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyLkVsZW1lbnRzLFxuICAgICAgQ29udHJvbGxlciA9IENvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5Db250cm9sbGVyO1xuICB2YXIgaGFzRm9jdXMgPSBDb250cm9sbGVyLmhhc0ZvY3UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyxcbiAgICAgIGdldEluZGV4ID0gQ29udHJvbGxlci5nZXRJbmRleCxcbiAgICAgIGcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbyA9IENvbnRyb2xsZXIuZ287XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbi5yZXNvbHZlO1xuICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5wYWdpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbjtcbiAgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsaXN0O1xuICB2YXIgcGFnaW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25DbGFzc2VzO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGRlc3Ryb3koKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX0VORF9JTkRFWCcKICAgICAgICAgICAgICAgICAgICAgICAgYidfQ0hBTkdFRF0sIG1vdW50KTtcbiAgICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMucGFnaW5hdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb247XG4gICAgcGxhY2Vob2xkZXIgJiYgZGlzcGxheShwbGFjZWhvbGRlciwgZW5hYmxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgPyAiIiA6ICJub25lIik7XG5cbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgb24oW0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9NT1ZFLCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MTEVEXSwgdXBkYXRlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBjcmVhdGVQYWdpbmF0aW9uKCk7XG4gICAgICB1cGRhdGUoKTtcbiAgICAgIGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWl0KEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCwge1xuICAgICAgICBsaXN0OiBsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzdCxcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9LCBnZXRBdChTcGxpZGUyLicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChsaXN0KSB7XG4gICAgICByZW1vdmUocGxhY2Vob2xkZXIgPyBzbGljZShsaXN0LmNoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZHJlbikgOiBsaXN0KTtcbiAgICAgIHJlbW92ZUNsYXNzKGxpc3QsIHBhZ2luYXRpb25DbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3Nlcyk7XG4gICAgICBlbXB0eShpdGVtcyk7XG4gICAgICBsaXN0ID0gbnVsbDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuXG4gICAgZXZlbnQuZGVzdHJveSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZVBhZ2luYXRpb24oKSB7XG4gICAgdmFyIGxlbmd0aCA9IFNwbGlkZTIubGVuZ3RoOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgY2xhc3NlcyA9IG9wdGlvbnMuY2xhc3NlcyxcbiAgICAgICAgaTE4bicKICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBvcHRpb25zLmkxOG4sXG4gICAgICAgIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dlO1xuICAgIHZhciBtYXggPSBoYXNGb2N1cygpID8gQ29udHJvbGxlci5nZXRFbmQoKSArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAxIDogY2VpbChsZW5ndGggLyBwZXJQYWdlKTtcbiAgICBsaXN0ID0gcGxhY2Vob2xkZXIgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IGNyZWF0ZSgidWwiLCBjbGFzc2VzLnBhZ2luYXRpb24sIEVsZW1lbnRzLnRyYWNrLnAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnRFbGVtZW50KTtcbiAgICBhZGRDbGFzcyhsaXN0LCBwYWdpbmF0aW9uQ2xhc3NlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDTEFTU19QQUdJTkFUSU9OICsgIi0tIiArIGdldERpcmVjdGlvbigpKTtcbiAgICBzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQXR0cmlidXRlKGxpc3QsIFJPTEUsICJ0YWJsaXN0Iik7XG4gICAgc2V0QXR0cmlidXRlKGwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXN0LCBBUklBX0xBQkVMLCBpMThuLnNlbGVjdCk7XG4gICAgc2V0QXR0cmlidXRlKGxpc3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBBUklBX09SSUVOVEFUSU9OLCBnZXREaXJlY3Rpb24oKSA9PT0gVFRCID8gInZlcnRpYycKICAgICAgICAgICAgICAgICAgICAgICAgYidhbCIgOiAiIik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1heDsgaSsrKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgdmFyIGxpID0gY3JlYXRlKCJsaSIsIG51bGwsIGxpc3QpO1xuICAgICAgdmFyIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXR0b24gPSBjcmVhdGUoImJ1dHRvbiIsIHtcbiAgICAgICAgY2xhc3M6IGNsYXNzZXMucGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UsXG4gICAgICAgIHR5cGU6ICJidXR0b24iXG4gICAgICB9LCBsaSk7XG4gICAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGNvbnRyb2xzID0gU2xpZGVzLmdldEluKGkpLm1hcChmdW5jdGlvbiAoU2xpZGUpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIHJldHVybiBTbGlkZS5zbGlkZS5pZDtcbiAgICAgIH0pO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciB0ZXh0ID0gIWhhc0ZvY3VzKCkgJiYgcGVyUGFnZSA+IDEgPyBpMThuLnBhZ2VYIDonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGkxOG4uc2xpZGVYO1xuICAgICAgYmluZChidXR0b24sICJjbGljayIsIGFwcGx5KG9uQ2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWNrLCBpKSk7XG5cbiAgICAgIGlmIChvcHRpb25zLnBhZ2luYXRpb25LZXlib2FyZCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgICAgYmluZChidXR0b24sICJrZXlkb3duIiwgYXBwbHkob25LZXlkb3duLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaSkpO1xuICAgICAgfVxuXG4gICAgICBzZXRBdHRyaWJ1dGUobGksIFJPTEUsICJwcmVzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VudGF0aW9uIik7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBST0xFLCAidGFiIik7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc2V0QXR0cmlidXRlKGJ1dHRvbiwgQVJJQV9DT05UUk9MUywgY29udHJvbHMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2pvaW4oIiAiKSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX0xBQkVMLCBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ybWF0KHRleHQsIGkgKyAxKSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBUQUJfJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0lOREVYLCAtMSk7XG4gICAgICBpdGVtcy5wdXNoKHtcbiAgICAgICAgbGk6IGxpLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgYnV0dG9uOiBidXR0b24sXG4gICAgICAgIHBhZ2U6IGlcbiAgICAgIH0pOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbkNsaWNrKHBhZ2UpIHtcbiAgICBnbygiPicKICAgICAgICAgICAgICAgICAgICAgICAgYiciICsgcGFnZSwgdHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBvbktleWRvd24ocGFnZSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGUpIHtcbiAgICB2YXIgbGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuICAgIHZhciBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gbm9ybWFsaXplS2V5KGUpO1xuICAgIHZhciBkaXIgPSBnZXREaXJlY3Rpb24oKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgdmFyIG5leHRQYWdlID0gLTE7XG5cbiAgICBpZiAoa2V5ID09PSByZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShBUlJPV19SSUdIVCwgZmFsc2UsIGRpcikpIHtcbiAgICAgIG5leHRQYWdlID0gKytwYWcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSAlIGxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19MRUYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVCwgZmFsc2UsIGRpcikpIHtcbiAgICAgIG5leHRQYWdlID0gKC0tcGFnZSArIGxlbmd0aCknCiAgICAgICAgICAgICAgICAgICAgICAgIGInICUgbGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAiSG9tZSIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBuZXh0UGFnZSA9IDA7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICJFbmQiKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgbmV4dFBhZ2UgPSBsZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHZhciBpdGVtJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGl0ZW1zW25leHRQYWdlXTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICBmb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYicoaXRlbS5idXR0b24pO1xuICAgICAgZ28oIj4iICsgbmV4dFBhZ2UpO1xuICAgICAgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZXZlbnQoZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0RGlyZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbigpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5wYWdpbmF0aW9uRGlyZWN0aW9uIHx8IG9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmRpcmVjdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEF0KGluZGV4KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiBpdGVtc1tDb250cm9sbGVyLnRvUGFnZShpbmRleCldO1xuICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB2YXIgcHJldiA9IGdldEF0KGdldEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCh0cnVlKSk7XG4gICAgdmFyIGN1cnIgPSBnZXRBdChnZXRJbmRleCgpKTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAocHJldikge1xuICAgICAgdmFyIGJ1dHRvbiA9IHByZXYuYnV0dG9uO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIHJlbW92ZUNsYXNzKGJ1dHRvbiwgQ0xBU1NfQUNUSVZFKTtcbiAgICAgIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX1NFTEVDVEVEKTtcbiAgICAgIHNldEF0dHJpYnV0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoYnV0dG9uLCBUQUJfSU5ERVgsIC0xKTtcbiAgICB9XG5cbiAgICBpZiAoY3VycikgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciBfYnV0dG9uID0gY3Vyci5idXR0b247XG4gICAgICBhZGRDbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgYicoX2J1dHRvbiwgQ0xBU1NfQUNUSVZFKTtcbiAgICAgIHNldEF0dHJpYnV0ZShfYnV0dG9uLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgQVJJQV9TRUxFQ1RFRCwgdHJ1ZSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgVCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBQl9JTkRFWCwgIiIpO1xuICAgIH1cblxuICAgIGVtaXQoRVZFTlRfUEFHSU5BVElPTl8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVVBEQVRFRCwge1xuICAgICAgbGlzdDogbGlzdCxcbiAgICAgIGl0ZW1zOiBpdGVtc1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9LCBwcmV2LCBjdXJyKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaXRlbXM6IGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGVtcyxcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgZ2V0QXQ6IGdldEF0LFxuICAgIHVwZGF0ZTogdXBkYXRlXG4gIH07XG59XG5cbnZhciBUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1JJR0dFUl9LRVlTID0gWyIgIiwgIkVudGVyIl07XG5cbmZ1bmN0aW9uIFN5bmMoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBpc05hdmlnYXRpb24gPSBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5pc05hdmlnYXRpb24sXG4gICAgICBzbGlkZUZvY3VzID0gb3B0aW9ucy5zbGlkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VGb2N1cztcbiAgdmFyIGV2ZW50cyA9IFtdO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBTcGxpZGUyLnNwbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAodGFyZ2V0KSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgaWYgKCF0YXJnZXQuaXNQYXJlbnQpIHtcbiAgICAgICAgc3luYyhTcGxpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlMiwgdGFyZ2V0LnNwbGlkZSk7XG4gICAgICAgIHN5bmModGFyZ2V0LnNwbGlkZSwgU3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGlzTmF2aWdhdGlvbikge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIG5hdmlnYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXZlbnQuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIGVtcHR5KGV2ZW50cyk7XG4gIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgZnVuY3Rpb24gcmVtb3VudCgpIHtcbiAgICBkZXN0cm95KCk7XG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKCk7XG4gIH1cblxuICBmdW5jdGlvbiBzeW5jKHNwbGlkZSwgdGFyZ2V0KSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhciBldmVudCA9IEV2ZW50SW50ZXJmYWNlKHNwbGlkZSk7XG4gICAgZXZlbnQub24oRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgYidUX01PVkUsIGZ1bmN0aW9uIChpbmRleCwgcHJldiwgZGVzdCkge1xuICAgICAgdGFyZ2V0LicKICAgICAgICAgICAgICAgICAgICAgICAgYidnbyh0YXJnZXQuaXMoTE9PUCkgPyBkZXN0IDogaW5kZXgpO1xuICAgIH0pO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudHMucHVzaChldmVudCk7XG4gIH1cblxuICBmdW5jdGlvbiBuYXZpZ2F0ZSgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMik7XG4gICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBvbiA9IGV2ZW50Lm9uO1xuICAgIG9uKEVWRU5UX0NMSUNLLCBvbkNsaWNrKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgb24oRVZFTlRfU0xJREVfS0VZRE9XTiwgb25LZXlkb3duKTtcbiAgICBvbihbRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX01PVU5URUQsIEVWRU5UX1VQREFURURdLCB1cGRhdGUpO1xuICAgIGV2ZW50cy5wdXNoKGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCk7XG4gICAgZXZlbnQuZW1pdChFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQsIFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGUyLnNwbGlkZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYidBdHRyaWJ1dGUoQ29tcG9uZW50czIuRWxlbWVudHMubGlzdCwgQVJJQV9PUklFTlRBVElPJwogICAgICAgICAgICAgICAgICAgICAgICBiJ04sIG9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9uQ2xpY2soU2xpZGUpIHtcbiAgICBTcGxpZGUyLmdvKFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidkZS5pbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbktleWRvd24oU2xpZGUsIGUpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaWYgKGluY2x1ZGVzKFRSSUdHRVJfS0VZUywgbm9ybWFsaXplS2V5KGUpKScKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIG9uQ2xpY2soU2xpZGUpO1xuICAgICAgcHJldmVudChlKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXR1cDogYXBwbHkoQ29tcG9uZW50czIuTScKICAgICAgICAgICAgICAgICAgICAgICAgYidlZGlhLnNldCwge1xuICAgICAgc2xpZGVGb2N1czogaXNVbmRlZmluZWQoc2xpZGVGb2N1cycKICAgICAgICAgICAgICAgICAgICAgICAgYicpID8gaXNOYXZpZ2F0aW9uIDogc2xpZGVGb2N1c1xuICAgIH0sIHRydWUpLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICByZW1vdW50OicKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVtb3VudFxuICB9O1xufVxuXG5mdW5jdGlvbiBXaGVlbChTcGxpZGUyLCBDb21wb25lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZTEyID0gRXZlbnRJbnRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JmYWNlKFNwbGlkZTIpLFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTEyLmJpbmQ7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIHZhciBsYXN0VGltZSA9IDA7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChvcHRpb25zLndoZWVsKSB7XG4gICAgICBiaW5kKENvbXBvbmVudHMyLkVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy50cmFjaywgIndoZWVsIiwgb25XaGVlbCwgU0NST0xMX0xJU1RFTkVSX09QVElPTlMpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbldoZWVsKGUpIHtcbiAgICBpZiAoZS5jYW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY2VsYWJsZSkge1xuICAgICAgdmFyIGRlbHRhWSA9IGUuZGVsdGFZO1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBiYWNrd2FyZHMgPSBkZWx0YVkgPCAwO1xuICAgICAgdmFyIHRpbWVTdGFtcCA9IHRpbWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2YoZSk7XG5cbiAgICAgIHZhciBfbWluID0gb3B0aW9ucy53aGVlbE1pblRocmVzaG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGQgfHwgMDtcblxuICAgICAgdmFyIHNsZWVwID0gb3B0aW9ucy53aGVlbFNsZWVwIHwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfCAwO1xuXG4gICAgICBpZiAoYWJzKGRlbHRhWSkgPiBfbWluICYmIHRpbWVTdGFtcCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLSBsYXN0VGltZSA+IHNsZWVwKSB7XG4gICAgICAgIFNwbGlkZTIuZ28oYmFja3dhcmRzID8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICI8IiA6ICI+Iik7XG4gICAgICAgIGxhc3RUaW1lID0gdGltZVN0YW1wO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgICAgc2hvdWxkUHJldmVudChiYWNrd2FyZHMpICYmIHByZXZlbnQoZSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZFByZXZlbnQoYmFja3dhcmRzKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHJldHVybiAhb3B0aW9ucy5yZWxlYXNlV2hlZWwgfHwgU3BsaWRlMi5zdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMoTU9WSU5HKSB8fCBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEFkamFjZW50KGJhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMpICE9PSAtMTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndFxuICB9O1xufVxuXG52YXIgU1JfUkVNT1ZBTF9ERUxBWSA9IDkwO1xuXG5mdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb24gTGl2ZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZTEzID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRXZlbnRJbnRlcmZhY2UxMy5vbjtcblxuICB2YXIgdHJhY2sgPSBDb21wb25lbnRzMi4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWxlbWVudHMudHJhY2s7XG4gIHZhciBlbmFibGVkID0gb3B0aW9ucy5saXZlICYmICFvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5pc05hdmlnYXRpb247XG4gIHZhciBzciA9IGNyZWF0ZSgic3BhbiIsIENMQVNTX1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUik7XG4gIHZhciBpbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbChTUl9SRU1PVkFMX0RFTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInWSwgYXBwbHkodG9nZ2xlLCBmYWxzZSkpO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgZGlzYWJsZSghQ29tcG9uZW50czIuQXV0b3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5LmlzUGF1c2VkKCkpO1xuICAgICAgc2V0QXR0cmlidXRlKHRyYWNrLCBBUklBX0FUT01JJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0MsIHRydWUpO1xuICAgICAgc3IudGV4dENvbnRlbnQgPSAiXFx1MjAyNiI7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgb24oRVZFTlRfQVVUT1BMQVlfUExBWSwgYXBwbHkoZGlzYWJsZSwgdHJ1ZSkpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9uKEVWRU5UX0FVVE9QTEFZX1BBVVNFLCBhcHBseShkaXNhYmxlLCBmYWxzZSkpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIG9uKFtFVkVOVF9NT1ZFRCwgRVZFTlRfU0NST0xMRURdLCBhcHBseSh0b2dnbGUsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlKGFjdGl2ZSkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBzZXRBdHRyaWJ1dGUodHJhY2ssIEFSSUFfQlVTWSwgYWN0aXZlKTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoYWN0aXZlKSB7XG4gICAgICBhcHBlbmQodHJhY2ssIHNyKTtcbiAgICAgIGluJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcnZhbC5zdGFydCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZW1vdmUoc3IpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGludGVydmFsLmNhbmNlbCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cm95KCkge1xuICAgIHJlbW92ZUF0dHJpYnV0ZSh0cmFjaywgW0FSSUFfTElWRSwgQVJJJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FfQVRPTUlDLCBBUklBX0JVU1ldKTtcbiAgICByZW1vdmUoc3IpO1xuICB9XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGRpc2FibGUoZGlzYWJsZWQpIHtcbiAgICBpZiAoZW5hYmxlZCkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgQVJJQV9MSVZFLCBkaXNhYmxlZCA/ICJvZmYiICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6ICJwb2xpdGUiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsXG4gICAgZGlzYWJsZTogZGlzYWJsZSxcbiAgICBkZXN0cm95OiBkZXN0cm95XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9O1xufVxuXG52YXIgQ29tcG9uZW50Q29uc3RydWN0b3JzID0gLyojX19QVVJFX18qJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBNZWRpYTogTWVkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lhLFxuICBEaXJlY3Rpb246IERpcmVjdGlvbixcbiAgRWxlbWVudHM6IEVsZW1lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgU2xpZGVzOiBTbGlkZXMsXG4gIExheW91dDogTGF5b3V0LFxuICBDbG9uZXM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgYidDbG9uZXMsXG4gIE1vdmU6IE1vdmUsXG4gIENvbnRyb2xsZXI6IENvbnRyb2xsZXIsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBBcnJvd3M6IEFycm93cyxcbiAgQXV0b3BsYXk6IEF1dG9wbGF5LFxuICBDb3ZlcjonCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENvdmVyLFxuICBTY3JvbGw6IFNjcm9sbCxcbiAgRHJhZzogRHJhZyxcbiAgS2V5Ym9hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JkOiBLZXlib2FyZCxcbiAgTGF6eUxvYWQ6IExhenlMb2FkLFxuICBQYWdpbmF0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJzogUGFnaW5hdGlvbixcbiAgU3luYzogU3luYyxcbiAgV2hlZWw6IFdoZWVsLFxuICBMaScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZTogTGl2ZVxufSk7XG52YXIgSTE4TiA9IHtcbiAgcHJldjogIlByZXZpb3VzIHNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSIsXG4gIG5leHQ6ICJOZXh0IHNsaWRlIixcbiAgZmlyc3Q6ICJHbyB0byBmaXJzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2xpZGUiLFxuICBsYXN0OiAiR28gdG8gbGFzdCBzbGlkZSIsXG4gIHNsaWRlWDogIkcnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbyB0byBzbGlkZSAlcyIsXG4gIHBhZ2VYOiAiR28gdG8gcGFnZSAlcyIsXG4gIHBsYXknCiAgICAgICAgICAgICAgICAgICAgICAgIGInOiAiU3RhcnQgYXV0b3BsYXkiLFxuICBwYXVzZTogIlBhdXNlIGF1dG9wbGF5IixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNhcm91c2VsOiAiY2Fyb3VzZWwiLFxuICBzbGlkZTogInNsaWRlIixcbiAgc2VsZWMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndDogIlNlbGVjdCBhIHNsaWRlIHRvIHNob3ciLFxuICBzbGlkZUxhYmVsOiAiJXMgb2YgJXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIlxufTtcbnZhciBERUZBVUxUUyA9IHtcbiAgdHlwZTogInNsaWRlIixcbiAgcm9sZTogIicKICAgICAgICAgICAgICAgICAgICAgICAgYidyZWdpb24iLFxuICBzcGVlZDogNDAwLFxuICBwZXJQYWdlOiAxLFxuICBjbG9uZVN0YXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXM6IHRydWUsXG4gIGFycm93czogdHJ1ZSxcbiAgcGFnaW5hdGlvbjogdHJ1ZSxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhZ2luYXRpb25LZXlib2FyZDogdHJ1ZSxcbiAgaW50ZXJ2YWw6IDVlMyxcbiAgcGF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlT25Ib3ZlcjogdHJ1ZSxcbiAgcGF1c2VPbkZvY3VzOiB0cnVlLFxuICByZXNldFByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29ncmVzczogdHJ1ZSxcbiAgZWFzaW5nOiAiY3ViaWMtYmV6aWVyKDAuMjUsIDEsIDAuNSwgJwogICAgICAgICAgICAgICAgICAgICAgICBiJzEpIixcbiAgZHJhZzogdHJ1ZSxcbiAgZGlyZWN0aW9uOiAibHRyIixcbiAgdHJpbVNwYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZTogdHJ1ZSxcbiAgZm9jdXNhYmxlTm9kZXM6ICJhLCBidXR0b24sIHRleHRhcmVhLCBpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidwdXQsIHNlbGVjdCwgaWZyYW1lIixcbiAgbGl2ZTogdHJ1ZSxcbiAgY2xhc3NlczogQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTRVMsXG4gIGkxOG46IEkxOE4sXG4gIHJlZHVjZWRNb3Rpb246IHtcbiAgICBzcGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWQ6IDAsXG4gICAgcmV3aW5kU3BlZWQ6IDAsXG4gICAgYXV0b3BsYXk6ICJwYXVzZSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cbn07XG5cbmZ1bmN0aW9uIEZhZGUoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zKSB7XG4gIHZhciBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG5cbiAgZnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIG1vdW50KCkge1xuICAgIEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLm9uKFtFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfTU9VTlRFRCwgRVZFTlRfUkVGUkVTSF0sIGluaXQpO1xuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGluaXQoKSB7XG4gICAgU2xpZGVzLmZvckVhY2goZnVuY3Rpb24gKFNsaWRlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgU2xpZGUuc3R5bGUoInRyYW5zZm9ybSIsICJ0cmFuc2xhdGVYKC0iICsgMTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMCAqIFNsaWRlLmluZGV4ICsgIiUpIik7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3RhcnQoaW5kZXgsIGRvbmUpIHtcbiAgICBTbGlkZXMuc3R5bGUoInRyYW5zaXRpb24iLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIm9wYWNpdHkgIiArIG9wdGlvbnMuc3BlZWQgKyAibXMgIiArIG9wdGlvbnMuZWFzaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgbmV4dFRpY2soZG9uZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJzogbW91bnQsXG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGNhbmNlbDogbm9vcFxuICB9OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gU2xpZGUoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gIHZhciBNb3ZlID0gQ29tcG9uZW50czIuTW92ZSxcbiAgICAgIENvbnRyb2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcixcbiAgICAgIFNjcm9sbCA9IENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMi5TY3JvbGw7XG4gIHZhciBsaXN0ID0gQ29tcG9uZW50czIuRWxlbWVudHMubGlzdDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciB0cmFuc2l0aW9uID0gYXBwbHkoc3R5bGUsIGxpc3QsICJ0cmFuc2l0aW9uIiknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB2YXIgZW5kQ2FsbGJhY2s7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgRScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLmJpbmQobGlzdCwgInRyYW5zaXRpb25lbmQiLCBmJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gKGUpIHtcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gbGlzdCAmJiBlbmRDYWxsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JhY2spIHtcbiAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIGVuZENhbGxiYWNrKCk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoaW5kZXgsIGRvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25lKSB7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gTW92ZS50b1Bvc2l0aW9uKGluZGV4LCB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZSk7XG4gICAgdmFyIHBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbigpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgc3BlZWQgPSBnZXRTcGVlZChpbmRleCk7XG5cbiAgICBpZiAoYWJzKGRlc3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbiAtIHBvc2l0aW9uKSA+PSAxICYmIHNwZWVkID49IDEpIHtcbiAgICAgIGlmIChvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy51c2VTY3JvbGwpIHtcbiAgICAgICAgU2Nyb2xsLnNjcm9sbChkZXN0aW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24sIHNwZWVkLCBmYWxzZSwgZG9uZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JhbnNpdGlvbigidHJhbnNmb3JtICIgKyBzcGVlZCArICJtcyAiICsgb3B0aW9ucy5lYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nKTtcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoZGVzdGluYXRpb24sIHRydWUpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgZW5kQ2FsbGJhY2sgPSBkb25lO1xuICAgICAgfVxuICAgIH0gZWxzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgTW92ZS5qdW1wKGluZGV4KTtcbiAgICAgIGRvbmUoKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIHRyYW5zaXRpb24oIiIpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTY3JvbGwuY2FuY2VsKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTcGVlZChpbmRleCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICB2YXIgcmV3aW5kU3BlZWQgPSBvcHRpb25zLnJld2luZFNwZWVkO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChTcGxpZGUyLmlzKFNMSURFKSAmJiByZXdpbmRTcGVlZCkge1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInciBwcmV2ID0gQ29udHJvbGxlci5nZXRJbmRleCh0cnVlKTtcbiAgICAgIHZhciBlbmQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQ29udHJvbGxlci5nZXRFbmQoKTtcblxuICAgICAgaWYgKHByZXYgPT09IDAgJiYgaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4ID49IGVuZCB8fCBwcmV2ID49IGVuZCAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHJld2luZFNwZWVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5zcGVlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzdGFydDogc3RhcnQsXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn1cblxudmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgYidfU3BsaWRlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gX1NwbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgdGhpcy5ldmVudCA9IEV2ZW50SW50ZXJmYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSgpO1xuICAgIHRoaXMuQ29tcG9uZW50cyA9IHt9O1xuICAgIHRoaXMuc3RhdGUgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgU3RhdGUoQ1JFQVRFRCk7XG4gICAgdGhpcy5zcGxpZGVzID0gW107XG4gICAgdGhpcycKICAgICAgICAgICAgICAgICAgICAgICAgYicuX28gPSB7fTtcbiAgICB0aGlzLl9FID0ge307XG4gICAgdmFyIHJvb3QgPSBpc1N0cicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbmcodGFyZ2V0KSA/IHF1ZXJ5KGRvY3VtZW50LCB0YXJnZXQpIDogdGFyZ2V0O1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NlcnQocm9vdCwgcm9vdCArICIgaXMgaW52YWxpZC4iKTtcbiAgICB0aGlzLnJvb3QgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgcm9vdDtcbiAgICBvcHRpb25zID0gbWVyZ2Uoe1xuICAgICAgbGFiZWw6IGdldEF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTCkgfHwgIiIsXG4gICAgICBsYWJlbGxlZGJ5OiBnZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUxMRURCWSkgfHwgIiJcbiAgICB9LCBERUZBVScKICAgICAgICAgICAgICAgICAgICAgICAgYidMVFMsIF9TcGxpZGUuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdHJ5ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBtZXJnZShvcHRpb25zLCBKU09OLnBhcnNlKGdldEF0dHJpYnV0ZShyb290LCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgREFUQV9BVFRSSUJVVEUpKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgYXNzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidydChmYWxzZSwgIkludmFsaWQgSlNPTiIpO1xuICAgIH1cblxuICAgIHRoaXMuX28gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT2JqZWN0LmNyZWF0ZShtZXJnZSh7fSwgb3B0aW9ucykpO1xuICB9XG5cbiAgdmFyIF9wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8gPSBfU3BsaWRlLnByb3RvdHlwZTtcblxuICBfcHJvdG8ubW91bnQgPSBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gbW91bnQoRXh0ZW5zaW9ucywgVHJhbnNpdGlvbikge1xuICAgIHZhciBfdGhpcyA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzO1xuXG4gICAgdmFyIHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgQ29tcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVudHMyID0gdGhpcy5Db21wb25lbnRzO1xuICAgIGFzc2VydChzdGF0ZS5pcyhbQ1JFQScKICAgICAgICAgICAgICAgICAgICAgICAgYidURUQsIERFU1RST1lFRF0pLCAiQWxyZWFkeSBtb3VudGVkISIpO1xuICAgIHN0YXRlLnNldCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoQ1JFQVRFRCk7XG4gICAgdGhpcy5fQyA9IENvbXBvbmVudHMyO1xuICAgIHRoaXMuXycKICAgICAgICAgICAgICAgICAgICAgICAgYidUID0gVHJhbnNpdGlvbiB8fCB0aGlzLl9UIHx8ICh0aGlzLmlzKEZBREUpID8gRmFkZSA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBTbGlkZSk7XG4gICAgdGhpcy5fRSA9IEV4dGVuc2lvbnMgfHwgdGhpcy5fRTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIENvbnN0cnVjdG9ycyA9IGFzc2lnbih7fSwgQ29tcG9uZW50Q29uc3RydWN0b3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIncywgdGhpcy5fRSwge1xuICAgICAgVHJhbnNpdGlvbjogdGhpcy5fVFxuICAgIH0pO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBmb3JPd24oQ29uc3RydWN0b3JzLCBmdW5jdGlvbiAoQ29tcG9uZW50LCBrZXkpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB2YXIgY29tcG9uZW50ID0gQ29tcG9uZW50KF90aGlzLCBDb21wb25lbnRzMiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIF90aGlzLl9vKTtcbiAgICAgIENvbXBvbmVudHMyW2tleV0gPSBjb21wb25lbnQ7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgY29tcG9uZW50LnNldHVwICYmIGNvbXBvbmVudC5zZXR1cCgpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgICBmb3JPd24oQ29tcG9uZW50czIsIGZ1bmN0aW9uIChjb21wb25lbnQpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgICBjb21wb25lbnQubW91bnQgJiYgY29tcG9uZW50Lm1vdW50KCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICAgIHRoaXMuZW1pdChFVkVOVF9NT1VOVEVEKTtcbiAgICBhZGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ModGhpcy5yb290LCBDTEFTU19JTklUSUFMSVpFRCk7XG4gICAgc3RhdGUuc2V0KElETEUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB0aGlzLmVtaXQoRVZFTlRfUkVBRFkpO1xuICAgIHJldHVybiB0aGlzO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8uc3luYyA9IGZ1bmN0aW9uIHN5bmMoc3BsaWRlKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuc3BsaWRlcy5wdXNoKHtcbiAgICAgIHNwbGlkZTogc3BsaWRlXG4gICAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHNwbGlkZS5zcGxpZGVzLnB1c2goe1xuICAgICAgc3BsaWRlOiB0aGlzLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGlzUGFyZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuaXMoSURMRSkpIHtcbiAgICAgIHRoaXMuX0MuU3luYy5yZW1vdW50KCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICBzcGxpZGUuQ29tcG9uZW50cy5TeW5jLnJlbW91bnQoKTtcbiAgICB9XG5cbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmdvID0gZnVuY3Rpb24gZ28oY29udCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb2wpIHtcbiAgICB0aGlzLl9DLkNvbnRyb2xsZXIuZ28oY29udHJvbCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLm9uID0gZnVuY3Rpb24gb24oZXZlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ250cywgY2FsbGJhY2spIHtcbiAgICB0aGlzLmV2ZW50Lm9uKGV2ZW50cywgY2FsbGJhY2spJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8ub2ZmID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9mZihldmVudHMpIHtcbiAgICB0aGlzLmV2ZW50Lm9mZihldmVudHMpO1xuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvdG8uZW1pdCA9IGZ1bmN0aW9uIGVtaXQoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V2ZW50KSB7XG4gICAgdmFyIF90aGlzJGV2ZW50O1xuXG4gICAgKF90aGlzJGV2ZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHRoaXMuZXZlbnQpLmVtaXQuYXBwbHkoX3RoaXMkZXZlbnQsIFtldmVudF0uY29uY2F0JwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzbGljZShhcmd1bWVudHMsIDEpKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvLmFkZCA9IGZ1bmN0aW9uIGFkZChzbGlkZXMsIGluZGV4KSB7XG4gICAgdGhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MuX0MuU2xpZGVzLmFkZChzbGlkZXMsIGluZGV4KTtcblxuICAgIHJldHVybiB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKG1hdGNoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyKSB7XG4gICAgdGhpcy5fQy5TbGlkZXMucmVtb3ZlKG1hdGNoZXIpO1xuXG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90by5pcyA9IGZ1bmN0aW9uIGlzKHR5cGUpJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgcmV0dXJuIHRoaXMuX28udHlwZSA9PT0gdHlwZTtcbiAgfTtcblxuICBfcHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3RvLnJlZnJlc2ggPSBmdW5jdGlvbiByZWZyZXNoKCkge1xuICAgIHRoaXMuZW1pdChFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfUkVGUkVTSCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmRlcycKICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95ID0gZnVuY3Rpb24gZGVzdHJveShjb21wbGV0ZWx5KSB7XG4gICAgaWYgKGNvbXBsZScKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWx5ID09PSB2b2lkIDApIHtcbiAgICAgIGNvbXBsZXRlbHkgPSB0cnVlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICB2YXIgZXZlbnQgPSB0aGlzLmV2ZW50LFxuICAgICAgICBzdGF0ZSA9IHQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLnN0YXRlO1xuXG4gICAgaWYgKHN0YXRlLmlzKENSRUFURUQpKSB7XG4gICAgICBFJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UodGhpcykub24oRVZFTlRfUkVBRFksIHRoaXMuZGVzdHJveS5iaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZCh0aGlzLCBjb21wbGV0ZWx5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck93bignCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5fQywgZnVuY3Rpb24gKGNvbXBvbmVudCkge1xuICAgICAgICBjb21wb25lbnQuZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3Ryb3kgJiYgY29tcG9uZW50LmRlc3Ryb3koY29tcGxldGVseSk7XG4gICAgICB9LCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgICBldmVudC5lbWl0KEVWRU5UX0RFU1RST1kpO1xuICAgICAgZXZlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmRlc3Ryb3koKTtcbiAgICAgIGNvbXBsZXRlbHkgJiYgZW1wdHkodGhpcy5zcGxpZGVzKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBzdGF0ZS5zZXQoREVTVFJPWUVEKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXM7XG4gIH07XG5cbiAgX2NyZWF0ZUNsYXNzKF9TcGxpZGUsIFt7XG4gICAga2V5OiAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLl9vO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQob3B0aW9ucykgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIHRoaXMuX0MuTWVkaWEuc2V0KG9wdGlvbnMsIHRydWUsIHRydWUpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICJsZW5ndGgiLFxuICAgIGdldDogZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9DLlNsaWRlcy5nZXRMZW5ndGgodHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogImluZGV4IixcbiAgICBnZXQ6IGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fQy5Db250cm9sbGVyLmdldEluZGV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBfU3BsaWRlO1xufSgpO1xuXG52YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIFNwbGlkZSA9IF9TcGxpZGU7XG5TcGxpZGUuZGVmYXVsdHMgPSB7fTtcblNwbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgYicuU1RBVEVTID0gU1RBVEVTO1xudmFyIENMQVNTX1JFTkRFUkVEID0gImlzLXJlbmRlcmVkIicKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG52YXIgUkVOREVSRVJfREVGQVVMVF9DT05GSUcgPSB7XG4gIGxpc3RUYWc6ICJ1bCcKICAgICAgICAgICAgICAgICAgICAgICAgYiciLFxuICBzbGlkZVRhZzogImxpIlxufTtcblxudmFyIFN0eWxlID0gLyojX19QVVJFX18qJwogICAgICAgICAgICAgICAgICAgICAgICBiJy9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN0eWxlKGlkLCBvcHRpb25zKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHRoaXMuc3R5bGVzID0ge307XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgdmFyIF9wcm90bzIgPSBTdHlsZS5wcicKICAgICAgICAgICAgICAgICAgICAgICAgYidvdG90eXBlO1xuXG4gIF9wcm90bzIucnVsZSA9IGZ1bmN0aW9uIHJ1bGUoc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgYidyLCBwcm9wLCB2YWx1ZSwgYnJlYWtwb2ludCkge1xuICAgIGJyZWFrcG9pbnQgPSBicmVhaycKICAgICAgICAgICAgICAgICAgICAgICAgYidwb2ludCB8fCAiZGVmYXVsdCI7XG4gICAgdmFyIHNlbGVjdG9ycyA9IHRoaXMuc3R5bGVzWycKICAgICAgICAgICAgICAgICAgICAgICAgYidicmVha3BvaW50XSA9IHRoaXMuc3R5bGVzW2JyZWFrcG9pbnRdIHx8IHt9O1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgYicgc3R5bGVzID0gc2VsZWN0b3JzW3NlbGVjdG9yXSA9IHNlbGVjdG9yc1tzZWxlY3Rvcl0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IHt9O1xuICAgIHN0eWxlc1twcm9wXSA9IHZhbHVlO1xuICB9O1xuXG4gIF9wcm90bzInCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmJ1aWxkID0gZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzO1xuXG4gICAgdmFyIGNzcyA9ICIiO1xuXG4gICAgaWYgKHRoaXMuc3R5bGVzLmRlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x0KSB7XG4gICAgICBjc3MgKz0gdGhpcy5idWlsZFNlbGVjdG9ycyh0aGlzLnN0eWxlcy5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VmYXVsdCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5zdHlsZXMpLnNvcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0KGZ1bmN0aW9uIChuLCBtKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLm9wdGlvbnMubWVkaScKICAgICAgICAgICAgICAgICAgICAgICAgYidhUXVlcnkgPT09ICJtaW4iID8gK24gLSArbSA6ICttIC0gK247XG4gICAgfSkuZm9yRWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24gKGJyZWFrcG9pbnQpIHtcbiAgICAgIGlmIChicmVha3BvaW50ICE9PSAiZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlZmF1bHQiKSB7XG4gICAgICAgIGNzcyArPSAiQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aScKICAgICAgICAgICAgICAgICAgICAgICAgYidkdGg6ICIgKyBicmVha3BvaW50ICsgInB4KSB7IjtcbiAgICAgICAgY3NzICs9IF90aGlzMicKICAgICAgICAgICAgICAgICAgICAgICAgYicuYnVpbGRTZWxlY3RvcnMoX3RoaXMyLnN0eWxlc1ticmVha3BvaW50XSk7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidjc3MgKz0gIn0iO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjc3M7XG4gIH07JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIF9wcm90bzIuYnVpbGRTZWxlY3RvcnMgPSBmdW5jdGlvbiBidWlsZFNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcnMoc2VsZWN0b3JzKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgYidyIGNzcyA9ICIiO1xuICAgIGZvck93bihzZWxlY3RvcnMsIGZ1bmN0aW9uIChzdHlsZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3Rvcikge1xuICAgICAgc2VsZWN0b3IgPSAoIiMiICsgX3RoaXMzLmlkICsgIiAiICcKICAgICAgICAgICAgICAgICAgICAgICAgYicrIHNlbGVjdG9yKS50cmltKCk7XG4gICAgICBjc3MgKz0gc2VsZWN0b3IgKyAiIHsiJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIGZvck93bihzdHlsZXMsIGZ1bmN0aW9uICh2YWx1ZSwgcHJvcCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgaWYgKHZhbHVlIHx8IHZhbHVlID09PSAwKSB7XG4gICAgICAgICAgY3NzICs9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBwcm9wICsgIjogIiArIHZhbHVlICsgIjsiO1xuICAgICAgICB9XG4gICAgICB9KTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBjc3MgKz0gIn0iO1xuICAgIH0pO1xuICAgIHJldHVybiBjc3M7XG4gIH07XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJldHVybiBTdHlsZTtcbn0oKTtcblxudmFyIFNwbGlkZVJlbmRlcmVyID0gLyojX18nCiAgICAgICAgICAgICAgICAgICAgICAgIGInUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFNwbGlkZVJlbmRlcmVyKGNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50cywgb3B0aW9ucywgY29uZmlnLCBkZWZhdWx0cykge1xuICAgIHRoaXMuc2xpZGVzID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFtdO1xuICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIHRoaXMuYnJlYWtwb2ludHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gW107XG4gICAgbWVyZ2UoREVGQVVMVFMsIGRlZmF1bHRzIHx8IHt9KTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVyZ2UobWVyZ2UodGhpcy5vcHRpb25zLCBERUZBVUxUUyksIG9wdGlvbnMgfHwge30pOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB0aGlzLmNvbnRlbnRzID0gY29udGVudHM7XG4gICAgdGhpcy5jb25maWcgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgYXNzaWduKHt9LCBSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRywgY29uZmlnIHx8IHt9KTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdGhpcy5pZCA9IHRoaXMuY29uZmlnLmlkIHx8IHVuaXF1ZUlkKCJzcGxpZGUiKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdGhpcy5TdHlsZSA9IG5ldyBTdHlsZSh0aGlzLmlkLCB0aGlzLm9wdGlvbnMpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICB0aGlzLkRpcmVjdGlvbiA9IERpcmVjdGlvbihudWxsLCBudWxsLCB0aGlzLm9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zKTtcbiAgICBhc3NlcnQodGhpcy5jb250ZW50cy5sZW5ndGgsICJQcm92aWRlIGF0IGxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FzdCAxIGNvbnRlbnQuIik7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cblxuICBTcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUmVuZGVyZXIuY2xlYW4gPSBmdW5jdGlvbiBjbGVhbihzcGxpZGUpIHtcbiAgICB2YXIgX0UnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZTE0ID0gRXZlbnRJbnRlcmZhY2Uoc3BsaWRlKSxcbiAgICAgICAgb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX0V2ZW50SW50ZXJmYWNlMTQub247XG5cbiAgICB2YXIgcm9vdCA9IHNwbGlkZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdDtcbiAgICB2YXIgY2xvbmVzID0gcXVlcnlBbGwocm9vdCwgIi4iICsgQ0xBU1NfQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInT05FKTtcbiAgICBvbihFVkVOVF9NT1VOVEVELCBmdW5jdGlvbiAoKSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVtb3ZlKGNoaWxkKHJvb3QsICJzdHlsZSIpKTtcbiAgICB9KTtcbiAgICByZW1vdmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGNsb25lcyk7XG4gIH07XG5cbiAgdmFyIF9wcm90bzMgPSBTcGxpZGVSZW5kZXJlci5wJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG90eXBlO1xuXG4gIF9wcm90bzMuaW5pdCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRoaXMucGFyc2VCcmVha3BvaW50cygpO1xuICAgIHRoaXMuaW5pdFNsaWRlcygpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB0aGlzLnJlZ2lzdGVyUm9vdFN0eWxlcygpO1xuICAgIHRoaXMucmVnaXN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VyVHJhY2tTdHlsZXMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyU2xpZGVTdHlsZXMoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdGhpcy5yZWdpc3Rlckxpc3RTdHlsZXMoKTtcbiAgfTtcblxuICBfcHJvdG8zLicKICAgICAgICAgICAgICAgICAgICAgICAgYidpbml0U2xpZGVzID0gZnVuY3Rpb24gaW5pdFNsaWRlcygpIHtcbiAgICB2YXIgX3RoaXM0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IHRoaXM7XG5cbiAgICBwdXNoKHRoaXMuc2xpZGVzLCB0aGlzLmNvbnRlbnRzLm1hcCcKICAgICAgICAgICAgICAgICAgICAgICAgYicoZnVuY3Rpb24gKGNvbnRlbnQsIGluZGV4KSB7XG4gICAgICBjb250ZW50ID0gaXNTdHJpbicKICAgICAgICAgICAgICAgICAgICAgICAgYidnKGNvbnRlbnQpID8ge1xuICAgICAgICBodG1sOiBjb250ZW50XG4gICAgICB9IDogYycKICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRlbnQ7XG4gICAgICBjb250ZW50LnN0eWxlcyA9IGNvbnRlbnQuc3R5bGVzIHx8IHt9OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGNvbnRlbnQuYXR0cnMgPSBjb250ZW50LmF0dHJzIHx8IHt9O1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgX3RoaXM0LmNvdmVyKGNvbnRlbnQpO1xuXG4gICAgICB2YXIgY2xhc3NlcyA9IF8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpczQub3B0aW9ucy5jbGFzc2VzLnNsaWRlICsgIiAiICsgKGluZGV4ID09PSAwID8gQycKICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX0FDVElWRSA6ICIiKTtcbiAgICAgIGFzc2lnbihjb250ZW50LmF0dHJzLCB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICBjbGFzczogKGNsYXNzZXMgKyAiICIgKyAoY29udGVudC5hdHRycy5jbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MgfHwgIiIpKS50cmltKCksXG4gICAgICAgIHN0eWxlOiBfdGhpczQuYnVpbGRTdHlsZXMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnRlbnQuc3R5bGVzKVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gY29udGVudDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSkpO1xuXG4gICAgaWYgKHRoaXMuaXNMb29wKCkpIHtcbiAgICAgIHRoaXMuZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmVyYXRlQ2xvbmVzKHRoaXMuc2xpZGVzKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvMycKICAgICAgICAgICAgICAgICAgICAgICAgYicucmVnaXN0ZXJSb290U3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJSb290U3R5bGVzKCkgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgIHRoaXMuYnJlYWtwb2ludHMuZicKICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2goZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgd2lkdGggPSBfcmVmMlswXScKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWYyWzFdO1xuXG4gICAgICBfdGhpczUuU3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlLnJ1bGUoIiAiLCAibWF4LXdpZHRoIiwgdW5pdChvcHRpb25zLndpZHRoKSwgd2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyVHJhY2tTdHlsZXMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gZnVuY3Rpb24gcmVnaXN0ZXJUcmFja1N0eWxlcygpIHtcbiAgICB2YXIgX3RoaXM2ID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RoaXM7XG5cbiAgICB2YXIgU3R5bGUyID0gdGhpcy5TdHlsZTtcbiAgICB2YXIgc2VsZScKICAgICAgICAgICAgICAgICAgICAgICAgYidjdG9yID0gIi4iICsgQ0xBU1NfVFJBQ0s7XG4gICAgdGhpcy5icmVha3BvaW50cy5mb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgYidjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgIHZhciB3aWR0aCA9IF9yZWYzWzBdJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgICBvcHRpb25zID0gX3JlZjNbMV07XG4gICAgICBTdHlsZTIucnVsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Uoc2VsZWN0b3IsIF90aGlzNi5yZXNvbHZlKCJwYWRkaW5nTGVmdCIpLCBfdGhpczYuY3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc1BhZGRpbmcob3B0aW9ucywgZmFsc2UpLCB3aWR0aCk7XG4gICAgICBTdHlsZTIucnVsZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2VsZWN0b3IsIF90aGlzNi5yZXNvbHZlKCJwYWRkaW5nUmlnaHQiKSwgX3RoaXM2LmNzcycKICAgICAgICAgICAgICAgICAgICAgICAgYidQYWRkaW5nKG9wdGlvbnMsIHRydWUpLCB3aWR0aCk7XG4gICAgICBTdHlsZTIucnVsZShzZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZWN0b3IsICJoZWlnaHQiLCBfdGhpczYuY3NzVHJhY2tIZWlnaHQob3B0aW9ucyksIHdpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2R0aCk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3Rlckxpc3RTdHlsZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gZnVuY3Rpb24gcmVnaXN0ZXJMaXN0U3R5bGVzKCkge1xuICAgIHZhciBfdGhpczcgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcztcblxuICAgIHZhciBTdHlsZTIgPSB0aGlzLlN0eWxlO1xuICAgIHZhciBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgPSAiLiIgKyBDTEFTU19MSVNUO1xuICAgIHRoaXMuYnJlYWtwb2ludHMuZm9yRWFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2goZnVuY3Rpb24gKF9yZWY0KSB7XG4gICAgICB2YXIgd2lkdGggPSBfcmVmNFswXSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWY0WzFdO1xuICAgICAgU3R5bGUyLnJ1bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHNlbGVjdG9yLCAidHJhbnNmb3JtIiwgX3RoaXM3LmJ1aWxkVHJhbnNsYXRlKG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYidzKSwgd2lkdGgpO1xuXG4gICAgICBpZiAoIV90aGlzNy5jc3NTbGlkZUhlaWdodChvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucykpIHtcbiAgICAgICAgU3R5bGUyLnJ1bGUoc2VsZWN0b3IsICJhc3BlY3QtcmF0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvIiwgX3RoaXM3LmNzc0FzcGVjdFJhdGlvKG9wdGlvbnMpLCB3aWR0aCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90bzMucmVnaXN0ZXJTbGlkZVN0eWxlcyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBmdW5jdGlvbiByZWdpc3RlclNsaWRlU3R5bGVzKCkge1xuICAgIHZhciBfdGhpczggPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcztcblxuICAgIHZhciBTdHlsZTIgPSB0aGlzLlN0eWxlO1xuICAgIHZhciBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IgPSAiLiIgKyBDTEFTU19TTElERTtcbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgdmFyIHdpZHRoID0gX3JlZjVbMF0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgICAgICAgIG9wdGlvbnMgPSBfcmVmNVsxXTtcbiAgICAgIFN0eWxlMi5ydWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShzZWxlY3RvciwgIndpZHRoIiwgX3RoaXM4LmNzc1NsaWRlV2lkdGgob3B0aW9ucyksICcKICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aCk7XG4gICAgICBTdHlsZTIucnVsZShzZWxlY3RvciwgImhlaWdodCIsIF90aGlzOCcKICAgICAgICAgICAgICAgICAgICAgICAgYicuY3NzU2xpZGVIZWlnaHQob3B0aW9ucykgfHwgIjEwMCUiLCB3aWR0aCk7XG4gICAgICBTdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUyLnJ1bGUoc2VsZWN0b3IsIF90aGlzOC5yZXNvbHZlKCJtYXJnaW5SaWdodCIpLCB1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25pdChvcHRpb25zLmdhcCkgfHwgIjBweCIsIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhzZWxlY3RvciArICIgPiBpbWciLCAiZGlzcGxheSIsIG9wdGlvbnMuY292ZXIgPyAibm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbmUiIDogImlubGluZSIsIHdpZHRoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLicKICAgICAgICAgICAgICAgICAgICAgICAgYididWlsZFRyYW5zbGF0ZSA9IGZ1bmN0aW9uIGJ1aWxkVHJhbnNsYXRlKG9wdGlvbnMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIF90aGlzJERpcmVjdGlvbiA9IHRoaXMuRGlyZWN0aW9uLFxuICAgICAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzb2x2ZSA9IF90aGlzJERpcmVjdGlvbi5yZXNvbHZlLFxuICAgICAgICBvcmllbnQgPSBfdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMkRGlyZWN0aW9uLm9yaWVudDtcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlcy5wdXNoKHRoaXMuY3NzT2Zmc2V0Q2xvbmVzKG9wdGlvbnMpKTtcbiAgICB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLnB1c2godGhpcy5jc3NPZmZzZXRHYXBzKG9wdGlvbnMpKTtcblxuICAgIGlmICh0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5pc0NlbnRlcihvcHRpb25zKSkge1xuICAgICAgdmFsdWVzLnB1c2godGhpcy5idWlsZCcKICAgICAgICAgICAgICAgICAgICAgICAgYidDc3NWYWx1ZShvcmllbnQoLTUwKSwgIiUiKSk7XG4gICAgICB2YWx1ZXMucHVzaC5hcHBseScKICAgICAgICAgICAgICAgICAgICAgICAgYicodmFsdWVzLCB0aGlzLmNzc09mZnNldENlbnRlcihvcHRpb25zKSk7XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKEJvb2xlYW4pLm1hcChmdW5jdGlvbiAodmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gICAgICByZXR1cm4gInRyYW5zbGF0ZSIgKyByZXNvbHZlKCJYIikgKyAiKCIgKycKICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFsdWUgKyAiKSI7XG4gICAgfSkuam9pbigiICIpO1xuICB9O1xuXG4gIF9wcm90bzMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc09mZnNldENsb25lcyA9IGZ1bmN0aW9uIGNzc09mZnNldENsb25lcyhvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBfdGhpcyREaXJlY3Rpb24yID0gdGhpcy5EaXJlY3Rpb24sXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICByZXNvbHZlID0gX3RoaXMkRGlyZWN0aW9uMi5yZXNvbHZlLFxuICAgICAgICBvcmknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ID0gX3RoaXMkRGlyZWN0aW9uMi5vcmllbnQ7XG4gICAgdmFyIGNsb25lQ291bnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGhpcy5nZXRDbG9uZUNvdW50KCk7XG5cbiAgICBpZiAodGhpcy5pc0ZpeGVkV2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKG9wdGlvbnMpKSB7XG4gICAgICB2YXIgX3RoaXMkcGFyc2VDc3NWYWx1ZSA9IHRoaXMucGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnNlQ3NzVmFsdWUob3B0aW9uc1tyZXNvbHZlKCJmaXhlZFdpZHRoIildKSxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFsdWUgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlLnZhbHVlLFxuICAgICAgICAgIHVuaXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInMiA9IF90aGlzJHBhcnNlQ3NzVmFsdWUudW5pdDtcblxuICAgICAgcmV0dXJuIHRoaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLmJ1aWxkQ3NzVmFsdWUob3JpZW50KHZhbHVlKSAqIGNsb25lQ291bnQsIHVuaXQyKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuXG4gICAgdmFyIHBlcmNlbnQgPSAxMDAgKiBjbG9uZUNvdW50IC8gb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnMucGVyUGFnZTtcbiAgICByZXR1cm4gb3JpZW50KHBlcmNlbnQpICsgIiUiO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcblxuICBfcHJvdG8zLmNzc09mZnNldENlbnRlciA9IGZ1bmN0aW9uIGNzc09mZnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRDZW50ZXIob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyREaXJlY3Rpb24zID0gdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInRGlyZWN0aW9uLFxuICAgICAgICByZXNvbHZlID0gX3RoaXMkRGlyZWN0aW9uMy5yZXNvbHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSxcbiAgICAgICAgb3JpZW50ID0gX3RoaXMkRGlyZWN0aW9uMy5vcmllbnQ7XG5cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKHRoaXMuaXNGaXhlZFdpZHRoKG9wdGlvbnMpKSB7XG4gICAgICB2YXIgX3RoaXMkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcnNlQ3NzVmFsdWUyID0gdGhpcy5wYXJzZUNzc1ZhbHVlKG9wdGlvbnNbcmVzb2x2ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgIGInImZpeGVkV2lkdGgiKV0pLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcGFyc2VDc3NWYWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUyLnZhbHVlLFxuICAgICAgICAgIHVuaXQyID0gX3RoaXMkcGFyc2VDc3NWYWx1ZTIudW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInaXQ7XG5cbiAgICAgIHJldHVybiBbdGhpcy5idWlsZENzc1ZhbHVlKG9yaWVudCh2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndWUgLyAyKSwgdW5pdDIpXTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWVzID0gW107XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlLFxuICAgICAgICBnYXAgPSBvcHRpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiducy5nYXA7XG4gICAgdmFsdWVzLnB1c2gob3JpZW50KDUwIC8gcGVyUGFnZSkgKyAiJSIpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIGlmIChnYXApIHtcbiAgICAgIHZhciBfdGhpcyRwYXJzZUNzc1ZhbHVlMyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSB0aGlzLnBhcnNlQ3NzVmFsdWUoZ2FwKSxcbiAgICAgICAgICBfdmFsdWUgPSBfdGhpcyQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyc2VDc3NWYWx1ZTMudmFsdWUsXG4gICAgICAgICAgX3VuaXQgPSBfdGhpcyRwYXJzZUMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NWYWx1ZTMudW5pdDtcblxuICAgICAgdmFyIGdhcE9mZnNldCA9IChfdmFsdWUgLyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGVyUGFnZSAtIF92YWx1ZSkgLyAyO1xuICAgICAgdmFsdWVzLnB1c2godGhpcy5idWlsZEMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3NWYWx1ZShvcmllbnQoZ2FwT2Zmc2V0KSwgX3VuaXQpKTtcbiAgICB9XG5cbiAgICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHZhbHVlcztcbiAgfTtcblxuICBfcHJvdG8zLmNzc09mZnNldEdhcHMgPSBmdScKICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gY3NzT2Zmc2V0R2FwcyhvcHRpb25zKSB7XG4gICAgdmFyIGNsb25lQ291bnQgPScKICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5nZXRDbG9uZUNvdW50KCk7XG5cbiAgICBpZiAoY2xvbmVDb3VudCAmJiBvcCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9ucy5nYXApIHtcbiAgICAgIHZhciBvcmllbnQgPSB0aGlzLkRpcmVjdGlvbi5vcmllbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuXG4gICAgICB2YXIgX3RoaXMkcGFyc2VDc3NWYWx1ZTQgPSB0aGlzLnBhcnNlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlKG9wdGlvbnMuZ2FwKSxcbiAgICAgICAgICB2YWx1ZSA9IF90aGlzJHBhcnNlQycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1ZhbHVlNC52YWx1ZSxcbiAgICAgICAgICB1bml0MiA9IF90aGlzJHBhcnNlQ3NzVmFsdScKICAgICAgICAgICAgICAgICAgICAgICAgYidlNC51bml0O1xuXG4gICAgICBpZiAodGhpcy5pc0ZpeGVkV2lkdGgob3B0aW9ucykpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ3NzVmFsdWUob3JpZW50KHZhbHVlICogYycKICAgICAgICAgICAgICAgICAgICAgICAgYidsb25lQ291bnQpLCB1bml0Mik7XG4gICAgICB9XG5cbiAgICAgIHZhciBwZXJQYWdlID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMucGVyUGFnZTtcbiAgICAgIHZhciBnYXBzID0gY2xvbmVDb3VudCAvIHBlclAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlO1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDc3NWYWx1ZShvcmllbnQoZ2FwcyAqIHYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSksIHVuaXQyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIiI7XG4gIH07XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIF9wcm90bzMucmVzb2x2ZSA9IGZ1bmN0aW9uIHJlc29sdmUocHJvcCkge1xuICAgIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gY2FtZWxUb0tlYmFiKHRoaXMuRGlyZWN0aW9uLnJlc29sdmUocHJvcCkpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8zLmNzc1BhZGRpbmcgPSBmdW5jdGlvbiBjc3NQYWRkaW5nKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRpb25zLCByaWdodCkge1xuICAgIHZhciBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgcHJvcCA9IHRoaXMuRGlyZWN0aW9uLnJlc29sdmUocmlnaHQgPyAicmlnaCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0IiA6ICJsZWZ0IiwgdHJ1ZSk7XG4gICAgcmV0dXJuIHBhZGRpbmcgJiYgdW5pdChwYWRkaScKICAgICAgICAgICAgICAgICAgICAgICAgYiduZ1twcm9wXSB8fCAoaXNPYmplY3QocGFkZGluZykgPyAwIDogcGFkZGluZykpIHx8ICIwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3B4IjtcbiAgfTtcblxuICBfcHJvdG8zLmNzc1RyYWNrSGVpZ2h0ID0gZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgYidzc1RyYWNrSGVpZ2h0KG9wdGlvbnMpIHtcbiAgICB2YXIgaGVpZ2h0ID0gIiI7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgaWYgKHRoaXMuaXNWZXJ0aWNhbCgpKSB7XG4gICAgICBoZWlnaHQgPSB0aGlzLmNzc0gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWlnaHQob3B0aW9ucyk7XG4gICAgICBhc3NlcnQoaGVpZ2h0LCBcJyJoZWlnaHQiIGknCiAgICAgICAgICAgICAgICAgICAgICAgIGIncyBtaXNzaW5nLlwnKTtcbiAgICAgIGhlaWdodCA9ICJjYWxjKCIgKyBoZWlnaHQgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIiAtICIgKyB0aGlzLmNzc1BhZGRpbmcob3B0aW9ucywgZmFsc2UpICsgIiAtICIgKyB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5jc3NQYWRkaW5nKG9wdGlvbnMsIHRydWUpICsgIikiO1xuICAgIH1cblxuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gaGVpZ2h0O1xuICB9O1xuXG4gIF9wcm90bzMuY3NzSGVpZ2h0ID0gZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGNzc0hlaWdodChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHVuaXQob3B0aW9ucy5oZWlnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2h0KTtcbiAgfTtcblxuICBfcHJvdG8zLmNzc1NsaWRlV2lkdGggPSBmdW5jdGlvbiBjcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzU2xpZGVXaWR0aChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuYXV0b1dpZHRoICcKICAgICAgICAgICAgICAgICAgICAgICAgYic/ICIiIDogdW5pdChvcHRpb25zLmZpeGVkV2lkdGgpIHx8ICh0aGlzLmlzVmVydGljYWwoJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgPyAiIiA6IHRoaXMuY3NzU2xpZGVTaXplKG9wdGlvbnMpKTtcbiAgfTtcblxuICBfcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidyb3RvMy5jc3NTbGlkZUhlaWdodCA9IGZ1bmN0aW9uIGNzc1NsaWRlSGVpZ2h0KG9wdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zKSB7XG4gICAgcmV0dXJuIHVuaXQob3B0aW9ucy5maXhlZEhlaWdodCkgfHwgKHRoaXMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzVmVydGljYWwoKSA/IG9wdGlvbnMuYXV0b0hlaWdodCA/ICIiIDogdGhpcy5jc3NTbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVTaXplKG9wdGlvbnMpIDogdGhpcy5jc3NIZWlnaHQob3B0aW9ucykpO1xuICB9OycKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBfcHJvdG8zLmNzc1NsaWRlU2l6ZSA9IGZ1bmN0aW9uIGNzc1NsaWRlU2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicob3B0aW9ucykge1xuICAgIHZhciBnYXAgPSB1bml0KG9wdGlvbnMuZ2FwKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuICJjYWxjKCgxMDAlIiArIChnYXAgJiYgIiArICIgKyBnYXApICsgIikvIiArJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAob3B0aW9ucy5wZXJQYWdlIHx8IDEpICsgKGdhcCAmJiAiIC0gIiArIGdhcCkgKyAiKSInCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzQXNwZWN0UmF0aW8gPSBmdW5jdGlvbiBjc3NBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NwZWN0UmF0aW8ob3B0aW9ucykge1xuICAgIHZhciBoZWlnaHRSYXRpbyA9IG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hlaWdodFJhdGlvO1xuICAgIHJldHVybiBoZWlnaHRSYXRpbyA/ICIiICsgMSAvIGhlaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RSYXRpbyA6ICIiO1xuICB9O1xuXG4gIF9wcm90bzMuYnVpbGRDc3NWYWx1ZSA9IGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBidWlsZENzc1ZhbHVlKHZhbHVlLCB1bml0Mikge1xuICAgIHJldHVybiAiIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSArIHVuaXQyO1xuICB9O1xuXG4gIF9wcm90bzMucGFyc2VDc3NWYWx1ZSA9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBwYXJzZUNzc1ZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKGlzU3RyaW5nKHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpIHtcbiAgICAgIHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKSB8fCAwOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHZhciB1bml0MiA9IHZhbHVlLnJlcGxhY2UoL1xcZCooXFwuXFxkKik/LywgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyIiKSB8fCAicHgiO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWU6IG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3IsXG4gICAgICAgIHVuaXQ6IHVuaXQyXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgdW5pdDogInB4IlxuICAgIH07XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9O1xuXG4gIF9wcm90bzMucGFyc2VCcmVha3BvaW50cyA9IGZ1bmN0aW9uIHBhcnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZUJyZWFrcG9pbnRzKCkge1xuICAgIHZhciBfdGhpczkgPSB0aGlzO1xuXG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBicmVha3BvaW50cyA9IHRoaXMub3B0aW9ucy5icmVha3BvaW50cztcbiAgICB0aGlzLmJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Vha3BvaW50cy5wdXNoKFsiZGVmYXVsdCIsIHRoaXMub3B0aW9uc10pO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChicmVha3BvaW50cykge1xuICAgICAgZm9yT3duKGJyZWFrcG9pbnRzLCBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gKG9wdGlvbnMsIHdpZHRoKSB7XG4gICAgICAgIF90aGlzOS5icmVha3BvaW50cy5wdXNoJwogICAgICAgICAgICAgICAgICAgICAgICBiJyhbd2lkdGgsIG1lcmdlKG1lcmdlKHt9LCBfdGhpczkub3B0aW9ucyksIG9wdGlvbnMpXSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMuaXNGaXhlZFdpZHRoID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGlzRml4ZWRXaWR0aChvcHRpb25zKSB7XG4gICAgcmV0dXJuICEhb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbnNbdGhpcy5EaXJlY3Rpb24ucmVzb2x2ZSgiZml4ZWRXaWR0aCIpXTtcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvMy5pc0xvb3AgPSBmdW5jdGlvbiBpc0xvb3AoKSB7XG4gICAgcmV0dXJuIHRoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLm9wdGlvbnMudHlwZSA9PT0gTE9PUDtcbiAgfTtcblxuICBfcHJvdG8zLmlzQ2VudCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlciA9IGZ1bmN0aW9uIGlzQ2VudGVyKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5mbycKICAgICAgICAgICAgICAgICAgICAgICAgYidjdXMgPT09ICJjZW50ZXIiKSB7XG4gICAgICBpZiAodGhpcy5pc0xvb3AoKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLm9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLnR5cGUgPT09IFNMSURFKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5vcHRpb25zLnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmltU3BhY2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8zLmlzVmVydGljYWwgPSBmdW5jdGlvbiBpc1ZlcnRpY2FsKCcKICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRpcmVjdGlvbiA9PT0gVFRCO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcblxuICBfcHJvdG8zLmJ1aWxkQ2xhc3NlcyA9IGZ1bmN0aW9uIGJ1aWxkQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiBbQ0xBU1NfUk9PVCwgQ0xBU1NfUk9PVCArICItLSIgKyBvcHRpb25zLnR5cGUsIENMJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19ST09UICsgIi0tIiArIG9wdGlvbnMuZGlyZWN0aW9uLCBvcHRpb25zLmRyYWcgJiYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX1JPT1QgKyAiLS1kcmFnZ2FibGUiLCBvcHRpb25zLmlzTmF2aWdhdGlvbiAmJicKICAgICAgICAgICAgICAgICAgICAgICAgYicgQ0xBU1NfUk9PVCArICItLW5hdiIsIENMQVNTX0FDVElWRSwgIXRoaXMuY29uZmlnLmhpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RkZW4gJiYgQ0xBU1NfUkVOREVSRURdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB9O1xuXG4gIF9wcm90bzMuYnVpbGRBdHRycyA9IGZ1bmN0aW9uIGJ1aWxkQXR0cnMoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHJzKSB7XG4gICAgdmFyIGF0dHIgPSAiIjtcbiAgICBmb3JPd24oYXR0cnMsIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgYXR0ciArPSB2YWx1ZSA/ICIgIiArIGNhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbFRvS2ViYWIoa2V5KSArICI9XFwiIiArIHZhbHVlICsgIlxcIiIgOiAiIjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgcmV0dXJuIGF0dHIudHJpbSgpO1xuICB9O1xuXG4gIF9wcm90bzMuYnVpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xkU3R5bGVzID0gZnVuY3Rpb24gYnVpbGRTdHlsZXMoc3R5bGVzKSB7XG4gICAgdmFyIHN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSA9ICIiO1xuICAgIGZvck93bihzdHlsZXMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc3R5bGUgKz0gIiAiICsgY2FtZWxUb0tlYmFiKGtleSkgKyAiOiIgKyB2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKyAiOyI7XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0eWxlLnRyaW0oKTtcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvMy5yZW5kZXJTbGlkZXMgPSBmdW5jdGlvbiByZW5kZXJTbGlkZXMoKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBfdGhpczEwID0gdGhpcztcblxuICAgIHZhciB0YWcgPSB0aGlzLmNvbmZpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2cuc2xpZGVUYWc7XG4gICAgcmV0dXJuIHRoaXMuc2xpZGVzLm1hcChmdW5jdGlvbiAoY29uJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbnQpIHtcbiAgICAgIHJldHVybiAiPCIgKyB0YWcgKyAiICIgKyBfdGhpczEwLmJ1aWxkJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJzKGNvbnRlbnQuYXR0cnMpICsgIj4iICsgKGNvbnRlbnQuaHRtbCB8fCAiIikgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjwvIiArIHRhZyArICI+IjtcbiAgICB9KS5qb2luKCIiKTtcbiAgfTtcblxuICBfcHJvdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvMy5jb3ZlciA9IGZ1bmN0aW9uIGNvdmVyKGNvbnRlbnQpIHtcbiAgICB2YXIgc3R5bGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IGNvbnRlbnQuc3R5bGVzLFxuICAgICAgICBfY29udGVudCRodG1sID0gY29udGVudC5odCcKICAgICAgICAgICAgICAgICAgICAgICAgYidtbCxcbiAgICAgICAgaHRtbCA9IF9jb250ZW50JGh0bWwgPT09IHZvaWQgMCA/ICIiIDogXycKICAgICAgICAgICAgICAgICAgICAgICAgYidjb250ZW50JGh0bWw7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmNvdmVyICYmICF0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zLmxhenlMb2FkKSB7XG4gICAgICB2YXIgc3JjID0gaHRtbC5tYXRjaCgvPCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpbWcuKj9zcmNcXHMqPVxccyooW1wnIl0pKC4rPylcXDEuKj8+Lyk7XG5cbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAoc3JjICYmIHNyY1syXSkge1xuICAgICAgICBzdHlsZXMuYmFja2dyb3VuZCA9ICJjZScKICAgICAgICAgICAgICAgICAgICAgICAgYidudGVyL2NvdmVyIG5vLXJlcGVhdCB1cmwoXCciICsgc3JjWzJdICsgIlwnKSI7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zLmdlbmVyYXRlQ2xvbmVzID0gZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGdlbmVyYXRlQ2xvbmVzKGNvbnRlbnRzKSB7XG4gICAgdmFyIGNsYXNzZXMgPSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5vcHRpb25zLmNsYXNzZXM7XG4gICAgdmFyIGNvdW50ID0gdGhpcy5nZXRDbG9uZUNvdScKICAgICAgICAgICAgICAgICAgICAgICAgYidudCgpO1xuICAgIHZhciBzbGlkZXMgPSBjb250ZW50cy5zbGljZSgpO1xuXG4gICAgd2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxlIChzbGlkZXMubGVuZ3RoIDwgY291bnQpIHtcbiAgICAgIHB1c2goc2xpZGVzLCBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzKTtcbiAgICB9XG5cbiAgICBwdXNoKHNsaWRlcy5zbGljZSgtY291bnQpLnJldmVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NlKCksIHNsaWRlcy5zbGljZSgwLCBjb3VudCkpLmZvckVhY2goZnVuY3Rpb24gKGNvbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBpbmRleCkge1xuICAgICAgdmFyIGF0dHJzID0gYXNzaWduKHt9LCBjb250ZW50LmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHRycywge1xuICAgICAgICBjbGFzczogY29udGVudC5hdHRycy5jbGFzcyArICIgIiArIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbGFzc2VzLmNsb25lXG4gICAgICB9KTtcbiAgICAgIHZhciBjbG9uZSA9IGFzc2lnbignCiAgICAgICAgICAgICAgICAgICAgICAgIGIne30sIGNvbnRlbnQsIHtcbiAgICAgICAgYXR0cnM6IGF0dHJzXG4gICAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpbmRleCA8IGNvdW50ID8gY29udGVudHMudW5zaGlmdChjbG9uZSkgOiBjb250ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMucHVzaChjbG9uZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5nZXRDbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgYidDb3VudCA9IGZ1bmN0aW9uIGdldENsb25lQ291bnQoKSB7XG4gICAgaWYgKHRoaXMuaXNMbycKICAgICAgICAgICAgICAgICAgICAgICAgYidvcCgpKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcblxuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmIChvcHRpb25zLmNsb25lcykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5jbG9uZXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgICAgfVxuXG4gICAgICB2YXIgcGVyUGFnZSA9IG1heC5hcHBseSh2b2lkIDAsJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0aGlzLmJyZWFrcG9pbnRzLm1hcChmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBvcHRpb25zMiA9IF9yZWY2WzFdO1xuICAgICAgICByZXR1cm4gb3B0aW9uczIucGVyUGFnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gcGVyUGFnZSAqICgob3B0aW9ucy5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xpY2tNYXhQYWdlcyB8fCAxKSArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcblxuICBfcHJvdG8zLnJlbmRlckFycm93cyA9IGZ1bmN0aW9uIHJlbmRlckFycm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGInd3MoKSB7XG4gICAgdmFyIGh0bWwgPSAiIjtcbiAgICBodG1sICs9ICI8ZGl2IGNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncz1cXCIiICsgdGhpcy5vcHRpb25zLmNsYXNzZXMuYXJyb3dzICsgIlxcIj4iO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBodG1sICs9IHRoaXMucmVuZGVyQXJyb3codHJ1ZSk7XG4gICAgaHRtbCArPSB0aGlzLnJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXJBcnJvdyhmYWxzZSk7XG4gICAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIGh0bWw7XG4gIH07XG5cbiAgX3Byb3RvMy5yZW5kZXJBcnJvdyA9IGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW5kZXJBcnJvdyhwcmV2KSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zLFxuICAgICAgICBjbGFzc2VzID0gX3RoaXMkb3B0aW9ucy5jbGFzc2VzLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgaTE4biA9IF90aGlzJG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgYXR0cnMgJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0ge1xuICAgICAgY2xhc3M6IGNsYXNzZXMuYXJyb3cgKyAiICIgKyAocHJldiA/IGNsYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLnByZXYgOiBjbGFzc2VzLm5leHQpLFxuICAgICAgdHlwZTogImJ1dHRvbiIsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgYXJpYUxhYmVsOiBwcmV2ID8gaTE4bi5wcmV2IDogaTE4bi5uZXh0XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG4gICAgcmV0dXJuICI8YnV0dG9uICIgKyB0aGlzLmJ1aWxkQXR0cnMoYXR0cnMpICsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICI+PHN2ZyB4bWxucz1cXCIiICsgWE1MX05BTUVfU1BBQ0UgKyAiXFwiIHZpZXdCb3gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIjAgMCAiICsgU0laRSArICIgIiArIFNJWkUgKyAiXFwiIHdpZHRoPVxcIiIgKyBTJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0laRSArICJcXCIgaGVpZ2h0PVxcIiIgKyBTSVpFICsgIlxcIj48cGF0aCBkPVxcIiIgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKHRoaXMub3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCkgKyAiXFwiIC8+PC9zdmc+PC9idXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndG9uPiI7XG4gIH07XG5cbiAgX3Byb3RvMy5odG1sID0gZnVuY3Rpb24gaHRtbCgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIF90aGlzJGNvbmZpZyA9IHRoaXMuY29uZmlnLFxuICAgICAgICByb290Q2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgYidzID0gX3RoaXMkY29uZmlnLnJvb3RDbGFzcyxcbiAgICAgICAgbGlzdFRhZyA9IF90aGlzJCcKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25maWcubGlzdFRhZyxcbiAgICAgICAgYXJyb3dzID0gX3RoaXMkY29uZmlnLmFycm93cycKICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgIGJlZm9yZVRyYWNrID0gX3RoaXMkY29uZmlnLmJlZm9yZVRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgYWZ0ZXJUcmFjayA9IF90aGlzJGNvbmZpZy5hZnRlclRyYWNrLFxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgc2xpZGVyID0gX3RoaXMkY29uZmlnLnNsaWRlcixcbiAgICAgICAgYmVmb3JlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlciA9IF90aGlzJGNvbmZpZy5iZWZvcmVTbGlkZXIsXG4gICAgICAgIGFmdGVyU2xpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlciA9IF90aGlzJGNvbmZpZy5hZnRlclNsaWRlcjtcbiAgICB2YXIgaHRtbCA9ICInCiAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbiAgICBodG1sICs9ICI8ZGl2IGlkPVxcIiIgKyB0aGlzLmlkICsgIlxcIiBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3M9XFwiIiArIHRoaXMuYnVpbGRDbGFzc2VzKCkgKyAiICIgKyAocm9vdENsYXNzIHx8ICIiJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgKyAiXFwiPiI7XG4gICAgaHRtbCArPSAiPHN0eWxlPiIgKyB0aGlzLlN0eWxlLmJ1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZCgpICsgIjwvc3R5bGU+IjtcblxuICAgIGlmIChzbGlkZXIpIHtcbiAgICAgIGh0bScKICAgICAgICAgICAgICAgICAgICAgICAgYidsICs9IGJlZm9yZVNsaWRlciB8fCAiIjtcbiAgICAgIGh0bWwgKz0gIjxkaXYgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3NzPVxcInNwbGlkZV9fc2xpZGVyXFwiPiI7XG4gICAgfVxuXG4gICAgaHRtbCArPSBiZWZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlVHJhY2sgfHwgIiI7XG5cbiAgICBpZiAoYXJyb3dzKSB7XG4gICAgICBodG1sICs9ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLnJlbmRlckFycm93cygpO1xuICAgIH1cblxuICAgIGh0bWwgKz0gIjxkaXYgY2wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXNzPVxcInNwbGlkZV9fdHJhY2tcXCI+IjtcbiAgICBodG1sICs9ICI8IiArIGxpc3RUJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FnICsgIiBjbGFzcz1cXCJzcGxpZGVfX2xpc3RcXCI+IjtcbiAgICBodG1sICs9IHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidzLnJlbmRlclNsaWRlcygpO1xuICAgIGh0bWwgKz0gIjwvIiArIGxpc3RUYWcgKyAiJwogICAgICAgICAgICAgICAgICAgICAgICBiJz4iO1xuICAgIGh0bWwgKz0gIjwvZGl2PiI7XG4gICAgaHRtbCArPSBhZnRlclRyYWNrJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB8fCAiIjtcblxuICAgIGlmIChzbGlkZXIpIHtcbiAgICAgIGh0bWwgKz0gIjwvZGl2PicKICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xuICAgICAgaHRtbCArPSBhZnRlclNsaWRlciB8fCAiIjtcbiAgICB9XG5cbiAgICBoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RtbCArPSAiPC9kaXY+IjtcbiAgICByZXR1cm4gaHRtbDtcbiAgfTtcblxuICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIFNwbGlkZVJlbmRlcmVyO1xufSgpO1xuXG5leHBvcnRzLkNMQVNTRVMgPSBDTEFTU0VTJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbmV4cG9ydHMuQ0xBU1NfQUNUSVZFID0gQ0xBU1NfQUNUSVZFO1xuZXhwb3J0cy5DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfQVJST1cgPSBDTEFTU19BUlJPVztcbmV4cG9ydHMuQ0xBU1NfQVJST1dTID0gQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX0FSUk9XUztcbmV4cG9ydHMuQ0xBU1NfQVJST1dfTkVYVCA9IENMQVNTX0FSUk9XX05FJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1hUO1xuZXhwb3J0cy5DTEFTU19BUlJPV19QUkVWID0gQ0xBU1NfQVJST1dfUFJFVjsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLkNMQVNTX0NMT05FID0gQ0xBU1NfQ0xPTkU7XG5leHBvcnRzLkNMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19DT05UQUlORVIgPSBDTEFTU19DT05UQUlORVI7XG5leHBvcnRzLkNMQVNTX0ZPQ1VTX0knCiAgICAgICAgICAgICAgICAgICAgICAgIGInTiA9IENMQVNTX0ZPQ1VTX0lOO1xuZXhwb3J0cy5DTEFTU19JTklUSUFMSVpFRCA9IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19JTklUSUFMSVpFRDtcbmV4cG9ydHMuQ0xBU1NfTElTVCA9IENMQVNTX0xJU1Q7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0cy5DTEFTU19MT0FESU5HID0gQ0xBU1NfTE9BRElORztcbmV4cG9ydHMuQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX05FWFQgPSBDTEFTU19ORVhUO1xuZXhwb3J0cy5DTEFTU19PVkVSRkxPVyA9IENMQVNTX08nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkVSRkxPVztcbmV4cG9ydHMuQ0xBU1NfUEFHSU5BVElPTiA9IENMQVNTX1BBR0lOQVRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuZXhwb3J0cy5DTEFTU19QQUdJTkFUSU9OX1BBR0UgPSBDTEFTU19QQUdJTkFUSU9OX1AnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQUdFO1xuZXhwb3J0cy5DTEFTU19QUkVWID0gQ0xBU1NfUFJFVjtcbmV4cG9ydHMuQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX1BST0dSRVNTID0gQ0xBU1NfUFJPR1JFU1M7XG5leHBvcnRzLkNMQVNTX1BST0dSRVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19CQVIgPSBDTEFTU19QUk9HUkVTU19CQVI7XG5leHBvcnRzLkNMQVNTX1JPT1QgPSBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfUk9PVDtcbmV4cG9ydHMuQ0xBU1NfU0xJREUgPSBDTEFTU19TTElERTtcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRzLkNMQVNTX1NQSU5ORVIgPSBDTEFTU19TUElOTkVSO1xuZXhwb3J0cy5DTEFTU19TUiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDTEFTU19TUjtcbmV4cG9ydHMuQ0xBU1NfVE9HR0xFID0gQ0xBU1NfVE9HR0xFOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmV4cG9ydHMuQ0xBU1NfVE9HR0xFX1BBVVNFID0gQ0xBU1NfVE9HR0xFX1BBVVNFJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbmV4cG9ydHMuQ0xBU1NfVE9HR0xFX1BMQVkgPSBDTEFTU19UT0dHTEVfUExBWTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLkNMQVNTX1RSQUNLID0gQ0xBU1NfVFJBQ0s7XG5leHBvcnRzLkNMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInU19WSVNJQkxFID0gQ0xBU1NfVklTSUJMRTtcbmV4cG9ydHMuREVGQVVMVFMgPSBERUZBVUwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVFM7XG5leHBvcnRzLkVWRU5UX0FDVElWRSA9IEVWRU5UX0FDVElWRTtcbmV4cG9ydHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLkVWRU5UX0FSUk9XU19NT1VOVEVEID0gRVZFTlRfQVJST1dTX01PVU5URUQ7XG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5FVkVOVF9BUlJPV1NfVVBEQVRFRCA9IEVWRU5UX0FSUk9XU19VUERBVEVEO1xuZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMuRVZFTlRfQVVUT1BMQVlfUEFVU0UgPSBFVkVOVF9BVVRPUExBWV9QQVVTRTtcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnRzLkVWRU5UX0FVVE9QTEFZX1BMQVkgPSBFVkVOVF9BVVRPUExBWV9QTEFZO1xuZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGIndHMuRVZFTlRfQVVUT1BMQVlfUExBWUlORyA9IEVWRU5UX0FVVE9QTEFZX1BMQVlJTkc7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0cy5FVkVOVF9DTElDSyA9IEVWRU5UX0NMSUNLO1xuZXhwb3J0cy5FVkVOVF9ERVMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVFJPWSA9IEVWRU5UX0RFU1RST1k7XG5leHBvcnRzLkVWRU5UX0RSQUcgPSBFVkVOVF9EUkEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRztcbmV4cG9ydHMuRVZFTlRfRFJBR0dFRCA9IEVWRU5UX0RSQUdHRUQ7XG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncy5FVkVOVF9EUkFHR0lORyA9IEVWRU5UX0RSQUdHSU5HO1xuZXhwb3J0cy5FVkVOVF9FTkQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInX0lOREVYX0NIQU5HRUQgPSBFVkVOVF9FTkRfSU5ERVhfQ0hBTkdFRDtcbmV4cG9ydHMuRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX0hJRERFTiA9IEVWRU5UX0hJRERFTjtcbmV4cG9ydHMuRVZFTlRfSU5BQ1RJVkUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfSU5BQ1RJVkU7XG5leHBvcnRzLkVWRU5UX0xBWllMT0FEX0xPQURFRCA9IEVWRU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInVF9MQVpZTE9BRF9MT0FERUQ7XG5leHBvcnRzLkVWRU5UX01PVU5URUQgPSBFVkVOVF9NT1UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRFRDtcbmV4cG9ydHMuRVZFTlRfTU9WRSA9IEVWRU5UX01PVkU7XG5leHBvcnRzLkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9NT1ZFRCA9IEVWRU5UX01PVkVEO1xuZXhwb3J0cy5FVkVOVF9OQVZJR0FUSU9OX00nCiAgICAgICAgICAgICAgICAgICAgICAgIGInT1VOVEVEID0gRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEO1xuZXhwb3J0cy5FVkVOVF9PVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInUkZMT1cgPSBFVkVOVF9PVkVSRkxPVztcbmV4cG9ydHMuRVZFTlRfUEFHSU5BVElPTl9NT1UnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRFRCA9IEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRDtcbmV4cG9ydHMuRVZFTlRfUEFHSU4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInQVRJT05fVVBEQVRFRCA9IEVWRU5UX1BBR0lOQVRJT05fVVBEQVRFRDtcbmV4cG9ydHMuRVYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX1JFQURZID0gRVZFTlRfUkVBRFk7XG5leHBvcnRzLkVWRU5UX1JFRlJFU0ggPSBFVkUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfUkVGUkVTSDtcbmV4cG9ydHMuRVZFTlRfUkVTSVpFID0gRVZFTlRfUkVTSVpFOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmV4cG9ydHMuRVZFTlRfUkVTSVpFRCA9IEVWRU5UX1JFU0laRUQ7XG5leHBvcnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9TQ1JPTEwgPSBFVkVOVF9TQ1JPTEw7XG5leHBvcnRzLkVWRU5UX1NDUk9MTEVEICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9IEVWRU5UX1NDUk9MTEVEO1xuZXhwb3J0cy5FVkVOVF9TSElGVEVEID0gRVZFTlRfU0hJRicKICAgICAgICAgICAgICAgICAgICAgICAgYidURUQ7XG5leHBvcnRzLkVWRU5UX1NMSURFX0tFWURPV04gPSBFVkVOVF9TTElERV9LRVlETycKICAgICAgICAgICAgICAgICAgICAgICAgYidXTjtcbmV4cG9ydHMuRVZFTlRfVVBEQVRFRCA9IEVWRU5UX1VQREFURUQ7XG5leHBvcicKICAgICAgICAgICAgICAgICAgICAgICAgYid0cy5FVkVOVF9WSVNJQkxFID0gRVZFTlRfVklTSUJMRTtcbmV4cG9ydHMuRXZlbnRCaW5kZScKICAgICAgICAgICAgICAgICAgICAgICAgYidyID0gRXZlbnRCaW5kZXI7XG5leHBvcnRzLkV2ZW50SW50ZXJmYWNlID0gRXZlbnRJbnRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidmYWNlO1xuZXhwb3J0cy5GQURFID0gRkFERTtcbmV4cG9ydHMuTE9PUCA9IExPT1A7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXhwb3J0cy5MVFIgPSBMVFI7XG5leHBvcnRzLlJUTCA9IFJUTDtcbmV4cG9ydHMuUmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncXVlc3RJbnRlcnZhbCA9IFJlcXVlc3RJbnRlcnZhbDtcbmV4cG9ydHMuU0xJREUgPSBTTEknCiAgICAgICAgICAgICAgICAgICAgICAgIGInREU7XG5leHBvcnRzLlNUQVRVU19DTEFTU0VTID0gU1RBVFVTX0NMQVNTRVM7XG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0cy5TcGxpZGUgPSBTcGxpZGU7XG5leHBvcnRzLlNwbGlkZVJlbmRlcmVyID0gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZVJlbmRlcmVyO1xuZXhwb3J0cy5TdGF0ZSA9IFN0YXRlO1xuZXhwb3J0cy5UVEIgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInVFRCO1xuZXhwb3J0cy5UaHJvdHRsZSA9IFRocm90dGxlO1xuZXhwb3J0c1siZGVmYXUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHQiXSA9IFNwbGlkZTtcbicsCiAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy9zcGxpZGUuY2pzLmpzJywKICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJ30sCiAgICAgICdlbi1VUyc6IHsnQWJzb2x1dGVQYXRoJzogJycsCiAgICAgICAgICAgICAgICAnQ29udGVudCc6IGInLyohXG4gKiBTcGxpZGUuanNcbiAqIFZlcnNpb24gIDogNC4xLjRcbiAqIExpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnNlICA6IE1JVFxuICogQ29weXJpZ2h0OiAyMDIyIE5hb3Rvc2hpIEZ1aml0YVxuIConCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiL1xuJ3VzZSBzdHJpY3QnO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcygiCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2g7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoInZhbHVlIiBpbiBkZXNjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2llcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BzKTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAicHJvdG90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lwZSIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyByZXR1cm4gQ29uc3RydWN0b3I7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJ9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBNRURJQV9QUkVGRVJTX1JFRFVDRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEX01PVElPTiA9ICIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSI7XG52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIENSRUFURUQgPSAxO1xudmFyIE1PVU5URUQgPSAyO1xudmFyIElETEUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMztcbnZhciBNT1ZJTkcgPSA0O1xudmFyIFNDUk9MTElORyA9IDU7XG52YXIgRFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUdHSU5HID0gNjtcbnZhciBERVNUUk9ZRUQgPSA3O1xudmFyIFNUQVRFUyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIENSRUFURUQ6IENSRUFURUQsXG4gIE1PVU5URUQ6IE1PVU5URUQsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJRExFOiBJRExFLFxuICBNT1ZJTkc6IE1PVklORyxcbiAgU0NST0xMSU5HOiBTQ1JPTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMSU5HLFxuICBEUkFHR0lORzogRFJBR0dJTkcsXG4gIERFU1RST1lFRDogREVTVFJPWScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFRFxufTtcblxuZnVuY3Rpb24gZW1wdHkoYXJyYXkpIHtcbiAgYXJyYXkubGVuZ3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaCA9IDA7XG59XG5cbmZ1bmN0aW9uIHNsaWNlKGFycmF5TGlrZSwgc3RhcnQsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFycmF5TCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpa2UsIHN0YXJ0LCBlbmQpO1xufVxuXG5mdW5jdGlvbiBhcHBseShmdW5jKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICByZXR1cm4gZnVuYy5iaW5kLmFwcGx5KGZ1bmMsIFtudWxsXS5jb25jYXQoc2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKGFyZ3VtZW50cywgMSkpKTtcbn1cblxudmFyIG5leHRUaWNrID0gc2V0VGltJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VvdXQ7XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG5mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gcmFmKGZ1bmMpIHtcbiAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuYyk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZih0eXBlLCBzdWJqZWN0KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09IHR5cGU7XG59XG5cbmZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAhaXNOdWxsKHN1YmplY3QpICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlT2YoIm9iamVjdCIsIHN1YmplY3QpO1xufVxuXG52YXIgaXNBcnJheSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBcnJheS5pc0FycmF5O1xudmFyIGlzRnVuY3Rpb24gPSBhcHBseSh0eXBlT2YsICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24iKTtcbnZhciBpc1N0cmluZyA9IGFwcGx5KHR5cGVPZiwgInN0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciKTtcbnZhciBpc1VuZGVmaW5lZCA9IGFwcGx5KHR5cGVPZiwgInVuZGVmaW5lZCIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuZnVuY3Rpb24gaXNOdWxsKHN1YmplY3QpIHtcbiAgcmV0dXJuIHN1YmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0ID09PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHN1YmplJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN1YmplY3QgaW5zdGFuY2VvZiAoc3ViJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Qub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLkhUTUxFbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xufVxuXG5mdW5jdGlvbiBmb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaCh2YWx1ZXMsIGl0ZXJhdGVlKSB7XG4gIHRvQXJyYXkodmFsdWVzKS5mb3JFYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaChpdGVyYXRlZSk7XG59XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUpIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YodmFsdWUpID4gLTE7XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiBwdXNoKGFycmF5LCBpdGVtcykge1xuICBhcnJheS5wdXNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5hcHBseShhcnJheSwgdG9BcnJheShpdGVtcykpO1xuICByZXR1cm4gYXJyYXk7XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiB0b2dnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGFkZCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKGVsbSkge1xuICAgIGZvckVhY2goY2xhc3NlcywgZnVuY3Rpb24gKG5hbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICBpZiAobmFtZSkge1xuICAgICAgICBlbG0uY2xhc3NMaXN0W2FkZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyAiYWRkIiA6ICJyZW1vdmUiXShuYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbn1cblxuZnVuY3Rpb24gYWRkQ2xhc3MoZWxtLCBjbGFzc2VzKSB7XG4gIHRvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dnbGVDbGFzcyhlbG0sIGlzU3RyaW5nKGNsYXNzZXMpID8gY2xhc3Nlcy5zcGxpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoIiAiKSA6IGNsYXNzZXMsIHRydWUpO1xufVxuXG5mdW5jdGlvbiBhcHBlbmQocCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudCwgY2hpbGRyZW4pIHtcbiAgZm9yRWFjaChjaGlsZHJlbiwgcGFyZW50LmFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlbmRDaGlsZC5iaW5kKHBhcmVudCkpO1xufVxuXG5mdW5jdGlvbiBiZWZvcmUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25vZGVzLCByZWYpIHtcbiAgZm9yRWFjaChub2RlcywgZnVuY3Rpb24gKG5vZGUpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIHBhcmVudCA9IChyZWYgfHwgbm9kZSkucGFyZW50Tm9kZTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCByZWYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXMoZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQoZWxtKSAmJiAoZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbVsibXNNYXRjaGVzU2VsZWN0b3IiXSB8fCBlbG0ubWF0Y2hlcykuY2FsbChlbG0sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZWxlY3Rvcik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKHBhcmVudCwgc2VsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdG9yKSB7XG4gIHZhciBjaGlsZHJlbjIgPSBwYXJlbnQgPyBzbGljZShwYXJlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmNoaWxkcmVuKSA6IFtdO1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbjIuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gbWF0Y2hlcyhjaGlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsIHNlbGVjdG9yKTtcbiAgfSkgOiBjaGlsZHJlbjI7XG59XG5cbmZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaGlsZChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA/IGNoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZHJlbihwYXJlbnQsIHNlbGVjdG9yKVswXSA6IHBhcmVudC5maXJzdEVsZW1lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Q2hpbGQ7XG59XG5cbnZhciBvd25LZXlzID0gT2JqZWN0LmtleXM7XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBmb3JPd24ob2JqZWN0LCBpdGVyYXRlZSwgcmlnaHQpIHtcbiAgaWYgKG9iamUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3QpIHtcbiAgICAocmlnaHQgPyBvd25LZXlzKG9iamVjdCkucmV2ZXJzZSgpIDogbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3bktleXMob2JqZWN0KSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V5ICE9PSAiX19wcm90b19fIiAmJiBpdGVyYXRlZShvYmplY3Rba2V5XSwga2V5KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gYXNzaWduKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICBmb3JPd24oc291cmNlLCBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIG1lcmdlKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIChzb3VyY2UpIHtcbiAgICBmb3JPd24oc291cmNlLCBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHZhbHVlLCBrZXkpIHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgb2JqZWN0W2tleV0gPSB2YWx1ZS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGlmICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gbWVyZ2UoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3t9LCBpc09iamVjdChvYmplY3Rba2V5XSkgPyBvYmplY3Rba2V5XSA6IHt9LCB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXMpIHtcbiAgZm9yRWFjaCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIna2V5cyB8fCBvd25LZXlzKG9iamVjdCksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICBkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZXRlIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJpYnV0ZShlbG1zLCBhdHRycykge1xuICBmb3JFYWNoKGVsbXMsIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZWxtKSB7XG4gICAgZm9yRWFjaChhdHRycywgZnVuY3Rpb24gKGF0dHIpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBlbG0gJiYgZWxtLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICB9KTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xufVxuXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGUoZWxtcywgYXR0cnMsIHZhbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1ZSkge1xuICBpZiAoaXNPYmplY3QoYXR0cnMpKSB7XG4gICAgZm9yT3duKGF0dHJzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gKHZhbHVlMiwgbmFtZSkge1xuICAgICAgc2V0QXR0cmlidXRlKGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21zLCBuYW1lLCB2YWx1ZTIpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKGVsbXMsIGZ1bmN0aW9uIChlbG0pIHtcbiAgICAgIGlzTnVsbCh2YWx1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IHZhbHVlID09PSAiIiA/IHJlbW92ZUF0dHJpYnV0ZShlbG0sIGF0dHJzKSA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbG0uc2V0QXR0cmlidXRlKGF0dHJzLCBTdHJpbmcodmFsdWUpKTtcbiAgICB9KTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlKHRhZywgYXR0cnMsIHBhcmVudCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgdmFyIGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaWYgKGF0dHJzKSB7XG4gICAgaXNTdHJpbmcoYXR0cnMpID8gYWRkQ2xhc3MoZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbSwgYXR0cnMpIDogc2V0QXR0cmlidXRlKGVsbSwgYXR0cnMpO1xuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHBhcmVudCAmJiBhcHBlbmQocGFyZW50LCBlbG0pO1xuICByZXR1cm4gZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gc3R5bGUoZWxtLCBwcm9wLCB2YWx1ZSkge1xuICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiBnZXRDb21wdXRlZFN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZShlbG0pW3Byb3BdO1xuICB9XG5cbiAgaWYgKCFpc051bGwodmFsdWUpKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGVsbS5zdHlsZVtwcm9wXSA9ICIiICsgdmFsdWU7XG4gIH1cbn1cblxuZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGRpc3BsYXkoZWxtLCBkaXNwbGF5Mikge1xuICBzdHlsZShlbG0sICJkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcGxheSIsIGRpc3BsYXkyKTtcbn1cblxuZnVuY3Rpb24gZm9jdXMoZWxtKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBlbG1bInNldEFjdGl2ZSJdICYmIGVsbVsic2V0QWN0aXZlIl0oKSB8fCBlbG0uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZvY3VzKHtcbiAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gIH0pO1xufVxuXG5mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gZ2V0QXR0cmlidXRlKGVsbSwgYXR0cikge1xuICByZXR1cm4gZWxtLmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBdHRyaWJ1dGUoYXR0cik7XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsbSwgYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXNzTmFtZSkge1xuICByZXR1cm4gZWxtICYmIGVsbS5jbGFzc0xpc3QuY29udGFpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25zKGNsYXNzTmFtZSk7XG59XG5cbmZ1bmN0aW9uIHJlY3QodGFyZ2V0KSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXR1cm4gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gcmVtb3ZlKG5vZGVzKSB7XG4gIGZvckVhY2gobm9kZXMsIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAobm9kZSkge1xuICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH0pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gcGFyc2VIdG1sKGh0bWwpIHtcbiAgcmV0dXJuIGNoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZChuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICJ0ZXh0L2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndG1sIikuYm9keSk7XG59XG5cbmZ1bmN0aW9uIHByZXZlbnQoZSwgc3RvcFByb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWdhdGlvbikge1xuICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgaWYgKHN0b3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUHJvcGFnYXRpb24pIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUuc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyeShwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBwYXJlbnQgJiYgcGFyZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gcXVlcnknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gc2xpYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkgOiBbXTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICB0b2cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1lT2YoZSkge1xuICByZXR1cm4gZS50aW1lU3RhbXA7XG59XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB1bml0KHZhbHVlKSB7XG4gIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiB2YWx1ZSA/IHZhbHVlICsgInB4IiA6ICIiO1xufVxuXG52YXIgUFJPSkVDVF8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ09ERSA9ICJzcGxpZGUiO1xudmFyIERBVEFfQVRUUklCVVRFID0gImRhdGEtIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUk9KRUNUX0NPREU7XG5cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCJbIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyBQUk9KRUNUX0NPREUgKyAiXSAiICsgKG1lc3NhZ2UgfHwgIiIpKTtcbiAgfVxufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxudmFyIG1pbiA9IE1hdGgubWluLFxuICAgIG1heCA9IE1hdGgubWF4LFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmbG9vciA9IE1hdGguZmxvb3IsXG4gICAgY2VpbCA9IE1hdGguY2VpbCxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWJzID0gTWF0aC5hYnM7XG5cbmZ1bmN0aW9uIGFwcHJveGltYXRlbHlFcXVhbCh4LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSwgZXBzaWxvbikge1xuICByZXR1cm4gYWJzKHggLSB5KSA8IGVwc2lsb247JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiBiZXR3ZWVuKG51bWJlciwgeCwgeSwgZXhjbHVzaXZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgdmFyIG1heGltdW0gPSBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F4KHgsIHkpO1xuICByZXR1cm4gZXhjbHVzaXZlID8gbWluaW11bSA8IG51bWJlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgbnVtYmVyIDwgbWF4aW11bSA6IG1pbmltdW0gPD0gbnVtYmVyICYmIG51bWJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgPD0gbWF4aW11bTtcbn1cblxuZnVuY3Rpb24gY2xhbXAobnVtYmVyLCB4LCB5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICB2YXIgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgdmFyIG1heGltdW0gPSBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F4KHgsIHkpO1xuICByZXR1cm4gbWluKG1heChtaW5pbXVtLCBudW1iZXIpLCBtYXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW11bSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24oeCkge1xuICByZXR1cm4gKyh4ID4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzApIC0gKyh4IDwgMCk7XG59XG5cbmZ1bmN0aW9uIGNhbWVsVG9LZWJhYihzdHJpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL2csICIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGZvcm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXQoc3RyaW5nLCByZXBsYWNlbWVudHMpIHtcbiAgZm9yRWFjaChyZXBsYWNlbWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCBmdW5jdGlvbiAocmVwbGFjZW1lbnQpIHtcbiAgICBzdHJpbmcgPSBzdHJpbmcuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlcGxhY2UoIiVzIiwgIiIgKyByZXBsYWNlbWVudCk7XG4gIH0pO1xuICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cmluZztcbn1cblxuZnVuY3Rpb24gcGFkKG51bWJlcikge1xuICByZXR1cm4gbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWJlciA8IDEwID8gIjAiICsgbnVtYmVyIDogIiIgKyBudW1iZXI7XG59XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgaWRzID0ge307XG5cbmZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuICIiICsgcHJlZml4ICsgcGFkKGlkc1twcmVmaXhdID0gKGlkc1twcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZml4XSB8fCAwKSArIDEpO1xufVxuXG5mdW5jdGlvbiBFdmVudEJpbmRlcigpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcblxuICBmdW5jdGlvbiBiaW5kKHRhcmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRzLCBldmVudHMsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gICAgZm9yRWFjaEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudCh0YXJnZXRzLCBldmVudHMsIGZ1bmN0aW9uICh0YXJnZXQsIGV2ZW50LCBuYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNwYWNlKSB7XG4gICAgICB2YXIgaXNFdmVudFRhcmdldCA9ICgiYWRkRXZlbnRMaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVuZXIiIGluIHRhcmdldCk7XG4gICAgICB2YXIgcmVtb3ZlciA9IGlzRXZlbnRUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ2V0ID8gdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh0YXJnZXQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudCwgY2FsbGJhY2ssIG9wdGlvbnMpIDogdGFyZ2V0WyJyZW1vdmVMaXN0ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIiXS5iaW5kKHRhcmdldCwgY2FsbGJhY2spO1xuICAgICAgaXNFdmVudFRhcmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zKSA6IHRhcmdldFsiYWRkTGlzdGVuZXIiXShjYWxsYmFjayk7XG4gICAgICBsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGVuZXJzLnB1c2goW3RhcmdldCwgZXZlbnQsIG5hbWVzcGFjZSwgY2FsbGJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCByZW1vdmVyXSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiB1bmJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcmdldHMsIGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICBmb3JFYWNoRXZlbnQodGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmdldHMsIGV2ZW50cywgZnVuY3Rpb24gKHRhcmdldCwgZXZlbnQsIG5hbWVzcGFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICAgIGxpc3RlbmVycyA9IGxpc3RlbmVycy5maWx0ZXIoZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChsaXN0ZW5lcikge1xuICAgICAgICBpZiAobGlzdGVuZXJbMF0gPT09IHRhcmdldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgJiYgbGlzdGVuZXJbMV0gPT09IGV2ZW50ICYmIGxpc3RlbmVyWzJdID09PSBuYW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNwYWNlICYmICghY2FsbGJhY2sgfHwgbGlzdGVuZXJbM10gPT09IGNhbGxiYWNrJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpIHtcbiAgICAgICAgICBsaXN0ZW5lcls0XSgpO1xuICAgICAgICAgIHJldHVybiBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKHRhcmdldCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHR5cGUsIGRldGFpbCkge1xuICAgIHZhciBlO1xuICAgIHZhciBidWJibGVzID0gdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XG5cbiAgICBpZiAodHlwZW9mIEN1c3RvbUV2ZW50ID09PSAiZnVuY3Rpb24iKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgZSA9IG5ldyBDdXN0b21FdmVudCh0eXBlLCB7XG4gICAgICAgIGJ1YmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVzOiBidWJibGVzLFxuICAgICAgICBkZXRhaWw6IGRldGFpbFxuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDdXN0b21FdmVudCIpO1xuICAgICAgZS5pbml0Q3VzdG9tRXZlbnQodHlwZSwgYnViJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JsZXMsIGZhbHNlLCBkZXRhaWwpO1xuICAgIH1cblxuICAgIHRhcmdldC5kaXNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0Y2hFdmVudChlKTtcbiAgICByZXR1cm4gZTtcbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoRXZlbnQodGFyZ2V0cywgZXZlbnRzLCBpdGVyYXRlZSkge1xuICAgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKHRhcmdldHMsIGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIHRhcmdldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgZm9yRWFjaChldmVudHMsIGZ1bmN0aW9uIChldmVudHMyKSB7XG4gICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudHMyLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnROUykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgICB2YXIgZnJhZ21lbnQgPSBldmVudE5TLnNwbGl0KCIuIik7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGl0ZXJhdGVlKHRhcmdldCwgZnJhZ21lbnRbMF0sIGZyYWdtZW50WzFdJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gZGVzdHJveSgpIHtcbiAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGRhdGEpIHtcbiAgICAgIGRhdGFbNF0oKTtcbiAgICB9KTtcbiAgICBlbXB0eSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlzdGVuZXJzKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmluZDogYmluZCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdW5iaW5kOiB1bmJpbmQsXG4gICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXN0cm95OiBkZXN0cm95XG4gIH07XG59XG5cbnZhciBFVkVOVF9NT1VOVEVEID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJtb3VudGVkIjtcbnZhciBFVkVOVF9SRUFEWSA9ICJyZWFkeSI7XG52YXIgRVZFTlQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX01PVkUgPSAibW92ZSI7XG52YXIgRVZFTlRfTU9WRUQgPSAibW92ZWQiO1xudmFyIEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9DTElDSyA9ICJjbGljayI7XG52YXIgRVZFTlRfQUNUSVZFID0gImFjdGl2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX0lOQUNUSVZFID0gImluYWN0aXZlIjtcbnZhciBFVkVOVF9WSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTSUJMRSA9ICJ2aXNpYmxlIjtcbnZhciBFVkVOVF9ISURERU4gPSAiaGlkZGVuIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgRVZFTlRfUkVGUkVTSCA9ICJyZWZyZXNoIjtcbnZhciBFVkVOVF9VUERBVEVEJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJ1cGRhdGVkIjtcbnZhciBFVkVOVF9SRVNJWkUgPSAicmVzaXplIjtcbnZhciBFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfUkVTSVpFRCA9ICJyZXNpemVkIjtcbnZhciBFVkVOVF9EUkFHID0gImRyYWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIjtcbnZhciBFVkVOVF9EUkFHR0lORyA9ICJkcmFnZ2luZyI7XG52YXIgRVZFTlRfRFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQUdHRUQgPSAiZHJhZ2dlZCI7XG52YXIgRVZFTlRfU0NST0xMID0gInNjcm9sbCI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIEVWRU5UX1NDUk9MTEVEID0gInNjcm9sbGVkIjtcbnZhciBFVkVOVF9PVkVSRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMT1cgPSAib3ZlcmZsb3ciO1xudmFyIEVWRU5UX0RFU1RST1kgPSAiZGVzdHJveSI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xudmFyIEVWRU5UX0FSUk9XU19NT1VOVEVEID0gImFycm93czptb3VudGVkIjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgRVZFTlRfQVJST1dTX1VQREFURUQgPSAiYXJyb3dzOnVwZGF0ZWQiO1xudmFyIEUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVkVOVF9QQUdJTkFUSU9OX01PVU5URUQgPSAicGFnaW5hdGlvbjptb3VudGVkIjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgRVZFTlRfUEFHSU5BVElPTl9VUERBVEVEID0gInBhZ2luYXRpb246dXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWQiO1xudmFyIEVWRU5UX05BVklHQVRJT05fTU9VTlRFRCA9ICJuYXZpZ2F0aW9uOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudGVkIjtcbnZhciBFVkVOVF9BVVRPUExBWV9QTEFZID0gImF1dG9wbGF5OnBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5IjtcbnZhciBFVkVOVF9BVVRPUExBWV9QTEFZSU5HID0gImF1dG9wbGF5OnBsYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nIjtcbnZhciBFVkVOVF9BVVRPUExBWV9QQVVTRSA9ICJhdXRvcGxheTpwYXVzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciO1xudmFyIEVWRU5UX0xBWllMT0FEX0xPQURFRCA9ICJsYXp5bG9hZDpsb2FkZWQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbnZhciBFVkVOVF9TTElERV9LRVlET1dOID0gInNrIjtcbnZhciBFVkVOVF9TSElGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RFRCA9ICJzaCI7XG52YXIgRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQgPSAiZWkiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZnVuY3Rpb24gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMikge1xuICB2YXIgYnVzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIgPyBTcGxpZGUyLmV2ZW50LmJ1cyA6IGRvY3VtZW50LmNyZWF0ZURvYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bWVudEZyYWdtZW50KCk7XG4gIHZhciBiaW5kZXIgPSBFdmVudEJpbmRlcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcblxuICBmdW5jdGlvbiBvbihldmVudHMsIGNhbGxiYWNrKSB7XG4gICAgYmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRlci5iaW5kKGJ1cywgdG9BcnJheShldmVudHMpLmpvaW4oIiAiKSwgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIChlKSB7XG4gICAgICBjYWxsYmFjay5hcHBseShjYWxsYmFjaywgaXNBcnJheSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZS5kZXRhaWwpID8gZS5kZXRhaWwgOiBbXSk7XG4gICAgfSk7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gZW1pdChldmVudCkge1xuICAgIGJpbmRlci5kaXNwYXRjaChidXMsIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudCwgc2xpY2UoYXJndW1lbnRzLCAxKSk7XG4gIH1cblxuICBpZiAoU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIpIHtcbiAgICBTcGxpZGUyLmV2ZW50Lm9uKEVWRU5UX0RFU1RST1ksIGJpbmRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZGVzdHJveSk7XG4gIH1cblxuICByZXR1cm4gYXNzaWduKGJpbmRlciwge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBidXM6IGJ1cyxcbiAgICBvbjogb24sXG4gICAgb2ZmOiBhcHBseShiaW5kZXIudW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmluZCwgYnVzKSxcbiAgICBlbWl0OiBlbWl0XG4gIH0pO1xufVxuXG5mdW5jdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgUmVxdWVzdEludGVydmFsKGludGVydmFsLCBvbkludGVydmFsLCBvblVwZGF0ZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGxpbWl0KSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdztcbiAgdmFyIHN0YXJ0VGltZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIHZhciByYXRlID0gMDtcbiAgdmFyIGlkO1xuICB2YXIgcGF1c2VkID0gdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XG4gIHZhciBjb3VudCA9IDA7XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoIXBhdXNlZCkge1xuICAgICAgcmF0ZSA9IGludGVydmFsID8gbWluKCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbm93KCkgLSBzdGFydFRpbWUpIC8gaW50ZXJ2YWwsIDEpIDogMTtcbiAgICAgIG9uVScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZGF0ZSAmJiBvblVwZGF0ZShyYXRlKTtcblxuICAgICAgaWYgKHJhdGUgPj0gMSkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgb25JbnRlcnZhbCgpO1xuICAgICAgICBzdGFydFRpbWUgPSBub3coKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbiAgICAgICAgaWYgKGxpbWl0ICYmICsrY291bnQgPj0gbGltaXQpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgICAgcmV0dXJuIHBhdXNlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGlkID0gcmFmKHVwZGF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHN0YXJ0KHJlc3VtZSkge1xuICAgIHJlc3VtZSB8fCBjYW5jZWwoKTtcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnRUaW1lID0gbm93KCkgLSAocmVzdW1lID8gcmF0ZSAqIGludGVydmFsIDogMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIHBhdXNlZCA9IGZhbHNlO1xuICAgIGlkID0gcmFmKHVwZGF0ZSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG5cbiAgZnVuY3Rpb24gcGF1c2UoKSB7XG4gICAgcGF1c2VkID0gdHJ1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cblxuICBmdW5jdGlvbiByZXdpbmQoKSB7XG4gICAgc3RhcnRUaW1lID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG5vdygpO1xuICAgIHJhdGUgPSAwO1xuXG4gICAgaWYgKG9uVXBkYXRlKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb25VcGRhdGUocmF0ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbmNlbCgpIHtcbiAgICBpZCAmJiBjYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJhdGUgPSAwO1xuICAgIGlkID0gMDtcbiAgICBwYXVzZWQgPSB0cnVlO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIGZ1bmN0aW9uIHNldCh0aW1lKSB7XG4gICAgaW50ZXJ2YWwgPSB0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzUGF1c2VkKCkge1xuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGF1c2VkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGFydDogc3RhcnQsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHJld2luZDogcmV3aW5kLFxuICAgIHBhdXNlOiBwYXVzZSxcbiAgICBjYW5jZWw6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYW5jZWwsXG4gICAgc2V0OiBzZXQsXG4gICAgaXNQYXVzZWQ6IGlzUGF1c2VkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xufVxuXG5mdW5jdGlvbiBTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBzdGF0ZSA9IGluaXRpYWxTdGF0ZTtcblxuICBmdW5jdGlvbiBzZXQodmFsdWUpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgc3RhdGUgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzKHN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpIHtcbiAgICByZXR1cm4gaW5jbHVkZXModG9BcnJheShzdGF0ZXMpLCBzdGF0ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXQ6IHNldCxcbiAgICBpczogaXNcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG59XG5cbmZ1bmN0aW9uIFRocm90dGxlKGZ1bmMsIGR1cmF0aW9uKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoZHVyYXRpb24gfHwgMCwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmMsIG51bGwsIDEpO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGludGVydicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbC5pc1BhdXNlZCgpICYmIGludGVydmFsLnN0YXJ0KCk7XG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBNZWRpYShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIHN0YXRlID0gU3BsaWRlMi5zdGF0ZTtcbiAgdmFyIGJyZWFrcG9pbnRzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMuYnJlYWtwb2ludHMgfHwge307XG4gIHZhciByZWR1Y2VkTW90aW9uID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMucmVkdWNlZE1vdGlvbiB8fCB7fTtcbiAgdmFyIGJpbmRlciA9IEV2ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudEJpbmRlcigpO1xuICB2YXIgcXVlcmllcyA9IFtdO1xuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXR1cCgpIHtcbiAgICB2YXIgaXNNaW4gPSBvcHRpb25zLm1lZGlhUXVlcnkgPT09JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAibWluIjtcbiAgICBvd25LZXlzKGJyZWFrcG9pbnRzKS5zb3J0KGZ1bmN0aW9uICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgbSkge1xuICAgICAgcmV0dXJuIGlzTWluID8gK24gLSArbSA6ICttIC0gK247XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmVnaXN0ZXIoYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZWFrcG9pbnRzW2tleV0sICIoIiArIChpc01pbiA/ICJtaW4iIDogIm1heCIpICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICItd2lkdGg6IiArIGtleSArICJweCkiKTtcbiAgICB9KTtcbiAgICByZWdpc3RlcignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVkdWNlZE1vdGlvbiwgTUVESUFfUFJFRkVSU19SRURVQ0VEX01PVElPTik7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHVwZGF0ZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHJveShjb21wbGV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidseSkge1xuICAgIGlmIChjb21wbGV0ZWx5KSB7XG4gICAgICBiaW5kZXIuZGVzdHJveScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWdpc3RlcihvcHRpb25zMiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHF1ZXJ5KSB7XG4gICAgdmFyIHF1ZXJ5TGlzdCA9IG1hdGNoTWVkaWEocXVlcnkpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBiaW5kZXIuYmluZChxdWVyeUxpc3QsICJjaGFuZ2UiLCB1cGRhdGUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBxdWVyaWVzLnB1c2goW29wdGlvbnMyLCBxdWVyeUxpc3RdKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgdmFyIGRlc3Ryb3llZCA9IHN0YXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pcyhERVNUUk9ZRUQpO1xuICAgIHZhciBkaXJlY3Rpb24gPSBvcHRpb25zLmRpcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb247XG4gICAgdmFyIG1lcmdlZCA9IHF1ZXJpZXMucmVkdWNlKGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobWVyZ2VkMiwgZW50cnkpIHtcbiAgICAgIHJldHVybiBtZXJnZShtZXJnZWQyLCBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cnlbMV0ubWF0Y2hlcyA/IGVudHJ5WzBdIDoge30pO1xuICAgIH0sIHt9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgb21pdChvcHRpb25zKTtcbiAgICBzZXQobWVyZ2VkKTtcblxuICAgIGlmIChvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucy5kZXN0cm95KSB7XG4gICAgICBTcGxpZGUyLmRlc3Ryb3kob3B0aW9ucy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdHJveSA9PT0gImNvbXBsZXRlbHkiKTtcbiAgICB9IGVsc2UgaWYgKGRlc3RybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5ZWQpIHtcbiAgICAgIGRlc3Ryb3kodHJ1ZSk7XG4gICAgICBTcGxpZGUyLm1vdW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3Rpb24gIT09IG9wdGlvbnMuZGlyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiAmJiBTcGxpZGUyLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gcmVkdWNlKGVuYWJsZSkge1xuICAgIGlmIChtYXRjaE1lZGlhKE1FRElBXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQUkVGRVJTX1JFRFVDRURfTU9USU9OKS5tYXRjaGVzKSB7XG4gICAgICBlbmFibGUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gbWVyZ2Uob3B0aW9ucywgcmVkdWNlZE1vdGlvbikgOiBvbWl0KG9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvd25LZXlzKHJlZHVjZWRNb3Rpb24pKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gc2V0KG9wdHMsIGJhc2UsIG5vdGlmeSkge1xuICAgIG1lcmdlKG9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcHRzKTtcbiAgICBiYXNlICYmIG1lcmdlKE9iamVjdC5nZXRQcm90b3R5cGVPZihvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3B0aW9ucyksIG9wdHMpO1xuXG4gICAgaWYgKG5vdGlmeSB8fCAhc3RhdGUuaXMoQ1JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FURUQpKSB7XG4gICAgICBTcGxpZGUyLmVtaXQoRVZFTlRfVVBEQVRFRCwgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2V0dXA6IHNldHVwLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHJlZHVjZTogcmVkdWNlLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBzZXQ6IHNldFxuICB9O1xufVxuXG52YXIgQVJST1cgPSAiQXJyb3ciO1xudmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBBUlJPV19MRUZUID0gQVJST1cgKyAiTGVmdCI7XG52YXIgQVJST1dfUklHSFQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVJST1cgKyAiUmlnaHQiO1xudmFyIEFSUk9XX1VQID0gQVJST1cgKyAiVXAiO1xudmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBBUlJPV19ET1dOID0gQVJST1cgKyAiRG93biI7XG52YXIgTFRSID0gImx0ciI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIFJUTCA9ICJydGwiO1xudmFyIFRUQiA9ICJ0dGIiO1xudmFyIE9SSUVOVEFUSU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTl9NQVAgPSB7XG4gIHdpZHRoOiBbImhlaWdodCJdLFxuICBsZWZ0OiBbInRvcCIsICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmlnaHQiXSxcbiAgcmlnaHQ6IFsiYm90dG9tIiwgImxlZnQiXSxcbiAgeDogWyJ5Il0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICBYOiBbIlkiXSxcbiAgWTogWyJYIl0sXG4gIEFycm93TGVmdDogW0FSUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV19VUCwgQVJST1dfUklHSFRdLFxuICBBcnJvd1JpZ2h0OiBbQVJST1dfRE9XTiwgQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSUk9XX0xFRlRdXG59O1xuXG5mdW5jdGlvbiBEaXJlY3Rpb24oU3BsaWRlMiwgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIGZ1bmN0aW9uIHJlc29sdmUocHJvcCwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F4aXNPbmx5LCBkaXJlY3Rpb24pIHtcbiAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8IG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIHZhciBpbmRleCA9IGRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPT09IFJUTCAmJiAhYXhpc09ubHkgPyAxIDogZGlyZWN0aW9uID09PSBUVEIgPyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMCA6IC0xO1xuICAgIHJldHVybiBPUklFTlRBVElPTl9NQVBbcHJvcF0gJiYgT1JJRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVEFUSU9OX01BUFtwcm9wXVtpbmRleF0gfHwgcHJvcC5yZXBsYWNlKC93aWR0aHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVmdHxyaWdodC9pLCBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCkge1xuICAgICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciByZXBsYWNlbWVudCA9IE9SSUVOVEFUSU9OX01BUFttYXRjaC50b0xvd2VyQ2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2UoKV1baW5kZXhdIHx8IG1hdGNoO1xuICAgICAgcmV0dXJuIG9mZnNldCA+IDAgPycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcmVwbGFjZW1lbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXBsYWNlbWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQuc2xpY2UoMSkgOiByZXBsYWNlbWVudDtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBvcmllbnQodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgKiAob3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uID09PSBSVEwgPyAxIDogLTEpO1xuICB9XG5cbiAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB7XG4gICAgcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICBvcmllbnQ6IG9yaWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgfTtcbn1cblxudmFyIFJPTEUgPSAicm9sZSI7XG52YXIgVEFCX0lOREVYID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJ0YWJpbmRleCI7XG52YXIgRElTQUJMRUQgPSAiZGlzYWJsZWQiO1xudmFyIEFSSUFfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1BSRUZJWCA9ICJhcmlhLSI7XG52YXIgQVJJQV9DT05UUk9MUyA9IEFSSUFfUFJFRkknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWCArICJjb250cm9scyI7XG52YXIgQVJJQV9DVVJSRU5UID0gQVJJQV9QUkVGSVggKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgImN1cnJlbnQiO1xudmFyIEFSSUFfU0VMRUNURUQgPSBBUklBX1BSRUZJWCArICJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VsZWN0ZWQiO1xudmFyIEFSSUFfTEFCRUwgPSBBUklBX1BSRUZJWCArICJsYWJlbCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEFSSUFfTEFCRUxMRURCWSA9IEFSSUFfUFJFRklYICsgImxhYmVsbGVkYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5IjtcbnZhciBBUklBX0hJRERFTiA9IEFSSUFfUFJFRklYICsgImhpZGRlbiI7XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIEFSSUFfT1JJRU5UQVRJT04gPSBBUklBX1BSRUZJWCArICJvcmllbnRhdGlvbiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xudmFyIEFSSUFfUk9MRURFU0NSSVBUSU9OID0gQVJJQV9QUkVGSVggKyAicm9sZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXNjcmlwdGlvbiI7XG52YXIgQVJJQV9MSVZFID0gQVJJQV9QUkVGSVggKyAibGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UiO1xudmFyIEFSSUFfQlVTWSA9IEFSSUFfUFJFRklYICsgImJ1c3kiO1xudmFyIEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX0FUT01JQyA9IEFSSUFfUFJFRklYICsgImF0b21pYyI7XG52YXIgQUxMX0FUVFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSUJVVEVTID0gW1JPTEUsIFRBQl9JTkRFWCwgRElTQUJMRUQsIEFSSUFfQ09OVFJPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xTLCBBUklBX0NVUlJFTlQsIEFSSUFfTEFCRUwsIEFSSUFfTEFCRUxMRURCWSwgQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSSUFfSElEREVOLCBBUklBX09SSUVOVEFUSU9OLCBBUklBX1JPTEVERVNDUklQVEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT05dO1xudmFyIENMQVNTX1BSRUZJWCA9IFBST0pFQ1RfQ09ERSArICJfXyI7XG52YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFNUQVRVU19DTEFTU19QUkVGSVggPSAiaXMtIjtcbnZhciBDTEFTU19ST09UID0gUCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidST0pFQ1RfQ09ERTtcbnZhciBDTEFTU19UUkFDSyA9IENMQVNTX1BSRUZJWCArICJ0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhY2siO1xudmFyIENMQVNTX0xJU1QgPSBDTEFTU19QUkVGSVggKyAibGlzdCI7XG52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIENMQVNTX1NMSURFID0gQ0xBU1NfUFJFRklYICsgInNsaWRlIjtcbnZhciBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfQ0xPTkUgPSBDTEFTU19TTElERSArICItLWNsb25lIjtcbnZhciBDTEFTU19DTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVEFJTkVSID0gQ0xBU1NfU0xJREUgKyAiX19jb250YWluZXIiO1xudmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPV1MgPSBDTEFTU19QUkVGSVggKyAiYXJyb3dzIjtcbnZhciBDTEFTU19BUlInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT1cgPSBDTEFTU19QUkVGSVggKyAiYXJyb3ciO1xudmFyIENMQVNTX0FSUk9XX1BSRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidWID0gQ0xBU1NfQVJST1cgKyAiLS1wcmV2IjtcbnZhciBDTEFTU19BUlJPV19ORVhUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IENMQVNTX0FSUk9XICsgIi0tbmV4dCI7XG52YXIgQ0xBU1NfUEFHSU5BVElPTiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBDTEFTU19QUkVGSVggKyAicGFnaW5hdGlvbiI7XG52YXIgQ0xBU1NfUEFHSU5BVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJT05fUEFHRSA9IENMQVNTX1BBR0lOQVRJT04gKyAiX19wYWdlIjtcbnZhciBDTEFTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NfUFJPR1JFU1MgPSBDTEFTU19QUkVGSVggKyAicHJvZ3Jlc3MiO1xudmFyIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19QUk9HUkVTU19CQVIgPSBDTEFTU19QUk9HUkVTUyArICJfX2JhciI7XG52YXIgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1RPR0dMRSA9IENMQVNTX1BSRUZJWCArICJ0b2dnbGUiO1xudmFyIENMQVNTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19UT0dHTEVfUExBWSA9IENMQVNTX1RPR0dMRSArICJfX3BsYXkiO1xudmFyIENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19UT0dHTEVfUEFVU0UgPSBDTEFTU19UT0dHTEUgKyAiX19wYXVzZSI7XG52YXIgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1NQSU5ORVIgPSBDTEFTU19QUkVGSVggKyAic3Bpbm5lciI7XG52YXIgQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX1NSID0gQ0xBU1NfUFJFRklYICsgInNyIjtcbnZhciBDTEFTU19JTklUSUFMSVonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUQgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgImluaXRpYWxpemVkIjtcbnZhciBDTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBU1NfQUNUSVZFID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJhY3RpdmUiO1xudmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19QUkVWID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJwcmV2IjtcbnZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfTkVYVCA9IFNUQVRVU19DTEFTU19QUkVGSVggKyAibmV4dCI7XG52YXIgQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMQVNTX1ZJU0lCTEUgPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgInZpc2libGUiO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhciBDTEFTU19MT0FESU5HID0gU1RBVFVTX0NMQVNTX1BSRUZJWCArICJsb2FkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZyI7XG52YXIgQ0xBU1NfRk9DVVNfSU4gPSBTVEFUVVNfQ0xBU1NfUFJFRklYICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyJmb2N1cy1pbiI7XG52YXIgQ0xBU1NfT1ZFUkZMT1cgPSBTVEFUVVNfQ0xBU1NfUFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRUZJWCArICJvdmVyZmxvdyI7XG52YXIgU1RBVFVTX0NMQVNTRVMgPSBbQ0xBU1NfQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDVElWRSwgQ0xBU1NfVklTSUJMRSwgQ0xBU1NfUFJFViwgQ0xBU1NfTkVYVCwgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX0xPQURJTkcsIENMQVNTX0ZPQ1VTX0lOLCBDTEFTU19PVkVSRkxPV107XG52YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIENMQVNTRVMgPSB7XG4gIHNsaWRlOiBDTEFTU19TTElERSxcbiAgY2xvbmU6IENMQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTU19DTE9ORSxcbiAgYXJyb3dzOiBDTEFTU19BUlJPV1MsXG4gIGFycm93OiBDTEFTUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQVJST1csXG4gIHByZXY6IENMQVNTX0FSUk9XX1BSRVYsXG4gIG5leHQ6IENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUlJPV19ORVhULFxuICBwYWdpbmF0aW9uOiBDTEFTU19QQUdJTkFUSU9OLFxuICBwYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZTogQ0xBU1NfUEFHSU5BVElPTl9QQUdFLFxuICBzcGlubmVyOiBDTEFTU19TUElOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05FUlxufTtcblxuZnVuY3Rpb24gY2xvc2VzdChmcm9tLCBzZWxlY3Rvcikge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKGlzRnVuY3Rpb24oZnJvbS5jbG9zZXN0KSkge1xuICAgIHJldHVybiBmcm9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgfVxuXG4gIHZhciBlbG0gPSBmcm9tO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB3aGlsZSAoZWxtICYmIGVsbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgIGlmIChtYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0Y2hlcyhlbG0sIHNlbGVjdG9yKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVsbSA9IGVsbS5wYXJlbnRFbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG07XG59XG5cbnZhciBGUklDVElPTiA9IDU7XG52YXIgTE9HX0lOVEVSVkFMID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIwMDtcbnZhciBQT0lOVEVSX0RPV05fRVZFTlRTID0gInRvdWNoc3RhcnQgbW91c2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZG93biI7XG52YXIgUE9JTlRFUl9NT1ZFX0VWRU5UUyA9ICJ0b3VjaG1vdmUgbW91cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbW92ZSI7XG52YXIgUE9JTlRFUl9VUF9FVkVOVFMgPSAidG91Y2hlbmQgdG91Y2hjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FuY2VsIG1vdXNldXAgY2xpY2siO1xuXG5mdW5jdGlvbiBFbGVtZW50cyhTcGxpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVudEludGVyZmFjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZS5vbixcbiAgICAgIGJpbmQgPSBfRXZlbnRJbnRlcmZhY2UuYmluZDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIHJvb3QgPSBTcGxpZGUyLnJvb3Q7XG4gIHZhciBpMThuID0gb3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMuaTE4bjtcbiAgdmFyIGVsZW1lbnRzID0ge307XG4gIHZhciBzbGlkZXMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInW107XG4gIHZhciByb290Q2xhc3NlcyA9IFtdO1xuICB2YXIgdHJhY2tDbGFzc2VzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFtdO1xuICB2YXIgdHJhY2s7XG4gIHZhciBsaXN0O1xuICB2YXIgaXNVc2luZ0snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXk7XG5cbiAgZnVuY3Rpb24gc2V0dXAoKSB7XG4gICAgY29sbGVjdCgpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpbml0KCk7XG4gICAgdXBkYXRlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgZGVzdHJveSk7XG4gICAgb24oRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUX1JFRlJFU0gsIHNldHVwKTtcbiAgICBvbihFVkVOVF9VUERBVEVELCB1cGRhdGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBiaW5kKGRvY3VtZW50LCBQT0lOVEVSX0RPV05fRVZFTlRTICsgIiBrZXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZG93biIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBpc1VzaW5nS2V5ID0gZS50eXBlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9PT0gImtleWRvd24iO1xuICAgIH0sIHtcbiAgICAgIGNhcHR1cmU6IHRydWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfSk7XG4gICAgYmluZChyb290LCAiZm9jdXNpbiIsIGZ1bmN0aW9uICgpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB0b2dnbGVDbGFzcyhyb290LCBDTEFTU19GT0NVU19JTiwgISFpc1VzaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ0tleSk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KGNvbXBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0ZWx5KSB7XG4gICAgdmFyIGF0dHJzID0gQUxMX0FUVFJJQlVURVMuY29uY2F0KCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGUiKTtcbiAgICBlbXB0eShzbGlkZXMpO1xuICAgIHJlbW92ZUNsYXNzKHJvb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCByb290Q2xhc3Nlcyk7XG4gICAgcmVtb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXMpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZShbdHJhY2ssIGxpc3RdLCBhdHRycyk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJlbW92ZUF0dHJpYnV0ZShyb290LCBjb21wbGV0ZWx5ID8gYXR0cnMgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInWyJzdHlsZSIsIEFSSUFfUk9MRURFU0NSSVBUSU9OXSk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gdXBkYXRlKCkge1xuICAgIHJlbW92ZUNsYXNzKHJvb3QsIHJvb3RDbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyk7XG4gICAgcmVtb3ZlQ2xhc3ModHJhY2ssIHRyYWNrQ2xhc3Nlcyk7XG4gICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvb3RDbGFzc2VzID0gZ2V0Q2xhc3NlcyhDTEFTU19ST09UKTtcbiAgICB0cmFja0NsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzID0gZ2V0Q2xhc3NlcyhDTEFTU19UUkFDSyk7XG4gICAgYWRkQ2xhc3Mocm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3QsIHJvb3RDbGFzc2VzKTtcbiAgICBhZGRDbGFzcyh0cmFjaywgdHJhY2tDbGFzcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyk7XG4gICAgc2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUwsIG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhYmVsKTtcbiAgICBzZXRBdHRyaWJ1dGUocm9vdCwgQVJJQV9MQUJFTExFREJZLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy5sYWJlbGxlZGJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbGxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIHRyYWNrID0gZmluZCgiLiIgKyBDTEFTU19UUkFDSyk7XG4gICAgbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3QgPSBjaGlsZCh0cmFjaywgIi4iICsgQ0xBU1NfTElTVCk7XG4gICAgYXNzZXJ0KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cmFjayAmJiBsaXN0LCAiQSB0cmFjay9saXN0IGVsZW1lbnQgaXMgbWlzc2luZy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIik7XG4gICAgcHVzaChzbGlkZXMsIGNoaWxkcmVuKGxpc3QsICIuIiArIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTTElERSArICI6bm90KC4iICsgQ0xBU1NfQ0xPTkUgKyAiKSIpKTtcbiAgICBmb3JPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3duKHtcbiAgICAgIGFycm93czogQ0xBU1NfQVJST1dTLFxuICAgICAgcGFnaW5hdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ246IENMQVNTX1BBR0lOQVRJT04sXG4gICAgICBwcmV2OiBDTEFTU19BUlJPV19QUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVixcbiAgICAgIG5leHQ6IENMQVNTX0FSUk9XX05FWFQsXG4gICAgICBiYXI6IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19QUk9HUkVTU19CQVIsXG4gICAgICB0b2dnbGU6IENMQVNTX1RPR0dMRVxuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBmdW5jdGlvbiAoY2xhc3NOYW1lLCBrZXkpIHtcbiAgICAgIGVsZW1lbnRzW2tleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiddID0gZmluZCgiLiIgKyBjbGFzc05hbWUpO1xuICAgIH0pO1xuICAgIGFzc2lnbihlbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbWVudHMsIHtcbiAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICB0cmFjazogdHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrLFxuICAgICAgbGlzdDogbGlzdCxcbiAgICAgIHNsaWRlczogc2xpZGVzXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgaWQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcm9vdC5pZCB8fCB1bmlxdWVJZChQUk9KRUNUX0NPREUpO1xuICAgIHZhciByb2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG9wdGlvbnMucm9sZTtcbiAgICByb290LmlkID0gaWQ7XG4gICAgdHJhY2suaWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdHJhY2suaWQgfHwgaWQgKyAiLXRyYWNrIjtcbiAgICBsaXN0LmlkID0gbGlzdC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWQgfHwgaWQgKyAiLWxpc3QiO1xuXG4gICAgaWYgKCFnZXRBdHRyaWJ1dGUocm9vdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIFJPTEUpICYmIHJvb3QudGFnTmFtZSAhPT0gIlNFQ1RJT04iICYmIHJvbGUpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBzZXRBdHRyaWJ1dGUocm9vdCwgUk9MRSwgcm9sZSk7XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHNldEF0dHJpYnV0ZShyb290LCBBUklBX1JPTEVERVNDUklQVElPTiwgaTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOG4uY2Fyb3VzZWwpO1xuICAgIHNldEF0dHJpYnV0ZShsaXN0LCBST0xFLCAicHJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRhdGlvbiIpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZChzZWxlY3RvcikgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZWxtID0gcXVlcnkocm9vdCwgc2VsZWN0b3IpO1xuICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxtICYmIGNsb3Nlc3QoZWxtLCAiLiIgKyBDTEFTU19ST09UKSA9PT0gcm9vdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBlbG0gOiB2b2lkIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRDbGFzc2VzKGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXNlKSB7XG4gICAgcmV0dXJuIFtiYXNlICsgIi0tIiArIG9wdGlvbnMudHlwZSwgYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc2UgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuZHJhZyAmJiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmFzZSArICItLWRyYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmIGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NlICsgIi0tbmF2IiwgYmFzZSA9PT0gQ0xBU1NfUk9PVCAmJiBDTEFTU19BQ1RJVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFXTtcbiAgfVxuXG4gIHJldHVybiBhc3NpZ24oZWxlbWVudHMsIHtcbiAgICBzZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXA6IHNldHVwLFxuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneVxuICB9KTtcbn1cblxudmFyIFNMSURFID0gInNsaWRlIjtcbnZhciBMT09QID0gIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb29wIjtcbnZhciBGQURFID0gImZhZGUiO1xuXG5mdW5jdGlvbiBTbGlkZSQxKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTcGxpZGUyLCBpbmRleCwgc2xpZGVJbmRleCwgc2xpZGUpIHtcbiAgdmFyIGV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpO1xuICB2YXIgb24gPSBldmVudC5vbiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBlbWl0ID0gZXZlbnQuZW1pdCxcbiAgICAgIGJpbmQgPSBldmVudC5iaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZDtcbiAgdmFyIENvbXBvbmVudHMgPSBTcGxpZGUyLkNvbXBvbmVudHMsXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCA9IFNwbGlkZTIucm9vdCxcbiAgICAgIG9wdGlvbnMgPSBTcGxpZGUyLm9wdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb25zO1xuICB2YXIgaXNOYXZpZ2F0aW9uID0gb3B0aW9ucy5pc05hdmlnYXRpb24sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgdXBkYXRlT25Nb3ZlID0gb3B0aW9ucy51cGRhdGVPbk1vdmUsXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaTE4biA9IG9wdGlvbnMuaTE4bixcbiAgICAgIHBhZ2luYXRpb24gPSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5wYWdpbmF0aW9uLFxuICAgICAgc2xpZGVGb2N1cyA9IG9wdGlvbnMuc2xpZGVGbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdXM7XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50cy5EaXJlY3Rpb24ucmVzb2x2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gIHZhciBzdHlsZXMgPSBnZXRBdHRyaWJ1dGUoc2xpZGUsICJzdHlsZSIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGxhYmVsID0gZ2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0xBQkVMKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBpc0Nsb25lID0gc2xpZGVJbmRleCA+IC0xO1xuICB2YXIgY29udGFpbmVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGNoaWxkKHNsaWRlLCAiLiIgKyBDTEFTU19DT05UQUlORVIpO1xuICB2YXIgZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Ryb3llZDtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpZiAoIWlzQ2xvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25lKSB7XG4gICAgICBzbGlkZS5pZCA9IHJvb3QuaWQgKyAiLXNsaWRlIiArIHBhZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5kZXggKyAxKTtcbiAgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgcGFnaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYXRpb24gPyAidGFicGFuZWwiIDogImdyb3VwIik7XG4gICAgICBzZXRBdHRyaWJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKHNsaWRlLCBBUklBX1JPTEVERVNDUklQVElPTiwgaTE4bi5zbGlkZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0xBQkVMLCBsYWJlbCB8fCBmb3JtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F0KGkxOG4uc2xpZGVMYWJlbCwgW2luZGV4ICsgMSwgU3BsaWRlMi5sZW5ndGhdKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH1cblxuICAgIGxpc3RlbigpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbigpIHtcbiAgICBiaW5kKHNsaWRlLCAiY2xpY2siLCBhcHBseShlbWl0LCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfQ0xJQ0ssIHNlbGYpKTtcbiAgICBiaW5kKHNsaWRlLCAia2V5ZG93biIsIGFwcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneShlbWl0LCBFVkVOVF9TTElERV9LRVlET1dOLCBzZWxmKSk7XG4gICAgb24oW0VWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1ZFRCwgRVZFTlRfU0hJRlRFRCwgRVZFTlRfU0NST0xMRURdLCB1cGRhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICBvbihFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQsIGluaXROYXZpZ2F0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbik7XG5cbiAgICBpZiAodXBkYXRlT25Nb3ZlKSB7XG4gICAgICBvbihFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfTU9WRSwgb25Nb3ZlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpIHtcbiAgICBkZXN0cm95ZWQgPSB0cnVlO1xuICAgIGV2ZW50LmRlc3Ryb3koKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgcmVtb3ZlQ2xhc3Moc2xpZGUsIFNUQVRVU19DTEFTU0VTKTtcbiAgICByZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ZlQXR0cmlidXRlKHNsaWRlLCBBTExfQVRUUklCVVRFUyk7XG4gICAgc2V0QXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYnV0ZShzbGlkZSwgInN0eWxlIiwgc3R5bGVzKTtcbiAgICBzZXRBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlLCBBUklBX0xBQkVMLCBsYWJlbCB8fCAiIik7XG4gIH1cblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gaW5pdE5hdmlnYXRpb24oKSB7XG4gICAgdmFyIGNvbnRyb2xzID0gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuc3BsaWRlcy5tYXAoZnVuY3Rpb24gKHRhcmdldCkge1xuICAgICAgdmFyIFNsaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZTIgPSB0YXJnZXQuc3BsaWRlLkNvbXBvbmVudHMuU2xpZGVzLmdldEF0KGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCk7XG4gICAgICByZXR1cm4gU2xpZGUyID8gU2xpZGUyLnNsaWRlLmlkIDogIiI7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0pLmpvaW4oIiAiKTtcbiAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQkVMLCBmb3JtYXQoaTE4bi5zbGlkZVgsIChpc0Nsb25lID8gc2xpZGVJbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpbmRleCkgKyAxKSk7XG4gICAgc2V0QXR0cmlidXRlKHNsaWRlLCBBUklBX0NPTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUUk9MUywgY29udHJvbHMpO1xuICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgUk9MRSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlRm9jdXMgPyAiYnV0dG9uIiA6ICIiKTtcbiAgICBzbGlkZUZvY3VzICYmIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1vdmVBdHRyaWJ1dGUoc2xpZGUsIEFSSUFfUk9MRURFU0NSSVBUSU9OKTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiBvbk1vdmUoKSB7XG4gICAgaWYgKCFkZXN0cm95ZWQpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKCkge1xuICAgIGlmICghZGVzdHJveWVkKSB7XG4gICAgICB2YXIgY3VyciA9IFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLmluZGV4O1xuICAgICAgdXBkYXRlQWN0aXZpdHkoKTtcbiAgICAgIHVwZGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VWaXNpYmlsaXR5KCk7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfUFInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVYsIGluZGV4ID09PSBjdXJyIC0gMSk7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX05FWFQsIGluZGV4ID09PSBjdXJyICsgMSk7XG4gICAgfVxuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZUFjdGl2aXR5KCkge1xuICAgIHZhciBhY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlID0gaXNBY3RpdmUoKTtcblxuICAgIGlmIChhY3RpdmUgIT09IGhhc0NsYXNzKHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSwgQ0xBU1NfQUNUSVZFKSkge1xuICAgICAgdG9nZ2xlQ2xhc3Moc2xpZGUsIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFTU19BQ1RJVkUsIGFjdGl2ZSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoc2xpZGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBUklBX0NVUlJFTlQsIGlzTmF2aWdhdGlvbiAmJiBhY3RpdmUgfHwgIiIpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGVtaXQoYWN0aXZlID8gRVZFTlRfQUNUSVZFIDogRVZFTlRfSU5BQ1RJVkUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxmKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVWaXNpYmlsaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneSgpIHtcbiAgICB2YXIgdmlzaWJsZSA9IGlzVmlzaWJsZSgpO1xuICAgIHZhciBoaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVuID0gIXZpc2libGUgJiYgKCFpc0FjdGl2ZSgpIHx8IGlzQ2xvbmUpO1xuXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGlmICghU3BsaWRlMi5zdGF0ZS5pcyhbTU9WSU5HLCBTQ1JPTExJTkddKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHNldEF0dHJpYnV0ZShzbGlkZSwgQVJJQV9ISURERU4sIGhpZGRlbiB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiIpO1xuICAgIH1cblxuICAgIHNldEF0dHJpYnV0ZShxdWVyeUFsbChzbGlkZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuZm9jdXNhYmxlTm9kZXMgfHwgIiIpLCBUQUJfSU5ERVgsIGhpZGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gPyAtMSA6ICIiKTtcblxuICAgIGlmIChzbGlkZUZvY3VzKSB7XG4gICAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXR0cmlidXRlKHNsaWRlLCBUQUJfSU5ERVgsIGhpZGRlbiA/IC0xIDogMCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH1cblxuICAgIGlmICh2aXNpYmxlICE9PSBoYXNDbGFzcyhzbGlkZSwgQ0xBU1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1ZJU0lCTEUpKSB7XG4gICAgICB0b2dnbGVDbGFzcyhzbGlkZSwgQ0xBU1NfVklTSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidCTEUsIHZpc2libGUpO1xuICAgICAgZW1pdCh2aXNpYmxlID8gRVZFTlRfVklTSUJMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0UgOiBFVkVOVF9ISURERU4sIHNlbGYpO1xuICAgIH1cblxuICAgIGlmICghdmlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2libGUgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gc2xpZGUpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgU2xpZGUyID0gQ29tcG9uZW50cy5TbGlkZXMuZ2V0QXQoU3BsaWRlMi5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXgpO1xuICAgICAgU2xpZGUyICYmIGZvY3VzKFNsaWRlMi5zbGlkZSk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0eWxlJDEocHJvcCwgdmFsdWUsIHVzZUNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250YWluZXIpIHtcbiAgICBzdHlsZSh1c2VDb250YWluZXIgJiYgY29udGFpbmVyIHwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCBzbGlkZSwgcHJvcCwgdmFsdWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNBY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXZlKCkge1xuICAgIHZhciBjdXJyID0gU3BsaWRlMi5pbmRleDtcbiAgICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGN1cnIgPT09IGluZGV4IHx8IG9wdGlvbnMuY2xvbmVTdGF0dXMgJiYgY3VyciA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09IHNsaWRlSW5kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBpc1Zpc2libGUoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGlmIChTcGxpZGUyLmlzKEZBREUpKSB7XG4gICAgICByZXR1cm4gaXNBY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlKCk7XG4gICAgfVxuXG4gICAgdmFyIHRyYWNrUmVjdCA9IHJlY3QoQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMuRWxlbWVudHMudHJhY2spO1xuICAgIHZhciBzbGlkZVJlY3QgPSByZWN0KHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZSk7XG4gICAgdmFyIGxlZnQgPSByZXNvbHZlKCJsZWZ0IiwgdHJ1ZSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciByaWdodCA9IHJlc29sdmUoInJpZ2h0IiwgdHJ1ZSk7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmbG9vcih0cmFja1JlY3RbbGVmdF0pIDw9IGNlaWwoc2xpZGVSZWN0W2xlZnRdKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiYgZmxvb3Ioc2xpZGVSZWN0W3JpZ2h0XSkgPD0gY2VpbCh0cmFja1JlY3RbcmlnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0XSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc1dpdGhpbihmcm9tLCBkaXN0YW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIHtcbiAgICB2YXIgZGlmZiA9IGFicyhmcm9tIC0gaW5kZXgpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmICghaXNDbG9uZSAmJiAob3B0aW9ucy5yZXdpbmQgfHwgU3BsaWRlMi5pcyhMTycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidPUCkpKSB7XG4gICAgICBkaWZmID0gbWluKGRpZmYsIFNwbGlkZTIubGVuZ3RoIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RpZmYpO1xuICAgIH1cblxuICAgIHJldHVybiBkaWZmIDw9IGRpc3RhbmNlO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gIHZhciBzZWxmID0ge1xuICAgIGluZGV4OiBpbmRleCxcbiAgICBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVJbmRleDogc2xpZGVJbmRleCxcbiAgICBzbGlkZTogc2xpZGUsXG4gICAgY29udGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5lcjogY29udGFpbmVyLFxuICAgIGlzQ2xvbmU6IGlzQ2xvbmUsXG4gICAgbW91bnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBtb3VudCxcbiAgICBkZXN0cm95OiBkZXN0cm95LFxuICAgIHVwZGF0ZTogdXBkYXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSxcbiAgICBzdHlsZTogc3R5bGUkMSxcbiAgICBpc1dpdGhpbjogaXNXaXRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduXG4gIH07XG4gIHJldHVybiBzZWxmO1xufVxuXG5mdW5jdGlvbiBTbGlkZXMoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNlMiA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgb24gPSBfRXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0SW50ZXJmYWNlMi5vbixcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UyLmVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0LFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTIuYmluZDtcblxuICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIF9Db21wb25lbnRzMiRFbGVtZW50cyA9IENvbXBvbmVudHMyLkVsZW1lbnRzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIHNsaWRlcyA9IF9Db21wb25lbnRzMiRFbGVtZW50cy5zbGlkZXMsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZW50cy5saXN0O1xuICB2YXIgU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlczIgPSBbXTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIG9uKEVWRU5UX1JFRlJFU0gsIGRlc3Ryb3kpO1xuICAgIG9uKEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZSRVNILCBpbml0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlcy5mb3JFYWNoKGZ1bmN0aW9uIChzbGlkZSwgaW5kZXgpIHtcbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dpc3RlcihzbGlkZSwgaW5kZXgsIC0xKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBkZXN0cm95KCkge1xuICAgIGZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgU2xpZGUyLmRlc3Ryb3koKTtcbiAgICB9KTtcbiAgICBlbXB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koU2xpZGVzMik7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGUoKSB7XG4gICAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICBTbGlkZTIudXBkYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVnaXN0ZXIoc2xpZGUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmRleCwgc2xpZGVJbmRleCkge1xuICAgIHZhciBvYmplY3QgPSBTbGlkZSQxKFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLCBpbmRleCwgc2xpZGVJbmRleCwgc2xpZGUpO1xuICAgIG9iamVjdC5tb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQoKTtcbiAgICBTbGlkZXMyLnB1c2gob2JqZWN0KTtcbiAgICBTbGlkZXMyLnNvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGZ1bmN0aW9uIChTbGlkZTEsIFNsaWRlMikge1xuICAgICAgcmV0dXJuIFNsaWRlMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuaW5kZXggLSBTbGlkZTIuaW5kZXg7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24gZ2V0KGV4Y2x1ZGVDbG9uZXMpIHtcbiAgICByZXR1cm4gZXhjbHVkZUNsb25lcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyBmaWx0ZXIoZnVuY3Rpb24gKFNsaWRlMikge1xuICAgICAgcmV0dXJuICFTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLmlzQ2xvbmU7XG4gICAgfSkgOiBTbGlkZXMyO1xuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGdldEluKHBhZ2UpIHtcbiAgICB2YXIgQ29udHJvbGxlciA9IENvbXBvbmVudHMyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5Db250cm9sbGVyO1xuICAgIHZhciBpbmRleCA9IENvbnRyb2xsZXIudG9JbmRleCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnZSk7XG4gICAgdmFyIG1heCA9IENvbnRyb2xsZXIuaGFzRm9jdXMoKSA/IDEgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9ucy5wZXJQYWdlO1xuICAgIHJldHVybiBmaWx0ZXIoZnVuY3Rpb24gKFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKFNsaWRlMi5pbmRleCwgaW5kZXgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBpbmRleCArIG1heCAtIDEpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEF0KGluZGV4KSB7XG4gICAgcmV0dXJuIGZpbHRlcihpbmRleClbMF07XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9XG5cbiAgZnVuY3Rpb24gYWRkKGl0ZW1zLCBpbmRleCkge1xuICAgIGZvckUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNoKGl0ZW1zLCBmdW5jdGlvbiAoc2xpZGUpIHtcbiAgICAgIGlmIChpc1N0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoc2xpZGUpKSB7XG4gICAgICAgIHNsaWRlID0gcGFyc2VIdG1sKHNsaWRlKTtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICB9XG5cbiAgICAgIGlmIChpc0hUTUxFbGVtZW50KHNsaWRlKSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIHJlZiA9IHNsaWRlc1tpbmRleF07XG4gICAgICAgIHJlZiA/IGJlZm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Uoc2xpZGUsIHJlZikgOiBhcHBlbmQobGlzdCwgc2xpZGUpO1xuICAgICAgICBhZGQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ2xhc3Moc2xpZGUsIG9wdGlvbnMuY2xhc3Nlcy5zbGlkZSk7XG4gICAgICAgIG9icycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcnZlSW1hZ2VzKHNsaWRlLCBhcHBseShlbWl0LCBFVkVOVF9SRVNJWkUpKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG4gICAgfSk7XG4gICAgZW1pdChFVkVOVF9SRUZSRVNIKTtcbiAgfVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBmdW5jdGlvbiByZW1vdmUkMShtYXRjaGVyKSB7XG4gICAgcmVtb3ZlKGZpbHRlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicobWF0Y2hlcikubWFwKGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIHJldHVybiBTJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUyLnNsaWRlO1xuICAgIH0pKTtcbiAgICBlbWl0KEVWRU5UX1JFRlJFU0gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvckVhY2gkMShpdGVyYXRlZSwgZXhjbHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVDbG9uZXMpIHtcbiAgICBnZXQoZXhjbHVkZUNsb25lcykuZm9yRWFjaChpdGVyYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsdGVyKG1hdGNoZXIpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIFNsaWRlczIuZmlsdGVyKGlzRnVuY3Rpb24obWF0Y2hlcikgPyBtYXRjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlciA6IGZ1bmN0aW9uIChTbGlkZTIpIHtcbiAgICAgIHJldHVybiBpc1N0cmluZygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF0Y2hlcikgPyBtYXRjaGVzKFNsaWRlMi5zbGlkZSwgbWF0Y2hlcikgOiBpbmNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VkZXModG9BcnJheShtYXRjaGVyKSwgU2xpZGUyLmluZGV4KTtcbiAgICB9KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBzdHlsZShwcm9wLCB2YWx1ZSwgdXNlQ29udGFpbmVyKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZvckVhY2gkMShmdW5jdGlvbiAoU2xpZGUyKSB7XG4gICAgICBTbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0eWxlKHByb3AsIHZhbHVlLCB1c2VDb250YWluZXIpO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIG9ic2VydmVJbWFnZXMoZWxtLCBjYWxsYmFjaykgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgaW1hZ2VzID0gcXVlcnlBbGwoZWxtLCAiaW1nIik7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsZW5ndGggPSBpbWFnZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGltYWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgYmluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QoaW1nLCAibG9hZCBlcnJvciIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCEgLS1sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0TGVuZ3RoKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleGNsdWRlQ2xvbmVzKSB7XG4gICAgcmV0dXJuIGV4Y2x1ZGVDbG9uZXMgPyBzbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmxlbmd0aCA6IFNsaWRlczIubGVuZ3RoO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzRW5vdWdoKCkge1xuICAgIHJldHVybiBTbGlkZXMyLmxlbmd0aCA+IG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnBlclBhZ2U7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVzdHJveTogZGVzdHJveSxcbiAgICB1cGRhdGU6IHVwZGF0ZSxcbiAgICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaXN0ZXI6IHJlZ2lzdGVyLFxuICAgIGdldDogZ2V0LFxuICAgIGdldEluOiBnZXRJbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgZ2V0QXQ6IGdldEF0LFxuICAgIGFkZDogYWRkLFxuICAgIHJlbW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IHJlbW92ZSQxLFxuICAgIGZvckVhY2g6IGZvckVhY2gkMSxcbiAgICBmaWx0ZXI6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmaWx0ZXIsXG4gICAgc3R5bGU6IHN0eWxlLFxuICAgIGdldExlbmd0aDogZ2V0TGVuZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aCxcbiAgICBpc0Vub3VnaDogaXNFbm91Z2hcbiAgfTtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xheW91dChTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudEludGVyZmFjZTMgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiA9IF9FdmVudEludGVyZmFjZTMub24sXG4gICAgICBiaW5kID0gX0V2ZW50SW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZmFjZTMuYmluZCxcbiAgICAgIGVtaXQgPSBfRXZlbnRJbnRlcmZhY2UzLmVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gIHZhciBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG4gIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVzb2x2ZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICB2YXIgXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb21wb25lbnRzMiRFbGVtZW50czIgPSBDb21wb25lbnRzMi5FbGVtZW50cyxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICByb290ID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMi5yb290LFxuICAgICAgdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrID0gX0NvbXBvbmVudHMyJEVsZW1lbnRzMi50cmFjayxcbiAgICAgIGxpc3QgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX0NvbXBvbmVudHMyJEVsZW1lbnRzMi5saXN0O1xuICB2YXIgZ2V0QXQgPSBTbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VzLmdldEF0LFxuICAgICAgc3R5bGVTbGlkZXMgPSBTbGlkZXMuc3R5bGU7XG4gIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgdmVydGljYWw7XG4gIHZhciByb290UmVjdDtcbiAgdmFyIG92ZXJmbG93O1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7XG4gICAgYmluZCh3JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2luZG93LCAicmVzaXplIGxvYWQiLCBUaHJvdHRsZShhcHBseShlbWl0LCBFVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfUkVTSVpFKSkpO1xuICAgIG9uKFtFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10sIGluaXQpO1xuICAgIG9uKEVWRU5UX1JFU0laRSwgcmVzaXplKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBpbml0KCkge1xuICAgIHZlcnRpY2FsID0gb3B0aW9ucy5kaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uID09PSBUVEI7XG4gICAgc3R5bGUocm9vdCwgIm1heFdpZHRoIiwgdW5pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3B0aW9ucy53aWR0aCkpO1xuICAgIHN0eWxlKHRyYWNrLCByZXNvbHZlKCJwYWRkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZ0xlZnQiKSwgY3NzUGFkZGluZyhmYWxzZSkpO1xuICAgIHN0eWxlKHRyYWNrLCByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vzb2x2ZSgicGFkZGluZ1JpZ2h0IiksIGNzc1BhZGRpbmcodHJ1ZSkpO1xuICAgIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNpemUodHJ1ZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNpemUoZm9yY2UpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIG5ld1JlY3QgPSByZWN0KHJvb3QpO1xuXG4gICAgaWYgKGZvcmMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSB8fCByb290UmVjdC53aWR0aCAhPT0gbmV3UmVjdC53aWR0aCB8fCByb290UmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QuaGVpZ2h0ICE9PSBuZXdSZWN0LmhlaWdodCkge1xuICAgICAgc3R5bGUodHJhY2snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAiaGVpZ2h0IiwgY3NzVHJhY2tIZWlnaHQoKSk7XG4gICAgICBzdHlsZVNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicocmVzb2x2ZSgibWFyZ2luUmlnaHQiKSwgdW5pdChvcHRpb25zLmdhcCkpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0eWxlU2xpZGVzKCJ3aWR0aCIsIGNzc1NsaWRlV2lkdGgoKSk7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGVTbGlkZXMoImhlaWdodCIsIGNzc1NsaWRlSGVpZ2h0KCksIHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIHJvb3RSZWN0ID0gbmV3UmVjdDtcbiAgICAgIGVtaXQoRVZFTlRfUkVTSVpFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0QpO1xuXG4gICAgICBpZiAob3ZlcmZsb3cgIT09IChvdmVyZmxvdyA9IGlzT3ZlcmZsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293KCkpKSB7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHJvb3QsIENMQVNTX09WRVJGTE8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVywgb3ZlcmZsb3cpO1xuICAgICAgICBlbWl0KEVWRU5UX09WRVJGTE9XLCBvdmVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsb3cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNzc1BhZGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25nKHJpZ2h0KSB7XG4gICAgdmFyIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmc7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHZhciBwcm9wID0gcmVzb2x2ZShyaWdodCA/ICJyaWdodCIgOiAibGVmdCIpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZXR1cm4gcGFkZGluZyAmJiB1bml0KHBhZGRpbmdbcHJvcF0gfHwgKGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09iamVjdChwYWRkaW5nKSA/IDAgOiBwYWRkaW5nKSkgfHwgIjBweCI7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gY3NzVHJhY2tIZWlnaHQoKSB7XG4gICAgdmFyIGhlaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQgPSAiIjtcblxuICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgaGVpZ2h0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGNzc0hlaWdodCgpO1xuICAgICAgYXNzZXJ0KGhlaWdodCwgImhlaWdodCBvciBoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VpZ2h0UmF0aW8gaXMgbWlzc2luZy4iKTtcbiAgICAgIGhlaWdodCA9ICJjYWxjKCInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICsgaGVpZ2h0ICsgIiAtICIgKyBjc3NQYWRkaW5nKGZhbHNlKSArICIgLSAiICsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc1BhZGRpbmcodHJ1ZSkgKyAiKSI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lnaHQ7XG4gIH1cblxuICBmdW5jdGlvbiBjc3NIZWlnaHQoKSB7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiB1bml0KG9wdGlvbnMuaGVpZ2h0IHx8IHJlY3QobGlzdCkud2lkdGggKiBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5oZWlnaHRSYXRpbyk7XG4gIH1cblxuICBmdW5jdGlvbiBjc3NTbGlkZVcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWR0aCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGggPyBudWxsIDogdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduaXQob3B0aW9ucy5maXhlZFdpZHRoKSB8fCAodmVydGljYWwgPyAiIiA6IGNzc1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZVNpemUoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjc3NTbGlkZUhlaWdodCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgcmV0dXJuIHVuaXQob3B0aW9ucy5maXhlZEhlaWdodCkgfHwgKHZlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aWNhbCA/IG9wdGlvbnMuYXV0b0hlaWdodCA/IG51bGwgOiBjc3NTbGlkZVNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkgOiBjc3NIZWlnaHQoKSk7XG4gIH1cblxuICBmdW5jdGlvbiBjc3NTbGlkZVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXplKCkge1xuICAgIHZhciBnYXAgPSB1bml0KG9wdGlvbnMuZ2FwKTtcbiAgICByZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXJuICJjYWxjKCgxMDAlIiArIChnYXAgJiYgIiArICIgKyBnYXApICsgIikvIiArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAob3B0aW9ucy5wZXJQYWdlIHx8IDEpICsgKGdhcCAmJiAiIC0gIiArIGdhcCkgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIikiO1xuICB9XG5cbiAgZnVuY3Rpb24gbGlzdFNpemUoKSB7XG4gICAgcmV0dXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiByZWN0KGxpc3QpW3Jlc29sdmUoIndpZHRoIildO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIHNsaWRlU2l6ZShpbmRleCwgd2l0aG91dEdhcCkge1xuICAgIHZhciBTbGlkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBnZXRBdChpbmRleCB8fCAwKTtcbiAgICByZXR1cm4gU2xpZGUgPyByZWN0KFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSlbcmVzb2x2ZSgid2lkdGgiKV0gKyAod2l0aG91dEdhcCA/IDAgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZ2V0R2FwKCkpIDogMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvdGFsU2l6ZShpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXgsIHdpdGhvdXRHYXApIHtcbiAgICB2YXIgU2xpZGUgPSBnZXRBdChpbmRleCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgaWYgKFNsaWRlKSB7XG4gICAgICB2YXIgcmlnaHQgPSByZWN0KFNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZS5zbGlkZSlbcmVzb2x2ZSgicmlnaHQiKV07XG4gICAgICB2YXIgbGVmdCA9IHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0KGxpc3QpW3Jlc29sdmUoImxlZnQiKV07XG4gICAgICByZXR1cm4gYWJzKHJpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodCAtIGxlZnQpICsgKHdpdGhvdXRHYXAgPyAwIDogZ2V0R2FwKCkpO1xuICAgIH1cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNsaWRlclNpemUod2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGhvdXRHYXApIHtcbiAgICByZXR1cm4gdG90YWxTaXplKFNwbGlkZTIubGVuZ3RoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYictIDEpIC0gdG90YWxTaXplKDApICsgc2xpZGVTaXplKDAsIHdpdGhvdXRHYXApO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIGdldEdhcCgpIHtcbiAgICB2YXIgU2xpZGUgPSBnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXQoMCk7XG4gICAgcmV0dXJuIFNsaWRlICYmIHBhcnNlRmxvYXQoc3R5bGUoU2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlLnNsaWRlLCByZXNvbHZlKCJtYXJnaW5SaWdodCIpKSkgfHwgMDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBnZXRQYWRkaW5nKHJpZ2h0KSB7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJzZUZsb2F0KHN0eWxlKHRyYWNrLCByZXNvbHZlKCJwYWRkaW5nIiArIChyaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQgPyAiUmlnaHQiIDogIkxlZnQiKSkpKSB8fCAwO1xuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGlzT3ZlcmZsb3coKSB7XG4gICAgcmV0dXJuIFNwbGlkZTIuaXMoRkFERSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3x8IHNsaWRlclNpemUodHJ1ZSkgPiBsaXN0U2l6ZSgpO1xuICB9XG5cbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICAgIHJlc2l6ZTogcmVzaXplLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBsaXN0U2l6ZTogbGlzdFNpemUsXG4gICAgc2xpZGVTaXplOiBzbGlkZVNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLFxuICAgIHNsaWRlclNpemU6IHNsaWRlclNpemUsXG4gICAgdG90YWxTaXplOiB0b3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWxTaXplLFxuICAgIGdldFBhZGRpbmc6IGdldFBhZGRpbmcsXG4gICAgaXNPdmVyZmwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3c6IGlzT3ZlcmZsb3dcbiAgfTtcbn1cblxudmFyIE1VTFRJUExJRVIgPSAyO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gQ2xvbmVzKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAgdmFyIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGV2ZW50Lm9uO1xuICB2YXIgRWxlbWVudHMgPSBDb21wb25lbnRzMi5FbGVtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMsXG4gICAgICBTbGlkZXMgPSBDb21wb25lbnRzMi5TbGlkZXM7XG4gIHZhciByZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2x2ZSA9IENvbXBvbmVudHMyLkRpcmVjdGlvbi5yZXNvbHZlO1xuICB2YXIgY2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcyA9IFtdO1xuICB2YXIgY2xvbmVDb3VudDtcblxuICBmdW5jdGlvbiBtb3VudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKSB7XG4gICAgb24oRVZFTlRfUkVGUkVTSCwgcmVtb3VudCk7XG4gICAgb24oW0VWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9VUERBVEVELCBFVkVOVF9SRVNJWkVdLCBvYnNlcnZlKTtcblxuICAgIGlmIChjbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmVDb3VudCA9IGNvbXB1dGVDbG9uZUNvdW50KCkpIHtcbiAgICAgIGdlbmVyYXRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhjbG9uZUNvdW50KTtcbiAgICAgIENvbXBvbmVudHMyLkxheW91dC5yZXNpemUodHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW91bnQoKSB7XG4gICAgZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc3Ryb3koKTtcbiAgICBtb3VudCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3koKSB7XG4gICAgcmVtb3ZlKGNsb25lcyk7XG4gICAgZW1wdHkoY2xvbmVzKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgZXZlbnQuZGVzdHJveSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gb2JzZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmUoKSB7XG4gICAgdmFyIGNvdW50ID0gY29tcHV0ZUNsb25lQ291bnQoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpZiAoY2xvbmVDb3VudCAhPT0gY291bnQpIHtcbiAgICAgIGlmIChjbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb3VudCA8IGNvdW50IHx8ICFjb3VudCkge1xuICAgICAgICBldmVudC5lbWl0KEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9SRUZSRVNIKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2VuZXJhdGUoY291bnQpIHtcbiAgICB2YXIgc2xpZGVzID0gU2xpZGVzLmdldCgpLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGljZSgpO1xuICAgIHZhciBsZW5ndGggPSBzbGlkZXMubGVuZ3RoO1xuXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChsZW5ndGgpIHtcbiAgICAgIHdoaWxlIChzbGlkZXMubGVuZ3RoIDwgY291JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KSB7XG4gICAgICAgIHB1c2goc2xpZGVzLCBzbGlkZXMpO1xuICAgICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgcHVzaChzbGlkZXMuc2xpY2UoLWNvdW50KSwgc2xpZGVzLnNsaWNlKDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBjb3VudCkpLmZvckVhY2goZnVuY3Rpb24gKFNsaWRlLCBpbmRleCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGlzSGVhZCA9IGluZGV4IDwgY291bnQ7XG4gICAgICAgIHZhciBjbG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSBjbG9uZURlZXAoU2xpZGUuc2xpZGUsIGluZGV4KTtcbiAgICAgICAgaXNIZWEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZCA/IGJlZm9yZShjbG9uZSwgc2xpZGVzWzBdLnNsaWRlKSA6IGFwcGVuZChFbGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMubGlzdCwgY2xvbmUpO1xuICAgICAgICBwdXNoKGNsb25lcywgY2xvbmUpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgU2xpZGVzLnJlZ2lzdGVyKGNsb25lLCBpbmRleCAtIGNvdW50ICsgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0hlYWQgPyAwIDogbGVuZ3RoKSwgU2xpZGUuaW5kZXgpO1xuICAgICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsb25lRGVlcChlbG0sIGluZGV4KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBjbG9uZSA9IGVsbS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgYWRkQ2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKGNsb25lLCBvcHRpb25zLmNsYXNzZXMuY2xvbmUpO1xuICAgIGNsb25lLmlkID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIucm9vdC5pZCArICItY2xvbmUiICsgcGFkKGluZGV4ICsgMSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbXB1dGVDbG9uZUMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudCgpIHtcbiAgICB2YXIgY2xvbmVzMiA9IG9wdGlvbnMuY2xvbmVzO1xuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmICghU3BsaWRlMi5pcyhMT09QKSkge1xuICAgICAgY2xvbmVzMiA9IDA7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0gZWxzZSBpZiAoaXNVbmRlZmluZWQoY2xvbmVzMikpIHtcbiAgICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZml4ZWRTaXplID0gb3B0aW9uc1tyZXNvbHZlKCJmaXhlZFdpZHRoIildICYmIEMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wb25lbnRzMi5MYXlvdXQuc2xpZGVTaXplKDApO1xuICAgICAgdmFyIGZpeGVkQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50ID0gZml4ZWRTaXplICYmIGNlaWwocmVjdChFbGVtZW50cy50cmFjaylbcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc29sdmUoIndpZHRoIildIC8gZml4ZWRTaXplKTtcbiAgICAgIGNsb25lczIgPSBmaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ZWRDb3VudCB8fCBvcHRpb25zW3Jlc29sdmUoImF1dG9XaWR0aCIpXSAmJiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlMi5sZW5ndGggfHwgb3B0aW9ucy5wZXJQYWdlICogTVVMVElQTElFUjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfVxuXG4gICAgcmV0dXJuIGNsb25lczI7XG4gIH1cblxuICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveVxuICB9O1xufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gTW92ZShTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIF9FdmVudEludGVyZmFjZTQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKSxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICBvbiA9IF9FdmVudEludGVyZmFjZTQub24sXG4gICAgICBlbWl0ID0gX0V2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudEludGVyZmFjZTQuZW1pdDtcblxuICB2YXIgc2V0ID0gU3BsaWRlMi5zdGF0ZS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0O1xuICB2YXIgX0NvbXBvbmVudHMyJExheW91dCA9IENvbXBvbmVudHMyLkxheW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXQsXG4gICAgICBzbGlkZVNpemUgPSBfQ29tcG9uZW50czIkTGF5b3V0LnNsaWRlUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpemUsXG4gICAgICBnZXRQYWRkaW5nID0gX0NvbXBvbmVudHMyJExheW91dC5nZXRQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FkZGluZyxcbiAgICAgIHRvdGFsU2l6ZSA9IF9Db21wb25lbnRzMiRMYXlvdXQudG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGFsU2l6ZSxcbiAgICAgIGxpc3RTaXplID0gX0NvbXBvbmVudHMyJExheW91dC5saScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdFNpemUsXG4gICAgICBzbGlkZXJTaXplID0gX0NvbXBvbmVudHMyJExheW91dC5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVyU2l6ZTtcbiAgdmFyIF9Db21wb25lbnRzMiREaXJlY3RpbyA9IENvbXBvbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRzMi5EaXJlY3Rpb24sXG4gICAgICByZXNvbHZlID0gX0NvbXBvbmVudHMyJERpcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Rpby5yZXNvbHZlLFxuICAgICAgb3JpZW50ID0gX0NvbXBvbmVudHMyJERpcmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpby5vcmllbnQ7XG4gIHZhciBfQ29tcG9uZW50czIkRWxlbWVudHMzID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLkVsZW1lbnRzLFxuICAgICAgbGlzdCA9IF9Db21wb25lbnRzMiRFbGVtZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudHMzLmxpc3QsXG4gICAgICB0cmFjayA9IF9Db21wb25lbnRzMiRFbGVtZW50czMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyYWNrO1xuICB2YXIgVHJhbnNpdGlvbjtcblxuICBmdW5jdGlvbiBtb3VudCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgVHJhbnNpdGlvbiA9IENvbXBvbmVudHMyLlRyYW5zaXRpb247XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9SRVNJWkVELCBFVkVOVF9VUERBVEVELCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgRVZFTlRfUkVGUkVTSF0sIHJlcG9zaXRpb24pO1xuICB9XG5cbiAgZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHJlcG9zaXRpb24oKSB7XG4gICAgaWYgKCFDb21wb25lbnRzMi5Db250cm9sbGVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5pc0J1c3koKSkge1xuICAgICAgQ29tcG9uZW50czIuU2Nyb2xsLmNhbmNlbCgpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIGp1bXAoU3BsaWRlMi5pbmRleCk7XG4gICAgICBDb21wb25lbnRzMi5TbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG1vdmUoZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIGluZGV4LCBwcmV2LCBjYWxsYmFjaykge1xuICAgIGlmIChkZXN0ICE9PSBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggJiYgY2FuU2hpZnQoZGVzdCA+IHByZXYpKSB7XG4gICAgICBjYW5jZWwoKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB0cmFuc2xhdGUoc2hpZnQoZ2V0UG9zaXRpb24oKSwgZGVzdCA+IHByZXYpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgc2V0KE1PVklORyk7XG4gICAgZW1pdChFVicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFTlRfTU9WRSwgaW5kZXgsIHByZXYsIGRlc3QpO1xuICAgIFRyYW5zaXRpb24uc3RhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J0KGluZGV4LCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXQoSURMRSk7XG4gICAgICBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21pdChFVkVOVF9NT1ZFRCwgaW5kZXgsIHByZXYsIGRlc3QpO1xuICAgICAgY2FsbGInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VtcChpbmRleCkge1xuICAgIHRyYW5zbGF0ZSh0b1Bvc2l0aW9uKGluZGV4LCB0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gdHJhbnNsYXRlKHBvc2l0aW9uLCBwcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudExvb3ApIHtcbiAgICBpZiAoIVNwbGlkZTIuaXMoRkFERSkpIHtcbiAgICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgZGVzdGluYXRpb24gPSBwcmV2ZW50TG9vcCA/IHBvc2l0aW9uIDogbG9vcChwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29zaXRpb24pO1xuICAgICAgc3R5bGUobGlzdCwgInRyYW5zZm9ybSIsICJ0cmFuc2wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRlIiArIHJlc29sdmUoIlgiKSArICIoIiArIGRlc3RpbmF0aW9uICsgInB4KSIpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIHBvc2l0aW9uICE9PSBkZXN0aW5hdGlvbiAmJiBlbWl0KEVWRU5UX1MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSElGVEVEKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsb29wKHBvc2l0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIGlmIChTcGxpZGUyLmlzKExPT1ApKSB7XG4gICAgICB2YXIgaW5kZXggJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gdG9JbmRleChwb3NpdGlvbik7XG4gICAgICB2YXIgZXhjZWVkZWRNYXggPSBpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXggPiBDb21wb25lbnRzMi5Db250cm9sbGVyLmdldEVuZCgpO1xuICAgICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleGNlZWRlZE1pbiA9IGluZGV4IDwgMDtcblxuICAgICAgaWYgKGV4Y2VlZGVkTWluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid8fCBleGNlZWRlZE1heCkge1xuICAgICAgICBwb3NpdGlvbiA9IHNoaWZ0KHBvc2l0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiwgZXhjZWVkZWRNYXgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcG9zaXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBzaGlmdChwb3NpdGlvbiwgYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2t3YXJkcykge1xuICAgIHZhciBleGNlc3MgPSBwb3NpdGlvbiAtIGdldExpbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhiYWNrd2FyZHMpO1xuICAgIHZhciBzaXplID0gc2xpZGVyU2l6ZSgpO1xuICAgIHBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NpdGlvbiAtPSBvcmllbnQoc2l6ZSAqIChjZWlsKGFicyhleGNlc3MpIC8gc2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHx8IDEpKSAqIChiYWNrd2FyZHMgPyAxIDogLTEpO1xuICAgIHJldHVybiBwb3NpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb247XG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgdHJhbnNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZShnZXRQb3NpdGlvbigpLCB0cnVlKTtcbiAgICBUcmFuc2l0aW9uLmNhbmNlbCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvSW5kZXgocG9zaXRpb24pIHtcbiAgICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIFNsaWRlcyA9IENvbXBvbmVudHMyLlNsaWRlcy5nZXQoKTtcbiAgICB2YXIgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gMDtcbiAgICB2YXIgbWluRGlzdGFuY2UgPSBJbmZpbml0eTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3IgKHZhciBpID0gMDsgaSA8IFNsaWRlcy5sZW5ndGg7IGkrKykge1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBzbGlkZUluZGV4ID0gU2xpZGVzW2ldLmluZGV4O1xuICAgICAgdmFyIGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YW5jZSA9IGFicyh0b1Bvc2l0aW9uKHNsaWRlSW5kZXgsIHRydWUpIC0gcG9zaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uKTtcblxuICAgICAgaWYgKGRpc3RhbmNlIDw9IG1pbkRpc3RhbmNlKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBpbmRleCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzbGlkZUluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB0b1Bvc2l0aW9uKGluZGV4LCB0cmltbWluZykge1xuICAgIHZhciBwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gPSBvcmllbnQodG90YWxTaXplKGluZGV4IC0gMSkgLSBvZmZzZXQoaW5kZXgpKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgcmV0dXJuIHRyaW1taW5nID8gdHJpbShwb3NpdGlvbikgOiBwb3NpdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ247XG4gIH1cblxuICBmdW5jdGlvbiBnZXRQb3NpdGlvbigpIHtcbiAgICB2YXIgbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZnQgPSByZXNvbHZlKCJsZWZ0Iik7XG4gICAgcmV0dXJuIHJlY3QobGlzdClbbGVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RdIC0gcmVjdCh0cmFjaylbbGVmdF0gKyBvcmllbnQoZ2V0UGFkZGluZyhmYWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaW0ocG9zaXRpb24pIHtcbiAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG9wdGlvbnMudHJpbVNwYWNlICYmIFNwbGlkZTIuaXMoU0xJREUpKSB7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcG9zaXRpb24gPSBjbGFtcChwb3NpdGlvbiwgMCwgb3JpZW50KHNsaWRlclNpemUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHRydWUpIC0gbGlzdFNpemUoKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBwb3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBvZmZzZXQoaW5kZXgpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGZvY3VzID0gb3B0aW9ucy5mb2N1cztcbiAgICByZXR1cm4gZm9jdXMgPT09ICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2VudGVyIiA/IChsaXN0U2l6ZSgpIC0gc2xpZGVTaXplKGluZGV4LCB0cnVlKSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8gMiA6ICtmb2N1cyAqIHNsaWRlU2l6ZShpbmRleCkgfHwgMDtcbiAgfVxuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBnZXRMaW1pdChtYXgpIHtcbiAgICByZXR1cm4gdG9Qb3NpdGlvbignCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF4ID8gQ29tcG9uZW50czIuQ29udHJvbGxlci5nZXRFbmQoKSA6IDAsICEhb3B0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbnMudHJpbVNwYWNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNhblNoaWZ0KGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMpIHtcbiAgICB2YXIgc2hpZnRlZCA9IG9yaWVudChzaGlmdChnZXRQb3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb24oKSwgYmFja3dhcmRzKSk7XG4gICAgcmV0dXJuIGJhY2t3YXJkcyA/IHNoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdGVkID49IDAgOiBzaGlmdGVkIDw9IGxpc3RbcmVzb2x2ZSgic2Nyb2xsV2lkdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIildIC0gcmVjdCh0cmFjaylbcmVzb2x2ZSgid2lkdGgiKV07XG4gIH1cblxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZXhjZWVkZWRMaW1pdChtYXgsIHBvc2l0aW9uKSB7XG4gICAgcG9zaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uID0gaXNVbmRlZmluZWQocG9zaXRpb24pID8gZ2V0UG9zaXRpb24oKSA6IHAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3NpdGlvbjtcbiAgICB2YXIgZXhjZWVkZWRNaW4gPSBtYXggIT09IHRydWUgJiYgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWVudChwb3NpdGlvbikgPCBvcmllbnQoZ2V0TGltaXQoZmFsc2UpKTtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIGV4Y2VlZGVkTWF4ID0gbWF4ICE9PSBmYWxzZSAmJiBvcmllbnQocG9zaXRpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKSA+IG9yaWVudChnZXRMaW1pdCh0cnVlKSk7XG4gICAgcmV0dXJuIGV4Y2VlZGVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ01pbiB8fCBleGNlZWRlZE1heDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0OiBtb3VudCxcbiAgICBtb3ZlOiBtb3ZlLFxuICAgIGp1bXA6IGp1bXAsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRyYW5zbGF0ZTogdHJhbnNsYXRlLFxuICAgIHNoaWZ0OiBzaGlmdCxcbiAgICBjYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY2VsOiBjYW5jZWwsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAgICB0b1Bvc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbjogdG9Qb3NpdGlvbixcbiAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb24sXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGdldExpbWl0OiBnZXRMaW1pdCxcbiAgICBleGNlZWRlZExpbWl0OiBleGNlZWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RMaW1pdCxcbiAgICByZXBvc2l0aW9uOiByZXBvc2l0aW9uXG4gIH07XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBDb250cm9sbGVyKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlNSA9IEV2ZW50SW50ZXJmYWNlKFNwbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNS5vbixcbiAgICAgIGVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX0V2ZW50SW50ZXJmYWNlNS5lbWl0O1xuXG4gIHZhciBNb3ZlID0gQ29tcG9uZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMyLk1vdmU7XG4gIHZhciBnZXRQb3NpdGlvbiA9IE1vdmUuZ2V0UG9zaXRpb24sXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgZ2V0TGltaXQgPSBNb3ZlLmdldExpbWl0LFxuICAgICAgdG9Qb3NpdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBNb3ZlLnRvUG9zaXRpb247XG4gIHZhciBfQ29tcG9uZW50czIkU2xpZGVzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NvbXBvbmVudHMyLlNsaWRlcyxcbiAgICAgIGlzRW5vdWdoID0gX0NvbXBvbmVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMiRTbGlkZXMuaXNFbm91Z2gsXG4gICAgICBnZXRMZW5ndGggPSBfQ29tcG9uZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyJFNsaWRlcy5nZXRMZW5ndGg7XG4gIHZhciBvbWl0RW5kID0gb3B0aW9ucy5vbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VuZDtcbiAgdmFyIGlzTG9vcCA9IFNwbGlkZTIuaXMoTE9PUCk7XG4gIHZhciBpc1NsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSA9IFNwbGlkZTIuaXMoU0xJREUpO1xuICB2YXIgZ2V0TmV4dCA9IGFwcGx5KGcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBZGphY2VudCwgZmFsc2UpO1xuICB2YXIgZ2V0UHJldiA9IGFwcGx5KGdldEFkaicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2VudCwgdHJ1ZSk7XG4gIHZhciBjdXJySW5kZXggPSBvcHRpb25zLnN0YXJ0IHx8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAwO1xuICB2YXIgZW5kSW5kZXg7XG4gIHZhciBwcmV2SW5kZXggPSBjdXJySW5kZXg7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgc2xpZGVDb3VudDtcbiAgdmFyIHBlck1vdmU7XG4gIHZhciBwZXJQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FnZTtcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBpbml0KCk7XG4gICAgbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKFtFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9FTkRfSU5ERVgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0NIQU5HRURdLCBpbml0KTtcbiAgICBvbihFVkVOVF9SRVNJWkVELCBvblJlc2l6ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgc2xpZGVDb3VudCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBnZXRMZW5ndGgodHJ1ZSk7XG4gICAgcGVyTW92ZSA9IG9wdGlvbnMucGVyTW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZTtcbiAgICBlbmRJbmRleCA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZXRFbmQoKTtcbiAgICB2YXIgaW5kZXggPSBjbGFtcChjdXJySW5kZXgsIDAsIG9tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l0RW5kID8gZW5kSW5kZXggOiBzbGlkZUNvdW50IC0gMSk7XG5cbiAgICBpZiAoaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ICE9PSBjdXJySW5kZXgpIHtcbiAgICAgIGN1cnJJbmRleCA9IGluZGV4O1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIE1vdmUucmVwb3NpdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvblJlc2l6ZWQoKSB7XG4gICAgaWYgKGVuZEluZGV4ICE9PSBnZXRFbmQoKSkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIGVtaXQoRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQpO1xuICAgIH1cbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICBmdW5jdGlvbiBnbyhjb250cm9sLCBhbGxvd1NhbWVJbmRleCwgY2FsbGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NrKSB7XG4gICAgaWYgKCFpc0J1c3koKSkge1xuICAgICAgdmFyIGRlc3QgPSBwYXJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoY29udHJvbCk7XG4gICAgICB2YXIgaW5kZXggPSBsb29wKGRlc3QpO1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaWYgKGluZGV4ID4gLTEgJiYgKGFsbG93U2FtZUluZGV4IHx8IGluZGV4ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYichPT0gY3VyckluZGV4KSkge1xuICAgICAgICBzZXRJbmRleChpbmRleCk7XG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBNb3ZlLm1vdmUoZGVzdCwgaW5kZXgsIHByZXZJbmRleCwgY2FsbGJhY2spO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY3JvbGwoZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCBkdXJhdGlvbiwgc25hcCwgY2FsbGJhY2spIHtcbiAgICBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIuU2Nyb2xsLnNjcm9sbChkZXN0aW5hdGlvbiwgZHVyYXRpb24sIHNuYXAsIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiAoKSB7XG4gICAgICB2YXIgaW5kZXggPSBsb29wKE1vdmUudG9JbmRleChnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0UG9zaXRpb24oKSkpO1xuICAgICAgc2V0SW5kZXgob21pdEVuZCA/IG1pbihpbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXgsIGVuZEluZGV4KSA6IGluZGV4KTtcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2UoY29udHJvbCknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICB2YXIgaW5kZXggPSBjdXJySW5kZXg7XG5cbiAgICBpZiAoaXNTdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW5nKGNvbnRyb2wpKSB7XG4gICAgICB2YXIgX3JlZiA9IGNvbnRyb2wubWF0Y2goLycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoWytcXC08Pl0pKFxcZCspPy8pIHx8IFtdLFxuICAgICAgICAgIGluZGljYXRvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfcmVmWzFdLFxuICAgICAgICAgIG51bWJlciA9IF9yZWZbMl07XG5cbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAoaW5kaWNhdG9yID09PSAiKyIgfHwgaW5kaWNhdG9yID09PSAiLSIpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICAgIGluZGV4ID0gY29tcHV0ZURlc3RJbmRleChjdXJySW5kZXggKyArKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIiArIGluZGljYXRvciArICgrbnVtYmVyIHx8IDEpKSwgY3VyckluZGV4KTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGVsc2UgaWYgKGluZGljYXRvciA9PT0gIj4iKSB7XG4gICAgICAgIGluZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCA9IG51bWJlciA/IHRvSW5kZXgoK251bWJlcikgOiBnZXROZXh0KHRydWUpO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIH0gZWxzZSBpZiAoaW5kaWNhdG9yID09PSAiPCIpIHtcbiAgICAgICAgaW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4ID0gZ2V0UHJldih0cnVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGluZGV4ID0gaXNMb29wID8gY29udHJvbCA6IGNsYW1wKGNvbnRyb2wsIDAsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIGdldEFkamFjZW50KHByZXYsIGRlc3RpbmF0aW9uKSB7XG4gICAgdmFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBudW1iZXIgPSBwZXJNb3ZlIHx8IChoYXNGb2N1cygpID8gMSA6IHBlclBhZ2UpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB2YXIgZGVzdCA9IGNvbXB1dGVEZXN0SW5kZXgoY3VyckluZGV4ICsgbnVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlciAqIChwcmV2ID8gLTEgOiAxKSwgY3VyckluZGV4LCAhKHBlck1vdmUgfHwgaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc0ZvY3VzKCkpKTtcblxuICAgIGlmIChkZXN0ID09PSAtMSAmJiBpc1NsaWRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgaWYgKCFhcHByb3hpbWF0ZWx5RXF1YWwoZ2V0UG9zaXRpb24oKSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdldExpbWl0KCFwcmV2KSwgMSkpIHtcbiAgICAgICAgcmV0dXJuIHByZXYgPyAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IGVuZEluZGV4O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZXN0aW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb24gPyBkZXN0IDogbG9vcChkZXN0KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb21wdXRlRGVzdEluZGV4KGRlc3QsIGZyb20sIHNuYXBQYWdlKSB7XG4gICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0Vub3VnaCgpIHx8IGhhc0ZvY3VzKCkpIHtcbiAgICAgIHZhciBpbmRleCA9IGNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wdXRlTW92YWJsZURlc3RJbmRleChkZXN0KTtcblxuICAgICAgaWYgKGluZGV4ICE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gZGVzdCkge1xuICAgICAgICBmcm9tID0gZGVzdDtcbiAgICAgICAgZGVzdCA9IGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RleDtcbiAgICAgICAgc25hcFBhZ2UgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChkZXN0IDwgMCB8fCBkZXN0ID4gZW5kSW5kZXgpIHtcbiAgICAgICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyghcGVyTW92ZSAmJiAoYmV0d2VlbigwLCBkZXN0LCBmcm9tLCB0cnVlKSB8fCBiZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0d2VlbihlbmRJbmRleCwgZnJvbSwgZGVzdCwgdHJ1ZSkpKSB7XG4gICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3QgPSB0b0luZGV4KHRvUGFnZShkZXN0KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgIGlmIChpc0xvb3ApIHtcbiAgICAgICAgICAgIGRlc3QgPSBzbmFwUGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UgPyBkZXN0IDwgMCA/IC0oc2xpZGVDb3VudCAlIHBlclBhZ2UgfHwgcGVyUGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpIDogc2xpZGVDb3VudCA6IGRlc3Q7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5yZXdpbmQpIHtcbiAgICAgICAgICAgIGRlc3QgPSBkZXN0IDwgMCA/IGVuZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJbmRleCA6IDA7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlc3QgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgLTE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgaWYgKHNuYXBQYWdlICYmIGRlc3QgIT09IGZyb20pIHtcbiAgICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdCA9IHRvSW5kZXgodG9QYWdlKGZyb20pICsgKGRlc3QgPCBmcm9tID8gLTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDogMSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBkZXN0ID0gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc3Q7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gY29tcHV0ZU1vdmFibGVEZXN0SW5kZXgoZGVzdCkge1xuICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNTbGlkZSAmJiBvcHRpb25zLnRyaW1TcGFjZSA9PT0gIm1vdmUiICYmIGRlc3QgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyE9PSBjdXJySW5kZXgpIHtcbiAgICAgIHZhciBwb3NpdGlvbiA9IGdldFBvc2l0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbigpO1xuXG4gICAgICB3aGlsZSAocG9zaXRpb24gPT09IHRvUG9zaXRpb24oZGVzdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWUpICYmIGJldHdlZW4oZGVzdCwgMCwgU3BsaWRlMi5sZW5ndGggLSAxLCAhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMucmV3aW5kKSkge1xuICAgICAgICBkZXN0IDwgY3VyckluZGV4ID8gLS0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGVzdCA6ICsrZGVzdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q7XG4gIH1cblxuICBmdW5jdGlvbiBsb29wKGluZGV4KSB7XG4gICAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0xvb3AgPyAoaW5kZXggKyBzbGlkZUNvdW50KSAlIHNsaWRlQ291bnQgfHwgMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEVuZCgpIHtcbiAgICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZCA9IHNsaWRlQ291bnQgLSAoaGFzRm9jdXMoKSB8fCBpc0xvb3AgJiYgcGVyTScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdmUgPyAxIDogcGVyUGFnZSk7XG5cbiAgICB3aGlsZSAob21pdEVuZCAmJiBlbmQtLScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPiAwKSB7XG4gICAgICBpZiAodG9Qb3NpdGlvbihzbGlkZUNvdW50IC0gMSwgdHJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpICE9PSB0b1Bvc2l0aW9uKGVuZCwgdHJ1ZSkpIHtcbiAgICAgICAgZW5kKys7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xhbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwKGVuZCwgMCwgc2xpZGVDb3VudCAtIDEpO1xuICB9XG5cbiAgZnVuY3Rpb24gdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvSW5kZXgocGFnZSkge1xuICAgIHJldHVybiBjbGFtcChoYXNGb2N1cygpID8gcGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgOiBwZXJQYWdlICogcGFnZSwgMCwgZW5kSW5kZXgpO1xuICB9XG5cbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIHRvUGFnZShpbmRleCkge1xuICAgIHJldHVybiBoYXNGb2N1cygpID8gbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbihpbmRleCwgZW5kSW5kZXgpIDogZmxvb3IoKGluZGV4ID49IGVuZEluZGV4ID8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NsaWRlQ291bnQgLSAxIDogaW5kZXgpIC8gcGVyUGFnZSk7XG4gIH1cblxuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdG9EZXN0KGRlc3RpbmF0aW9uKSB7XG4gICAgdmFyIGNsb3Nlc3QgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTW92ZS50b0luZGV4KGRlc3RpbmF0aW9uKTtcbiAgICByZXR1cm4gaXNTbGlkZSA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFtcChjbG9zZXN0LCAwLCBlbmRJbmRleCkgOiBjbG9zZXN0O1xuICB9XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZ1bmN0aW9uIHNldEluZGV4KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ICE9PSBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyckluZGV4KSB7XG4gICAgICBwcmV2SW5kZXggPSBjdXJySW5kZXg7XG4gICAgICBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VyckluZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KHByZXYpIHtcbiAgICByZXR1cm4gcHJldiA/IHByZXZJbmRleCA6IGN1cnJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25kZXg7XG4gIH1cblxuICBmdW5jdGlvbiBoYXNGb2N1cygpIHtcbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduICFpc1VuZGVmaW5lZChvcHRpb25zLmZvY3VzKSB8fCBvcHRpb25zLmlzTmF2aWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBpc0J1c3koKSB7XG4gICAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTcGxpZGUyLnN0YXRlLmlzKFtNT1ZJTkcsIFNDUk9MTElOR10pICYmICEhb3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMud2FpdEZvclRyYW5zaXRpb247XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VudDogbW91bnQsXG4gICAgZ286IGdvLFxuICAgIHNjcm9sbDogc2Nyb2xsLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBnZXROZXh0OiBnZXROZXh0LFxuICAgIGdldFByZXY6IGdldFByZXYsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGdldEFkamFjZW50OiBnZXRBZGphY2VudCxcbiAgICBnZXRFbmQ6IGdldEVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2QsXG4gICAgc2V0SW5kZXg6IHNldEluZGV4LFxuICAgIGdldEluZGV4OiBnZXRJbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAgICB0b1BhZ2U6IHRvUGFnZSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdG9EZXN0OiB0b0Rlc3QsXG4gICAgaGFzRm9jdXM6IGhhc0ZvY3VzLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpc0J1c3k6IGlzQnVzeVxuICB9O1xufVxuXG52YXIgWE1MX05BTUVfU1BBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NFID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIjtcbnZhciBQQVRIID0gIm0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMTUuNSAwLjkzMi00LjMgNC4zOCAxNC41IDE0LjYtMTQuNSAxNC41IDQuMyA0LjQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzE0LjYtMTQuNiA0LjQtNC4zLTQuNC00LjQtMTQuNi0xNC42eiI7XG52YXIgU0laRSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSA0MDtcblxuZnVuY3Rpb24gQXJyb3dzKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucykge1xuICB2YXIgZXZlbnQgPSBFdmVudEludGVyZmFjZShTcGxpZGUyKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHZhciBvbiA9IGV2ZW50Lm9uLFxuICAgICAgYmluZCA9IGV2ZW50LmJpbmQsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZW1pdCA9IGV2ZW50LmVtaXQ7XG4gIHZhciBjbGFzc2VzID0gb3B0aW9ucy5jbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NlcyxcbiAgICAgIGkxOG4gPSBvcHRpb25zLmkxOG47XG4gIHZhciBFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBDb21wb25lbnRzMi5FbGVtZW50cyxcbiAgICAgIENvbnRyb2xsZXIgPSBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50czIuQ29udHJvbGxlcjtcbiAgdmFyIHBsYWNlaG9sZGVyID0gRWxlbWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmFycm93cyxcbiAgICAgIHRyYWNrID0gRWxlbWVudHMudHJhY2s7XG4gIHZhciB3cmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBlciA9IHBsYWNlaG9sZGVyO1xuICB2YXIgcHJldiA9IEVsZW1lbnRzLnByZXY7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgbmV4dCA9IEVsZW1lbnRzLm5leHQ7XG4gIHZhciBjcmVhdGVkO1xuICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHdyYXBwZXJDbGFzc2VzO1xuICB2YXIgYXJyb3dzID0ge307XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIG1vdW50KCkge1xuICAgIGluaXQoKTtcbiAgICBvbihFVkVOVF9VUERBVEVELCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVtb3VudCk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdW50KCkge1xuICAgIGRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0cm95KCk7XG4gICAgbW91bnQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXQoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIHZhciBlbmFibGVkID0gb3B0aW9ucy5hcnJvd3M7XG5cbiAgICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKGVuYWJsZWQgJiYgIShwcmV2ICYmIG5leHQpKSB7XG4gICAgICBjcmVhdGVBcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3dzKCk7XG4gICAgfVxuXG4gICAgaWYgKHByZXYgJiYgbmV4dCkge1xuICAgICAgYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2lnbihhcnJvd3MsIHtcbiAgICAgICAgcHJldjogcHJldixcbiAgICAgICAgbmV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic6IG5leHRcbiAgICAgIH0pO1xuICAgICAgZGlzcGxheSh3cmFwcGVyLCBlbmFibGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic/ICIiIDogIm5vbmUiKTtcbiAgICAgIGFkZENsYXNzKHdyYXBwZXIsIHdyYXBwZXJDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xhc3NlcyA9IENMQVNTX0FSUk9XUyArICItLSIgKyBvcHRpb25zLmRpcmVjdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICBsaXN0ZW4oKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHVwZGF0ZSgpO1xuICAgICAgICBzZXRBdHRyaWJ1dGUoW3ByZXYsIG5leCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0XSwgQVJJQV9DT05UUk9MUywgdHJhY2suaWQpO1xuICAgICAgICBlbWl0KEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19BUlJPV1NfTU9VTlRFRCwgcHJldiwgbmV4dCk7XG4gICAgICB9XG4gICAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgZXZlbnQuZGVzdHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3koKTtcbiAgICByZW1vdmVDbGFzcyh3cmFwcGVyLCB3cmFwcGVyQ2xhc3NlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgaWYgKGNyZWF0ZWQpIHtcbiAgICAgIHJlbW92ZShwbGFjZWhvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXIgPyBbcHJldiwgbmV4dF0gOiB3cmFwcGVyKTtcbiAgICAgIHByZXYgPSBuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZUF0dHJpYnV0ZShbcHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3YsIG5leHRdLCBBTExfQVRUUklCVVRFUyk7XG4gICAgfVxuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGxpc3RlbigpIHtcbiAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfTU9WJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VELCBFVkVOVF9SRUZSRVNILCBFVkVOVF9TQ1JPTExFRCwgRVZFTlRfRU5EX0lORCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFWF9DSEFOR0VEXSwgdXBkYXRlKTtcbiAgICBiaW5kKG5leHQsICJjbGljayIsIGFwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BseShnbywgIj4iKSk7XG4gICAgYmluZChwcmV2LCAiY2xpY2siLCBhcHBseShnbywnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICI8IikpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ28oY29udHJvbCkge1xuICAgIENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250cm9sbGVyLmdvKGNvbnRyb2wsIHRydWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NyZWF0ZUFycm93cygpIHtcbiAgICB3cmFwcGVyID0gcGxhY2Vob2xkZXIgfHwgY3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWF0ZSgiZGl2IiwgY2xhc3Nlcy5hcnJvd3MpO1xuICAgIHByZXYgPSBjcmVhdGVBcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyb3codHJ1ZSk7XG4gICAgbmV4dCA9IGNyZWF0ZUFycm93KGZhbHNlKTtcbiAgICBjcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlYXRlZCA9IHRydWU7XG4gICAgYXBwZW5kKHdyYXBwZXIsIFtwcmV2LCBuZXh0XSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICFwbGFjZWhvbGRlciAmJiBiZWZvcmUod3JhcHBlciwgdHJhY2spO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycm93KHByZXYyKSB7XG4gICAgdmFyIGFyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdyA9ICI8YnV0dG9uIGNsYXNzPVxcIiIgKyBjbGFzc2VzLmFycm93ICsgIiAiICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIChwcmV2MiA/IGNsYXNzZXMucHJldiA6IGNsYXNzZXMubmV4dCkgKyAiXFwiIHR5cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlPVxcImJ1dHRvblxcIj48c3ZnIHhtbG5zPVxcIiIgKyBYTUxfTkFNRV9TUEFDRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyAiXFwiIHZpZXdCb3g9XFwiMCAwICIgKyBTSVpFICsgIiAiICsgU0laRSArJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAiXFwiIHdpZHRoPVxcIiIgKyBTSVpFICsgIlxcIiBoZWlnaHQ9XFwiIiArIFNJWicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFICsgIlxcIiBmb2N1c2FibGU9XFwiZmFsc2VcXCI+PHBhdGggZD1cXCIiICsgKG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zLmFycm93UGF0aCB8fCBQQVRIKSArICJcXCIgLz4iO1xuICAgIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFyc2VIdG1sKGFycm93KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaWYgKHByZXYgJiYgbmV4dCkge1xuICAgICAgdmFyIGluZGV4ID0gU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuaW5kZXg7XG4gICAgICB2YXIgcHJldkluZGV4ID0gQ29udHJvbGxlci5nZXRQcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldigpO1xuICAgICAgdmFyIG5leHRJbmRleCA9IENvbnRyb2xsZXIuZ2V0TmV4dCgpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICAgIHZhciBwcmV2TGFiZWwgPSBwcmV2SW5kZXggPiAtMSAmJiBpbmRleCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPCBwcmV2SW5kZXggPyBpMThuLmxhc3QgOiBpMThuLnByZXY7XG4gICAgICB2YXIgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHRMYWJlbCA9IG5leHRJbmRleCA+IC0xICYmIGluZGV4ID4gbmV4dEluZGV4ID8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGkxOG4uZmlyc3QgOiBpMThuLm5leHQ7XG4gICAgICBwcmV2LmRpc2FibGVkID0gcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZXZJbmRleCA8IDA7XG4gICAgICBuZXh0LmRpc2FibGVkID0gbmV4dEluZGV4IDwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzA7XG4gICAgICBzZXRBdHRyaWJ1dGUocHJldiwgQVJJQV9MQUJFTCwgcHJldkxhYmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCk7XG4gICAgICBzZXRBdHRyaWJ1dGUobmV4dCwgQVJJQV9MQUJFTCwgbmV4dExhYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbCk7XG4gICAgICBlbWl0KEVWRU5UX0FSUk9XU19VUERBVEVELCBwcmV2LCBuZXh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgcHJldkluZGV4LCBuZXh0SW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgIGFycm93czogYXJyb3dzLFxuICAgIG1vdW50OiBtb3VudCxcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZGVzdHJveTogZGVzdHJveSxcbiAgICB1cGRhdGU6IHVwZGF0ZVxuICB9O1xufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxudmFyIElOVEVSVkFMX0RBVEFfQVRUUklCVVRFID0gREFUQV9BVFRSSUJVVEUgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIi1pbnRlcnZhbCI7XG5cbmZ1bmN0aW9uIEF1dG9wbGF5KFNwbGlkZTIsIENvbXBvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlNiA9IEV2ZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNi4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24sXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlNi5iaW5kLFxuICAgICAgZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXQgPSBfRXZlbnRJbnRlcmZhY2U2LmVtaXQ7XG5cbiAgdmFyIGludGVydmFsID0gUmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncXVlc3RJbnRlcnZhbChvcHRpb25zLmludGVydmFsLCBTcGxpZGUyLmdvLmJpbmQoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NwbGlkZTIsICI+IiksIG9uQW5pbWF0aW9uRnJhbWUpO1xuICB2YXIgaXNQYXVzZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gaW50ZXJ2YWwuaXNQYXVzZWQ7XG4gIHZhciBFbGVtZW50cyA9IENvbXBvbmVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzMi5FbGVtZW50cyxcbiAgICAgIF9Db21wb25lbnRzMiRFbGVtZW50czQgPSBDb21wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZW50czIuRWxlbWVudHMsXG4gICAgICByb290ID0gX0NvbXBvbmVudHMyJEVsZW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czQucm9vdCxcbiAgICAgIHRvZ2dsZSA9IF9Db21wb25lbnRzMiRFbGVtZW50cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic0LnRvZ2dsZTtcbiAgdmFyIGF1dG9wbGF5ID0gb3B0aW9ucy5hdXRvcGxheTtcbiAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBob3ZlcmVkO1xuICB2YXIgZm9jdXNlZDtcbiAgdmFyIHN0b3BwZWQgPSBhdXRvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsYXkgPT09ICJwYXVzZSI7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmIChhdXRvcGxheSkge1xuICAgICAgbGlzdGVuKCk7XG4gICAgICB0b2dnbGUgJiYgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldEF0dHJpYnV0ZSh0b2dnbGUsIEFSSUFfQ09OVFJPTFMsIEVsZW1lbnRzLnRyYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInay5pZCk7XG4gICAgICBzdG9wcGVkIHx8IHBsYXkoKTtcbiAgICAgIHVwZGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0ZW4oKSB7XG4gICAgaWYgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhvcHRpb25zLnBhdXNlT25Ib3Zlcikge1xuICAgICAgYmluZChyb290LCAibW91c2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50ZXIgbW91c2VsZWF2ZSIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIGhvdmVyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkID0gZS50eXBlID09PSAibW91c2VlbnRlciI7XG4gICAgICAgIGF1dG9Ub2dnbGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wYXVzZU9uRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvY3VzKSB7XG4gICAgICBiaW5kKHJvb3QsICJmb2N1c2luIGZvY3Vzb3V0IiwgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIChlKSB7XG4gICAgICAgIGZvY3VzZWQgPSBlLnR5cGUgPT09ICJmb2N1c2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiI7XG4gICAgICAgIGF1dG9Ub2dnbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBpZiAodG9nZ2xlKSB7XG4gICAgICBiaW5kKHRvZ2dsZSwgImNsaWNrIiwgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uICgpIHtcbiAgICAgICAgc3RvcHBlZCA/IHBsYXkoKSA6IHBhdXNlKHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uKFtFVkVOVF9NT1ZFLCBFVkVOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1RfU0NST0xMLCBFVkVOVF9SRUZSRVNIXSwgaW50ZXJ2YWwucmV3aW5kKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24oRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIGlmIChpc1BhdXNlZCgpICYmIENvbXBvbmVudHMyLlNsaWRlcy5pcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbm91Z2goKSkge1xuICAgICAgaW50ZXJ2YWwuc3RhcnQoIW9wdGlvbnMucmVzZXRQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvZ3Jlc3MpO1xuICAgICAgZm9jdXNlZCA9IGhvdmVyZWQgPSBzdG9wcGVkID0gZmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHNlO1xuICAgICAgdXBkYXRlKCk7XG4gICAgICBlbWl0KEVWRU5UX0FVVE9QTEFZX1AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTEFZKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXVzZShzdG9wKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChzdG9wID09PSB2b2lkIDApIHtcbiAgICAgIHN0b3AgPSB0cnVlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgICBzdG9wcGVkID0gISFzdG9wO1xuICAgIHVwZGF0ZSgpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmICghaXNQYXVzZWQoKSkge1xuICAgICAgaW50ZXJ2YWwucGF1c2UoKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0KEVWRU5UX0FVVE9QTEFZX1BBVVNFKTtcbiAgICB9XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gYXV0b1RvZ2dsZSgpIHtcbiAgICBpZiAoIXN0b3BwZWQpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidob3ZlcmVkIHx8IGZvY3VzZWQgPyBwYXVzZShmYWxzZSkgOiBwbGF5KCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICBpZiAodG9nZ2xlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgdG9nZ2xlQ2xhc3ModG9nZ2xlLCBDTEFTU19BQ1RJVkUsICFzdG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BlZCk7XG4gICAgICBzZXRBdHRyaWJ1dGUodG9nZ2xlLCBBUklBX0xBQkVMLCBvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucy5pMThuW3N0b3BwZWQgPyAicGxheSIgOiAicGF1c2UiXSk7XG4gICAgfVxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG4gIGZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWUocmF0ZSkge1xuICAgIHYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXIgYmFyID0gRWxlbWVudHMuYmFyO1xuICAgIGJhciAmJiBzdHlsZShiYXIsICJ3aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkdGgiLCByYXRlICogMTAwICsgIiUiKTtcbiAgICBlbWl0KEVWRU5UX0FVVE9QTEFZJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19QTEFZSU5HLCByYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW92ZShpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gpIHtcbiAgICB2YXIgU2xpZGUgPSBDb21wb25lbnRzMi5TbGlkZXMuZ2V0QXQoaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGV4KTtcbiAgICBpbnRlcnZhbC5zZXQoU2xpZGUgJiYgK2dldEF0dHJpYnV0ZShTbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUuc2xpZGUsIElOVEVSVkFMX0RBVEFfQVRUUklCVVRFKSB8fCBvcHRpb25zLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlcnZhbCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgZGVzdHJveTogaW50ZXJ2YWwuY2FuY2VsLFxuICAgIHBsYXk6IHBsYXksXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHBhdXNlOiBwYXVzZSxcbiAgICBpc1BhdXNlZDogaXNQYXVzZWRcbiAgfTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIENvdmVyKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICB2YXIgX0V2ZW50SW50ZXJmYWNlNyA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlNy5vbjtcblxuICBmdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKG9wdGlvbnMuY292ZXIpIHtcbiAgICAgIG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9MQVpZTE9BRF9MT0FERUQsIGFwcGx5KHRvZ2dsZSwgdHJ1ZSkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VTSF0sIGFwcGx5KGNvdmVyLCB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uIGNvdmVyKGNvdmVyMikge1xuICAgIENvbXBvbmVudHMyLlNsaWRlcy5mb3JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FjaChmdW5jdGlvbiAoU2xpZGUpIHtcbiAgICAgIHZhciBpbWcgPSBjaGlsZChTbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZGUuY29udGFpbmVyIHx8IFNsaWRlLnNsaWRlLCAiaW1nIik7XG5cbiAgICAgIGlmICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW1nICYmIGltZy5zcmMpIHtcbiAgICAgICAgdG9nZ2xlKGNvdmVyMiwgaW1nLCBTbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdG9nZ2xlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhjb3ZlcjIsIGltZywgU2xpZGUpIHtcbiAgICBTbGlkZS5zdHlsZSgiYmFja2dyb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQiLCBjb3ZlcjIgPyAiY2VudGVyL2NvdmVyIG5vLXJlcGVhdCB1cmwoXFwiIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWcuc3JjICsgIlxcIikiIDogIiIsIHRydWUpO1xuICAgIGRpc3BsYXkoaW1nLCBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZXIyID8gIm5vbmUiIDogIiIpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGFwcGx5KGNvdmVyLCBmYWxzZSlcbiAgfTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbnZhciBCT1VOQ0VfRElGRl9USFJFU0hPTEQgPSAxMDtcbnZhciBCT1VOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NFX0RVUkFUSU9OID0gNjAwO1xudmFyIEZSSUNUSU9OX0ZBQ1RPUiA9IDAuNjtcbnZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IgQkFTRV9WRUxPQ0lUWSA9IDEuNTtcbnZhciBNSU5fRFVSQVRJT04gPSA4MCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwO1xuXG5mdW5jdGlvbiBTY3JvbGwoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2U4ID0gRXZlbnRJbnRlcmZhY2UoU3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZTIpLFxuICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2U4Lm9uLFxuICAgICAgZW1pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBfRXZlbnRJbnRlcmZhY2U4LmVtaXQ7XG5cbiAgdmFyIHNldCA9IFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N0YXRlLnNldDtcbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlO1xuICB2YXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dldFBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbixcbiAgICAgIGdldExpbWl0ID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIE1vdmUuZ2V0TGltaXQsXG4gICAgICBleGNlZWRlZExpbWl0ID0gTW92ZS5leGNlZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZWRMaW1pdCxcbiAgICAgIHRyYW5zbGF0ZSA9IE1vdmUudHJhbnNsYXRlO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIGlzU2xpZGUgPSBTcGxpZGUyLmlzKFNMSURFKTtcbiAgdmFyIGludGVydmFsO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGNhbGxiYWNrO1xuICB2YXIgZnJpY3Rpb24gPSAxO1xuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBtb3VudCgpIHtcbiAgICBvbihFVkVOVF9NT1ZFLCBjbGVhcik7XG4gICAgb24oWycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9VUERBVEVELCBFVkVOVF9SRUZSRVNIXSwgY2FuY2VsKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiBzY3JvbGwoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzbmFwLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25TY3JvbGxlZCwgbm9Db25zdHJhaW4pIHtcbiAgICB2YXIgZnJvbSA9IGdldFBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbigpO1xuICAgIGNsZWFyKCk7XG5cbiAgICBpZiAoc25hcCAmJiAoIWlzUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlIHx8ICFleGNlZWRlZExpbWl0KCkpKSB7XG4gICAgICB2YXIgc2l6ZSA9IENvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21wb25lbnRzMi5MYXlvdXQuc2xpZGVyU2l6ZSgpO1xuICAgICAgdmFyIG9mZnNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSBzaWduKGRlc3RpbmF0aW9uKSAqIHNpemUgKiBmbG9vcihhYnMoZGVzdGluYXRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uKSAvIHNpemUpIHx8IDA7XG4gICAgICBkZXN0aW5hdGlvbiA9IE1vdmUudG9Qb3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRpb24oQ29tcG9uZW50czIuQ29udHJvbGxlci50b0Rlc3QoZGVzdGluYXRpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyUgc2l6ZSkpICsgb2Zmc2V0O1xuICAgIH1cblxuICAgIHZhciBub0Rpc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGFwcHJveGltYXRlbHlFcXVhbChmcm9tLCBkZXN0aW5hdGlvbiwgMSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZyaWN0aW9uID0gMTtcbiAgICBkdXJhdGlvbiA9IG5vRGlzdGFuY2UgPyAwIDogZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cmF0aW9uIHx8IG1heChhYnMoZGVzdGluYXRpb24gLSBmcm9tKSAvIEJBU0VfVkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTE9DSVRZLCBNSU5fRFVSQVRJT04pO1xuICAgIGNhbGxiYWNrID0gb25TY3JvbGxlZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgaW50ZXJ2YWwgPSBSZXF1ZXN0SW50ZXJ2YWwoZHVyYXRpb24sIG9uRW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgYXBwbHkodXBkYXRlLCBmcm9tLCBkZXN0aW5hdGlvbiwgbm9Db25zdHJhaW4pLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMSk7XG4gICAgc2V0KFNDUk9MTElORyk7XG4gICAgZW1pdChFVkVOVF9TQ1JPTEwpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpbnRlcnZhbC5zdGFydCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25FbmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCkge1xuICAgIHNldChJRExFKTtcbiAgICBjYWxsYmFjayAmJiBjYWxsYmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICBlbWl0KEVWRU5UX1NDUk9MTEVEKTtcbiAgfVxuXG4gIGZ1bmN0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiB1cGRhdGUoZnJvbSwgdG8sIG5vQ29uc3RyYWluLCByYXRlKSB7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwb3NpdGlvbiA9IGdldFBvc2l0aW9uKCk7XG4gICAgdmFyIHRhcmdldCA9IGZyb20gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgKHRvIC0gZnJvbSkgKiBlYXNpbmcocmF0ZSk7XG4gICAgdmFyIGRpZmYgPSAodGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmdldCAtIHBvc2l0aW9uKSAqIGZyaWN0aW9uO1xuICAgIHRyYW5zbGF0ZShwb3NpdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKyBkaWZmKTtcblxuICAgIGlmIChpc1NsaWRlICYmICFub0NvbnN0cmFpbiAmJicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZXhjZWVkZWRMaW1pdCgpKSB7XG4gICAgICBmcmljdGlvbiAqPSBGUklDVElPTl9GJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FDVE9SO1xuXG4gICAgICBpZiAoYWJzKGRpZmYpIDwgQk9VTkNFX0RJRkZfVEhSRVNIJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09MRCkge1xuICAgICAgICBzY3JvbGwoZ2V0TGltaXQoZXhjZWVkZWRMaW1pdCh0cnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSkpLCBCT1VOQ0VfRFVSQVRJT04sIGZhbHNlLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgIGlmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoaW50ZXJ2YWwpIHtcbiAgICAgIGludGVydmFsLmNhbmNlbCgpO1xuICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cblxuICBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgaWYgKGludGVydmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiAhaW50ZXJ2YWwuaXNQYXVzZWQoKSkge1xuICAgICAgY2xlYXIoKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBvbkVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGVhc2luZyh0KSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIHZhciBlYXNpbmdGdW5jID0gb3B0aW9ucy5lYXNpbmdGdW5jO1xuICAgIHJldCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1cm4gZWFzaW5nRnVuYyA/IGVhc2luZ0Z1bmModCkgOiAxIC0gTWF0aC5wb3coMSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLSB0LCA0KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbW91bnQ6IG1vdW50LFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBkZXN0cm95OiBjbGVhcixcbiAgICBzY3JvbGw6IHNjcm9sbCxcbiAgICBjYW5jZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsOiBjYW5jZWxcbiAgfTtcbn1cblxudmFyIFNDUk9MTF9MSVNURU5FUl9PUFRJT04nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUyA9IHtcbiAgcGFzc2l2ZTogZmFsc2UsXG4gIGNhcHR1cmU6IHRydWVcbn07XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBEcmFnKFNwbGlkZTIsIENvbXBvbmVudHMyLCBvcHRpb25zKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgX0V2ZW50SW50ZXJmYWNlOSA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlOS5vbixcbiAgICAgIGVtaXQgPSBfRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50SW50ZXJmYWNlOS5lbWl0LFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U5LmJpbmQsXG4gICAgICB1bmJpbmQgPSBfRXZlbnRJbnRlcmZhY2U5LnVuYmluZDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgdmFyIHN0YXRlID0gU3BsaWRlMi5zdGF0ZTtcbiAgdmFyIE1vdmUgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIuTW92ZSxcbiAgICAgIFNjcm9sbCA9IENvbXBvbmVudHMyLlNjcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbGwsXG4gICAgICBDb250cm9sbGVyID0gQ29tcG9uZW50czIuQ29udHJvbGxlcixcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB0cmFjayA9IENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlZHVjZSA9IENvbXBvbmVudHMyLk1lZGlhLnJlZHVjZTtcbiAgdmFyIF9Db21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIkRGlyZWN0aW8yID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLFxuICAgICAgcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlc29sdmUgPSBfQ29tcG9uZW50czIkRGlyZWN0aW8yLnJlc29sdmUsXG4gICAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpZW50ID0gX0NvbXBvbmVudHMyJERpcmVjdGlvMi5vcmllbnQ7XG4gIHZhciBnZXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUG9zaXRpb24gPSBNb3ZlLmdldFBvc2l0aW9uLFxuICAgICAgZXhjZWVkZWRMaW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBNb3ZlLmV4Y2VlZGVkTGltaXQ7XG4gIHZhciBiYXNlUG9zaXRpb247XG4gIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYmFzZUV2ZW50O1xuICB2YXIgcHJldkJhc2VFdmVudDtcbiAgdmFyIGlzRnJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG4gIHZhciBkcmFnZ2luZztcbiAgdmFyIGV4Y2VlZGVkID0gZmFsc2U7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgY2xpY2tQcmV2ZW50ZWQ7XG4gIHZhciBkaXNhYmxlZDtcbiAgdmFyIHRhcmdlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Q7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgYmluZCh0cmFjaywgUE9JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05URVJfTU9WRV9FVkVOVFMsIG5vb3AsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgYmluZCh0cmFjaywgUE9JTlRFUl9VUF9FVkVOVFMsIG5vb3AsIFNDUk9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgYmluZCh0cmFjaywgUE9JTlRFUl9ET1cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTl9FVkVOVFMsIG9uUG9pbnRlckRvd24sIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgYmluZCh0cmFjaywgImNsaWNrIiwgb25DbGljaywge1xuICAgICAgY2FwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cmU6IHRydWVcbiAgICB9KTtcbiAgICBiaW5kKHRyYWNrLCAiZHJhZ3N0YXJ0IiwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ByZXZlbnQpO1xuICAgIG9uKFtFVkVOVF9NT1VOVEVELCBFVkVOVF9VUERBVEVEXSwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluaXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICB2YXIgZHJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cgPSBvcHRpb25zLmRyYWc7XG4gICAgZGlzYWJsZSghZHJhZyk7XG4gICAgaXNGcmVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGRyYWcgPT09ICJmcmVlIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUG9pbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JEb3duKGUpIHtcbiAgICBjbGlja1ByZXZlbnRlZCA9IGZhbHNlO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmICghZGlzYWJsZWQpIHtcbiAgICAgIHZhciBpc1RvdWNoID0gaXNUb3VjaEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChlKTtcblxuICAgICAgaWYgKGlzRHJhZ2dhYmxlKGUudGFyZ2V0KSAmJiAoaXNUb3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2ggfHwgIWUuYnV0dG9uKSkge1xuICAgICAgICBpZiAoIUNvbnRyb2xsZXIuaXNCdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzeSgpKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gaXNUb3VjaCA/IHRyYWNrIDogd2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RvdztcbiAgICAgICAgICBkcmFnZ2luZyA9IHN0YXRlLmlzKFtNT1ZJTkcsIFNDUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTExJTkddKTtcbiAgICAgICAgICBwcmV2QmFzZUV2ZW50ID0gbnVsbDtcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgYmluZCh0YXJnZXQsIFBPSU5URVJfTU9WRV9FVkVOVFMsIG9uUG9pbnRlck1vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlLCBTQ1JPTExfTElTVEVORVJfT1BUSU9OUyk7XG4gICAgICAgICAgYmluZCh0YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0LCBQT0lOVEVSX1VQX0VWRU5UUywgb25Qb2ludGVyVXAsIFNDUk9MTF9MSVNUJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VORVJfT1BUSU9OUyk7XG4gICAgICAgICAgTW92ZS5jYW5jZWwoKTtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgU2Nyb2xsLmNhbmNlbCgpO1xuICAgICAgICAgIHNhdmUoZSk7XG4gICAgICAgIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vsc2Uge1xuICAgICAgICAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25Qb2ludGVyTW92ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZSkge1xuICAgIGlmICghc3RhdGUuaXMoRFJBR0dJTkcpKSB7XG4gICAgICBzdGF0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuc2V0KERSQUdHSU5HKTtcbiAgICAgIGVtaXQoRVZFTlRfRFJBRyk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICAgIGlmIChlLmNhbmNlbGFibGUpIHtcbiAgICAgIGlmIChkcmFnZ2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2cpIHtcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoYmFzZVBvc2l0aW9uICsgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmFpbihkaWZmQ29vcmQoZSkpKTtcbiAgICAgICAgdmFyIGV4cGlyZWQgPSBkaWZmVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbWUoZSkgPiBMT0dfSU5URVJWQUw7XG4gICAgICAgIHZhciBoYXNFeGNlZWRlZCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBleGNlZWRlZCAhPT0gKGV4Y2VlZGVkID0gZXhjZWVkZWRMaW1pdCgpKTtcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaWYgKGV4cGlyZWQgfHwgaGFzRXhjZWVkZWQpIHtcbiAgICAgICAgICBzYXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsaWNrUHJldmVudGVkID0gdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XG4gICAgICAgIGVtaXQoRVZFTlRfRFJBR0dJTkcpO1xuICAgICAgICBwcmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChlKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNTbGlkZXJEaXJlY3Rpb24oZSkpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIGRyYWdnaW5nID0gc2hvdWxkU3RhcnQoZSk7XG4gICAgICAgIHByZXZlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0KGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIG9uUG9pbnRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JVcChlKSB7XG4gICAgaWYgKHN0YXRlLmlzKERSQUdHSU5HKSkge1xuICAgICAgc3RhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlLnNldChJRExFKTtcbiAgICAgIGVtaXQoRVZFTlRfRFJBR0dFRCk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIGlmIChkcmFnZ2luZykge1xuICAgICAgbW92ZShlKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwcmV2ZW50KGUpO1xuICAgIH1cblxuICAgIHVuYmluZCh0YXJnZXQsIFBPSU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VSX01PVkVfRVZFTlRTLCBvblBvaW50ZXJNb3ZlKTtcbiAgICB1bmJpbmQodGFyZ2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCwgUE9JTlRFUl9VUF9FVkVOVFMsIG9uUG9pbnRlclVwKTtcbiAgICBkcmFnZ2luZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2soZSkge1xuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoIWRpc2FibGVkICYmIGNsaWNrUHJldmVudGVkKSB7XG4gICAgICBwcmV2ZW50KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzYXZlKGUpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcHJldkJhc2VFdmVudCA9IGJhc2VFdmVudDtcbiAgICBiYXNlRXZlbnQgPSBlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBiYXNlUG9zaXRpb24gPSBnZXRQb3NpdGlvbigpO1xuICB9XG5cbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG1vdmUoZSkge1xuICAgIHZhciB2ZWxvY2l0eSA9IGNvbXB1dGVWZWxvY2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHkoZSk7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gY29tcHV0ZURlc3RpbmF0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZWxvY2l0eSk7XG4gICAgdmFyIHJld2luZCA9IG9wdGlvbnMucmV3aW5kICYmIG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLnJld2luZEJ5RHJhZztcbiAgICByZWR1Y2UoZmFsc2UpO1xuXG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lmIChpc0ZyZWUpIHtcbiAgICAgIENvbnRyb2xsZXIuc2Nyb2xsKGRlc3RpbmF0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgMCwgb3B0aW9ucy5zbmFwKTtcbiAgICB9IGVsc2UgaWYgKFNwbGlkZTIuaXMoRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBREUpKSB7XG4gICAgICBDb250cm9sbGVyLmdvKG9yaWVudChzaWduKHZlbG9jaXR5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpIDwgMCA/IHJld2luZCA/ICI8IiA6ICItIiA6IHJld2luZCA/ICI+IiA6ICIrIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIH0gZWxzZSBpZiAoU3BsaWRlMi5pcyhTTElERSkgJiYgZXhjZWVkZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYmIHJld2luZCkge1xuICAgICAgQ29udHJvbGxlci5nbyhleGNlZWRlZExpbWl0KHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnVlKSA/ICI+IiA6ICI8Iik7XG4gICAgfSBlbHNlIHtcbiAgICAgIENvbnRyb2xsZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLmdvKENvbnRyb2xsZXIudG9EZXN0KGRlc3RpbmF0aW9uKSwgdHJ1ZSk7XG4gICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICAgIHJlZHVjZSh0cnVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNob3VsZFN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FydChlKSB7XG4gICAgdmFyIHRocmVzaG9sZHMgPSBvcHRpb25zLmRyYWdNaW5UaHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXNob2xkO1xuICAgIHZhciBpc09iaiA9IGlzT2JqZWN0KHRocmVzaG9sZHMpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgbW91c2UgPSBpc09iaiAmJiB0aHJlc2hvbGRzLm1vdXNlIHx8IDA7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhciB0b3VjaCA9IChpc09iaiA/IHRocmVzaG9sZHMudG91Y2ggOiArdGhyZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaG9sZHMpIHx8IDEwO1xuICAgIHJldHVybiBhYnMoZGlmZkNvb3JkKGUpKSA+IChpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUb3VjaEV2ZW50KGUpID8gdG91Y2ggOiBtb3VzZSk7XG4gIH1cblxuICBmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gaXNTbGlkZXJEaXJlY3Rpb24oZSkge1xuICAgIHJldHVybiBhYnMoZGlmZkNvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yZChlKSkgPiBhYnMoZGlmZkNvb3JkKGUsIHRydWUpKTtcbiAgfVxuXG4gIGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjb21wdXRlVmVsb2NpdHkoZSkge1xuICAgIGlmIChTcGxpZGUyLmlzKEwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInT09QKSB8fCAhZXhjZWVkZWQpIHtcbiAgICAgIHZhciB0aW1lID0gZGlmZlRpbWUoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgICBpZiAodGltZSAmJiB0aW1lIDwgTE9HX0lOVEVSVkFMKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgICByZXR1cm4gZGlmZkNvb3JkKGUpIC8gdGltZTtcbiAgICAgIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wdXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZURlc3RpbmF0aW9uKHZlbG9jaXR5KSB7XG4gICAgcmV0dXJuIGdldFBvc2l0aW9uKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpICsgc2lnbih2ZWxvY2l0eSkgKiBtaW4oYWJzKHZlbG9jaXR5KSAqIChvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5mbGlja1Bvd2VyIHx8IDYwMCksIGlzRnJlZSA/IEluZmluaXR5IDogQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLkxheW91dC5saXN0U2l6ZSgpICogKG9wdGlvbnMuZmxpY2tNYXhQYWdlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgMSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlmZkNvb3JkKGUsIG9ydGhvZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbmFsKSB7XG4gICAgcmV0dXJuIGNvb3JkT2YoZSwgb3J0aG9nb25hbCkgLSBjb29yJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RPZihnZXRCYXNlRXZlbnQoZSksIG9ydGhvZ29uYWwpO1xuICB9XG5cbiAgZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGRpZmZUaW1lKGUpIHtcbiAgICByZXR1cm4gdGltZU9mKGUpIC0gdGltZU8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZihnZXRCYXNlRXZlbnQoZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0QmFzZUUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudChlKSB7XG4gICAgcmV0dXJuIGJhc2VFdmVudCA9PT0gZSAmJiBwcmV2QmFzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFdmVudCB8fCBiYXNlRXZlbnQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb29yZE9mKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlLCBvcnRob2dvbmFsKSB7XG4gICAgcmV0dXJuIChpc1RvdWNoRXZlbnQoZSkgPyBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jaGFuZ2VkVG91Y2hlc1swXSA6IGUpWyJwYWdlIiArIHJlc29sdmUob3J0aG9nbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduYWwgPyAiWSIgOiAiWCIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnN0cmFpbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZGlmZikge1xuICAgIHJldHVybiBkaWZmIC8gKGV4Y2VlZGVkICYmIFNwbGlkZTIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzKFNMSURFKSA/IEZSSUNUSU9OIDogMSk7XG4gIH1cblxuICBmdW5jdGlvbiBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NEcmFnZ2FibGUodGFyZ2V0Mikge1xuICAgIHZhciBub0RyYWcgPSBvcHRpb25zLm4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb0RyYWc7XG4gICAgcmV0dXJuICFtYXRjaGVzKHRhcmdldDIsICIuIiArIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidQQUdJTkFUSU9OX1BBR0UgKyAiLCAuIiArIENMQVNTX0FSUk9XKSAmJiAoIW5vRHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWcgfHwgIW1hdGNoZXModGFyZ2V0Miwgbm9EcmFnKSk7XG4gIH1cblxuICBmdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gaXNUb3VjaEV2ZW50KGUpIHtcbiAgICByZXR1cm4gdHlwZW9mIFRvdWNoRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50ICE9PSAidW5kZWZpbmVkIiAmJiBlIGluc3RhbmNlb2YgVG91Y2hFdmVudDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIH1cblxuICBmdW5jdGlvbiBpc0RyYWdnaW5nKCkge1xuICAgIHJldHVybiBkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JhZ2dpbmc7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNhYmxlKHZhbHVlKSB7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGRpc2FibGVkID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDogbW91bnQsXG4gICAgZGlzYWJsZTogZGlzYWJsZSxcbiAgICBpc0RyYWdnaW5nOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNEcmFnZ2luZ1xuICB9O1xufVxuXG52YXIgTk9STUFMSVpBVElPTl9NQVAgPSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBTcGFjZWJhcjogIiAiLFxuICBSaWdodDogQVJST1dfUklHSFQsXG4gIExlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Z0OiBBUlJPV19MRUZULFxuICBVcDogQVJST1dfVVAsXG4gIERvd246IEFSUk9XX0RPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dOXG59O1xuXG5mdW5jdGlvbiBub3JtYWxpemVLZXkoa2V5KSB7XG4gIGtleSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc1N0cmluZyhrZXkpID8ga2V5IDoga2V5LmtleTtcbiAgcmV0dXJuIE5PUk1BTElaJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FUSU9OX01BUFtrZXldIHx8IGtleTtcbn1cblxudmFyIEtFWUJPQVJEX0VWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9ICJrZXlkb3duIjtcblxuZnVuY3Rpb24gS2V5Ym9hcmQoU3BsaWRlMiwgQ29tcG9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudHMyLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UxMCA9IEV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndEludGVyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwLm9uLFxuICAgICAgYmluZCA9IF9FdmVudEludGVyZmFjZTEwLmJpbmQsXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdW5iaW5kID0gX0V2ZW50SW50ZXJmYWNlMTAudW5iaW5kO1xuXG4gIHZhciByb290ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IFNwbGlkZTIucm9vdDtcbiAgdmFyIHJlc29sdmUgPSBDb21wb25lbnRzMi5EaXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uLnJlc29sdmU7XG4gIHZhciB0YXJnZXQ7XG4gIHZhciBkaXNhYmxlZDsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaW5pdCgpO1xuICAgIG9uKEVWJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VOVF9VUERBVEVELCBkZXN0cm95KTtcbiAgICBvbihFVkVOVF9VUERBVEVELCBpbmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCk7XG4gICAgb24oRVZFTlRfTU9WRSwgb25Nb3ZlKTtcbiAgfVxuXG4gIGZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBpbml0KCkge1xuICAgIHZhciBrZXlib2FyZCA9IG9wdGlvbnMua2V5Ym9hcmQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgaWYgKGtleWJvYXJkKSB7XG4gICAgICB0YXJnZXQgPSBrZXlib2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmQgPT09ICJnbG9iYWwiID8gd2luZG93IDogcm9vdDtcbiAgICAgIGJpbmQodGFyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldCwgS0VZQk9BUkRfRVZFTlQsIG9uS2V5ZG93bik7XG4gICAgfVxuICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgdW5iaW5kKHRhcmdldCwgS0VZQk9BUicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEX0VWRU5UKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FibGUodmFsdWUpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZGlzYWJsZWQgPSB2YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uTW92ZSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIF9kaXNhYmxlZCA9IGRpc2FibGVkO1xuICAgIGRpc2FibGVkID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRydWU7XG4gICAgbmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgZGlzYWJsZWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gX2Rpc2FibGVkO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25LZXlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293bihlKSB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgdmFyIGtleSA9IG5vJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JtYWxpemVLZXkoZSk7XG5cbiAgICAgIGlmIChrZXkgPT09IHJlc29sdmUoQVJST1dfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRlQpKSB7XG4gICAgICAgIFNwbGlkZTIuZ28oIjwiKTtcbiAgICAgIH0gZWxzZSBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19SSUdIVCkpIHtcbiAgICAgICAgU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIuZ28oIj4iKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBkaXNhYmwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTogZGlzYWJsZVxuICB9O1xufVxuXG52YXIgU1JDX0RBVEFfQVRUUklCVVRFID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RBVEFfQVRUUklCVVRFICsgIi1sYXp5IjtcbnZhciBTUkNTRVRfREFUQV9BVFRSSUInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInVVRFID0gU1JDX0RBVEFfQVRUUklCVVRFICsgIi1zcmNzZXQiO1xudmFyIElNQUdFXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTRUxFQ1RPUiA9ICJbIiArIFNSQ19EQVRBX0FUVFJJQlVURSArICJdLCBbIiArIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkNTRVRfREFUQV9BVFRSSUJVVEUgKyAiXSI7XG5cbmZ1bmN0aW9uIExhenlMb2FkKFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgX0V2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZTExID0gRXZlbnRJbnRlcmZhY2UoU3BsaWRlMiksXG4gICAgICBvbiA9IF9FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnRJbnRlcmZhY2UxMS5vbixcbiAgICAgIG9mZiA9IF9FdmVudEludGVyZmFjZTEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMS5vZmYsXG4gICAgICBiaW5kID0gX0V2ZW50SW50ZXJmYWNlMTEuYmluZCxcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBlbWl0ID0gX0V2ZW50SW50ZXJmYWNlMTEuZW1pdDtcblxuICB2YXIgaXNTZXF1ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlhbCA9IG9wdGlvbnMubGF6eUxvYWQgPT09ICJzZXF1ZW50aWFsIjtcbiAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldmVudHMgPSBbRVZFTlRfTU9WRUQsIEVWRU5UX1NDUk9MTEVEXTtcbiAgdmFyIGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWVzID0gW107XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgaWYgKG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zLmxhenlMb2FkKSB7XG4gICAgICBpbml0KCk7XG4gICAgICBvbihFVkVOVF9SJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VGUkVTSCwgaW5pdCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdCgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgZW1wdHkoZW50cmllcyk7XG4gICAgcmVnaXN0ZXIoKTtcblxuICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaXNTZXF1ZW50aWFsKSB7XG4gICAgICBsb2FkTmV4dCgpO1xuICAgIH0gZWxzZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgb2ZmKGV2ZW50cyk7XG4gICAgICBvbihldmVudHMsIGNoZWNrKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBjaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlZ2lzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlcigpIHtcbiAgICBDb21wb25lbnRzMi5TbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKFNsaWRlKSB7XG4gICAgICBxdWVyeUFsbChTbGlkZS5zbGlkZSwgSU1BR0VfU0VMRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDVE9SKS5mb3JFYWNoKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgdmFyIHNyYyA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRBdHRyaWJ1dGUoaW1nLCBTUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHNyY3NldCA9IGdldEF0dHJpYnV0ZShpbWcsIFNSQ1NFVF9EQVRBX0FUVFJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JVVEUpO1xuXG4gICAgICAgIGlmIChzcmMgIT09IGltZy5zcmMgfHwgc3Jjc2V0ICE9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gaW1nLnNyY3NldCkge1xuICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBvcHRpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5jbGFzc2VzLnNwaW5uZXI7XG4gICAgICAgICAgdmFyIHBhcmVudCA9IGltZy5wYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50RWxlbWVudDtcbiAgICAgICAgICB2YXIgc3Bpbm5lciA9IGNoaWxkKHBhcmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsICIuIiArIGNsYXNzTmFtZSkgfHwgY3JlYXRlKCJzcGFuIiwgY2xhc3NOYW1lLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyZW50KTtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2ltZywgU2xpZGUsIHNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lubmVyXSk7XG4gICAgICAgICAgaW1nLnNyYyB8fCBkaXNwbGF5KGltZywgIm5vbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGNoZWNrKCkge1xuICAgIGVudHJpZXMgPSBlbnRyaWVzLmZpbHRlcihmdW5jdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpb24gKGRhdGEpIHtcbiAgICAgIHZhciBkaXN0YW5jZSA9IG9wdGlvbnMucGVyUGFnJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgKiAoKG9wdGlvbnMucHJlbG9hZFBhZ2VzIHx8IDEpICsgMSkgLSAxO1xuICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBkYXRhWzFdLmlzV2l0aGluKFNwbGlkZTIuaW5kZXgsIGRpc3RhbmNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgPyBsb2FkKGRhdGEpIDogdHJ1ZTtcbiAgICB9KTtcbiAgICBlbnRyaWVzLmxlbmd0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ggfHwgb2ZmKGV2ZW50cyk7XG4gIH1cblxuICBmdW5jdGlvbiBsb2FkKGRhdGEpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIGltZyA9IGRhdGFbMF07XG4gICAgYWRkQ2xhc3MoZGF0YVsxXS5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGUsIENMQVNTX0xPQURJTkcpO1xuICAgIGJpbmQoaW1nLCAibG9hZCBlcnJvciInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBhcHBseShvbkxvYWQsIGRhdGEpKTtcbiAgICBzZXRBdHRyaWJ1dGUoaW1nLCAicycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYyIsIGdldEF0dHJpYnV0ZShpbWcsIFNSQ19EQVRBX0FUVFJJQlVURSkpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBzZXRBdHRyaWJ1dGUoaW1nLCAic3Jjc2V0IiwgZ2V0QXR0cmlidXRlKGltZywgUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidSQ1NFVF9EQVRBX0FUVFJJQlVURSkpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZShpbWcsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBTUkNfREFUQV9BVFRSSUJVVEUpO1xuICAgIHJlbW92ZUF0dHJpYnV0ZShpbWcsIFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUkNTRVRfREFUQV9BVFRSSUJVVEUpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Mb2EnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZChkYXRhLCBlKSB7XG4gICAgdmFyIGltZyA9IGRhdGFbMF0sXG4gICAgICAgIFNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSA9IGRhdGFbMV07XG4gICAgcmVtb3ZlQ2xhc3MoU2xpZGUuc2xpZGUsIENMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMT0FESU5HKTtcblxuICAgIGlmIChlLnR5cGUgIT09ICJlcnJvciIpIHtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZW1vdmUoZGF0YVsyXSk7XG4gICAgICBkaXNwbGF5KGltZywgIiIpO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIGVtaXQoRVZFTlRfTEFaWUxPQURfTE9BREVELCBpbWcsIFNsaWRlKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBlbWl0KEVWRU5UX1JFU0laRSk7XG4gICAgfVxuXG4gICAgaXNTZXF1ZW50aWFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAmJiBsb2FkTmV4dCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbG9hZE5leHQoKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGVudHJpZXMubGVuZ3RoICYmIGxvYWQoZW50cmllcy5zaGlmdCgpKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBkZXN0cm95OicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXBwbHkoZW1wdHksIGVudHJpZXMpLFxuICAgIGNoZWNrOiBjaGVja1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gUGFnaW5hdGlvbihTcGxpZGUyLCBDb21wb25lbnRzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzIsIG9wdGlvbnMpIHtcbiAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2UoU3BsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZTIpO1xuICB2YXIgb24gPSBldmVudC5vbixcbiAgICAgIGVtaXQgPSBldmVudC5lbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCxcbiAgICAgIGJpbmQgPSBldmVudC5iaW5kO1xuICB2YXIgU2xpZGVzID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLlNsaWRlcyxcbiAgICAgIEVsZW1lbnRzID0gQ29tcG9uZW50czIuRWxlbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbnRzLFxuICAgICAgQ29udHJvbGxlciA9IENvbXBvbmVudHMyLkNvbnRyb2xsZXI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB2YXIgaGFzRm9jdXMgPSBDb250cm9sbGVyLmhhc0ZvY3VzLFxuICAgICAgZ2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0luZGV4ID0gQ29udHJvbGxlci5nZXRJbmRleCxcbiAgICAgIGdvID0gQ29udHJvbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXIuZ287XG4gIHZhciByZXNvbHZlID0gQ29tcG9uZW50czIuRGlyZWN0aW9uLnJlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbHZlO1xuICB2YXIgcGxhY2Vob2xkZXIgPSBFbGVtZW50cy5wYWdpbmF0aW9uO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdmFyIGl0ZW1zID0gW107XG4gIHZhciBsaXN0O1xuICB2YXIgcGFnaW5hdGlvbkNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGRlc3Ryb3koKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgb24oW0VWRU5UX1VQREFURUQsIEVWRU5UX1JFRlJFU0gsIEVWRU5UX0VORF9JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05ERVhfQ0hBTkdFRF0sIG1vdW50KTtcbiAgICB2YXIgZW5hYmxlZCA9IG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnBhZ2luYXRpb247XG4gICAgcGxhY2Vob2xkZXIgJiYgZGlzcGxheShwbGFjZWhvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXIsIGVuYWJsZWQgPyAiIiA6ICJub25lIik7XG5cbiAgICBpZiAoZW5hYmxlZCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9uKFtFVkVOVF9NT1ZFLCBFVkVOVF9TQ1JPTEwsIEVWRU5UX1NDUk9MJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFRF0sIHVwZGF0ZSk7XG4gICAgICBjcmVhdGVQYWdpbmF0aW9uKCk7XG4gICAgICB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BkYXRlKCk7XG4gICAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCwge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgbGlzdDogbGlzdCxcbiAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgZ2V0QXQoU3BsaWRlMi5pbmRleCkpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBkZXN0cm95KCkge1xuICAgIGlmIChsaXN0KSB7XG4gICAgICByZW1vdmUocGxhYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlaG9sZGVyID8gc2xpY2UobGlzdC5jaGlsZHJlbikgOiBsaXN0KTtcbiAgICAgIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVDbGFzcyhsaXN0LCBwYWdpbmF0aW9uQ2xhc3Nlcyk7XG4gICAgICBlbXB0eSgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXRlbXMpO1xuICAgICAgbGlzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgZXZlbnQuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Rlc3Ryb3koKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVBhZ2luYXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIHZhciBsZW5ndGggPSBTcGxpZGUyLmxlbmd0aDtcbiAgICB2YXIgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMgPSBvcHRpb25zLmNsYXNzZXMsXG4gICAgICAgIGkxOG4gPSBvcHRpb25zLmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMThuLFxuICAgICAgICBwZXJQYWdlID0gb3B0aW9ucy5wZXJQYWdlO1xuICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWF4ID0gaGFzRm9jdXMoKSA/IENvbnRyb2xsZXIuZ2V0RW5kKCkgKyAxIDogY2VpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wobGVuZ3RoIC8gcGVyUGFnZSk7XG4gICAgbGlzdCA9IHBsYWNlaG9sZGVyIHx8IGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmVhdGUoInVsIiwgY2xhc3Nlcy5wYWdpbmF0aW9uLCBFbGVtZW50cy50cmFjay5wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50RWxlbWVudCk7XG4gICAgYWRkQ2xhc3MobGlzdCwgcGFnaW5hdGlvbkNsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VzID0gQ0xBU1NfUEFHSU5BVElPTiArICItLSIgKyBnZXREaXJlY3Rpb24oKSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHNldEF0dHJpYnV0ZShsaXN0LCBST0xFLCAidGFibGlzdCIpO1xuICAgIHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RBdHRyaWJ1dGUobGlzdCwgQVJJQV9MQUJFTCwgaTE4bi5zZWxlY3QpO1xuICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUobGlzdCwgQVJJQV9PUklFTlRBVElPTiwgZ2V0RGlyZWN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuXG4gICAgZm9yICh2YXIgaSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAwOyBpIDwgbWF4OyBpKyspIHtcbiAgICAgIHZhciBsaSA9IGNyZWF0ZSgibGkiLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVsbCwgbGlzdCk7XG4gICAgICB2YXIgYnV0dG9uID0gY3JlYXRlKCJidXR0b24iLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgICBjbGFzczogY2xhc3Nlcy5wYWdlLFxuICAgICAgICB0eXBlOiAiYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1dHRvbiJcbiAgICAgIH0sIGxpKTtcbiAgICAgIHZhciBjb250cm9scyA9IFNsaWRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuZ2V0SW4oaSkubWFwKGZ1bmN0aW9uIChTbGlkZSkge1xuICAgICAgICByZXR1cm4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NsaWRlLnNsaWRlLmlkO1xuICAgICAgfSk7XG4gICAgICB2YXIgdGV4dCA9ICFoYXNGJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMoKSAmJiBwZXJQYWdlID4gMSA/IGkxOG4ucGFnZVggOiBpMThuLnNsaWRlWCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBiaW5kKGJ1dHRvbiwgImNsaWNrIiwgYXBwbHkob25DbGljaywgaSkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblxuICAgICAgaWYgKG9wdGlvbnMucGFnaW5hdGlvbktleWJvYXJkKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBiaW5kKGJ1dHRvbiwgImtleWRvd24iLCBhcHBseShvbktleWRvd24sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpKSk7XG4gICAgICB9XG5cbiAgICAgIHNldEF0dHJpYnV0ZShsaSwgUk9MRSwgIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcmVzZW50YXRpb24iKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0b24sIFJPTEUsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAidGFiIik7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBBUklBX0NPTlRST0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUywgY29udHJvbHMuam9pbigiICIpKTtcbiAgICAgIHNldEF0dHJpYnV0ZShidXR0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduLCBBUklBX0xBQkVMLCBmb3JtYXQodGV4dCwgaSArIDEpKTtcbiAgICAgIHNldEF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUoYnV0dG9uLCBUQUJfSU5ERVgsIC0xKTtcbiAgICAgIGl0ZW1zLnB1c2gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHtcbiAgICAgICAgbGk6IGxpLFxuICAgICAgICBidXR0b246IGJ1dHRvbixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHBhZ2U6IGlcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBvbkNsaWNrKHBhZ2UpIHtcbiAgICBnbygiPiIgKyBwYWdlLCB0cnVlKTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuICBmdW5jdGlvbiBvbktleWRvd24ocGFnZSwgZSkge1xuICAgIHZhciBsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZ3RoID0gaXRlbXMubGVuZ3RoO1xuICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXkoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UpO1xuICAgIHZhciBkaXIgPSBnZXREaXJlY3Rpb24oKTtcbiAgICB2YXIgbmV4dFBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlID0gLTE7XG5cbiAgICBpZiAoa2V5ID09PSByZXNvbHZlKEFSUk9XX1JJR0hULCBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fsc2UsIGRpcikpIHtcbiAgICAgIG5leHRQYWdlID0gKytwYWdlICUgbGVuZ3RoO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9IGVsc2UgaWYgKGtleSA9PT0gcmVzb2x2ZShBUlJPV19MRUZULCBmYWxzZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIGRpcikpIHtcbiAgICAgIG5leHRQYWdlID0gKC0tcGFnZSArIGxlbmd0aCkgJSBsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VuZ3RoO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAiSG9tZSIpIHtcbiAgICAgIG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3h0UGFnZSA9IDA7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICJFbmQiKSB7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgbmV4dFBhZ2UgPSBsZW5ndGggLSAxO1xuICAgIH1cblxuICAgIHZhciBpdGVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGl0ZW1zW25leHRQYWdlXTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29jdXMoaXRlbS5idXR0b24pO1xuICAgICAgZ28oIj4iICsgbmV4dFBhZ2UpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHByZXZlbnQoZSwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldERpcmVjdGlvbigpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5wYWdpbmF0aW9uRGlyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdGlvbiB8fCBvcHRpb25zLmRpcmVjdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBnZXRBdChpbmRleCkge1xuICAgIHJldHVybiBpdGVtc1tDb250cm9sbGVyLnRvUGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2UoaW5kZXgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICB2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyIHByZXYgPSBnZXRBdChnZXRJbmRleCh0cnVlKSk7XG4gICAgdmFyIGN1cnIgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0QXQoZ2V0SW5kZXgoKSk7XG5cbiAgICBpZiAocHJldikge1xuICAgICAgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciBidXR0b24gPSBwcmV2LmJ1dHRvbjtcbiAgICAgIHJlbW92ZUNsYXNzKGJ1dHRvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIENMQVNTX0FDVElWRSk7XG4gICAgICByZW1vdmVBdHRyaWJ1dGUoYnV0dG9uLCBBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JJQV9TRUxFQ1RFRCk7XG4gICAgICBzZXRBdHRyaWJ1dGUoYnV0dG9uLCBUQUJfSU4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInREVYLCAtMSk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnIpIHtcbiAgICAgIHZhciBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1dHRvbiA9IGN1cnIuYnV0dG9uO1xuICAgICAgYWRkQ2xhc3MoX2J1dHRvbiwgQ0wnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVNTX0FDVElWRSk7XG4gICAgICBzZXRBdHRyaWJ1dGUoX2J1dHRvbiwgQVJJQV9TRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidMRUNURUQsIHRydWUpO1xuICAgICAgc2V0QXR0cmlidXRlKF9idXR0b24sIFRBQl9JJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05ERVgsICIiKTtcbiAgICB9XG5cbiAgICBlbWl0KEVWRU5UX1BBR0lOQVRJT05fJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VQREFURUQsIHtcbiAgICAgIGxpc3Q6IGxpc3QsXG4gICAgICBpdGVtczogaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW1zXG4gICAgfSwgcHJldiwgY3Vycik7XG4gIH1cblxuICByZXR1cm4ge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVtczogaXRlbXMsXG4gICAgbW91bnQ6IG1vdW50LFxuICAgIGRlc3Ryb3k6IGRlcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cm95LFxuICAgIGdldEF0OiBnZXRBdCxcbiAgICB1cGRhdGU6IHVwZGF0ZVxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfTtcbn1cblxudmFyIFRSSUdHRVJfS0VZUyA9IFsiICIsICJFbnRlciJdO1xuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gU3luYyhTcGxpZGUyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIGlzTmF2aWdhdGlvbiA9IG9wdGlvbnMuaXNOYXZpZ2F0aW9uLFxuICAgICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsaWRlRm9jdXMgPSBvcHRpb25zLnNsaWRlRm9jdXM7XG4gIHZhciBldmVudHMgPSBbJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ107XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgU3BsaWRlMi5zcGxpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5mb3JFYWNoKGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgIGlmICghdGFyZ2V0LmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc1BhcmVudCkge1xuICAgICAgICBzeW5jKFNwbGlkZTIsIHRhcmdldC5zcGxpZGUpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgc3luYyh0YXJnZXQuc3BsaWRlLCBTcGxpZGUyKTtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYXZpZ2F0aW9uKSB7XG4gICAgICBuYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2aWdhdGUoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5kZXN0cm95KCk7XG4gICAgfSk7XG4gICAgZW1wdHkoZXZlbnRzKTtcbiAgfVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmdW5jdGlvbiByZW1vdW50KCkge1xuICAgIGRlc3Ryb3koKTtcbiAgICBtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN5bmMoc3BsaWRlLCB0YXJnZXQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdmFyIGV2ZW50ID0gRXZlbnRJbnRlcmZhY2Uoc3BsaWRlKTtcbiAgICBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZlbnQub24oRVZFTlRfTU9WRSwgZnVuY3Rpb24gKGluZGV4LCBwcmV2LCBkZXN0KScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICAgICAgdGFyZ2V0LmdvKHRhcmdldC5pcyhMT09QKSA/IGRlc3QgOiBpbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3gpO1xuICAgIH0pO1xuICAgIGV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgfVxuXG4gIGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBuYXZpZ2F0ZSgpIHtcbiAgICB2YXIgZXZlbnQgPSBFdmVudEludGVyZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2UoU3BsaWRlMik7XG4gICAgdmFyIG9uID0gZXZlbnQub247XG4gICAgb24oRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUX0NMSUNLLCBvbkNsaWNrKTtcbiAgICBvbihFVkVOVF9TTElERV9LRVlET1dOLCBvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25LZXlkb3duKTtcbiAgICBvbihbRVZFTlRfTU9VTlRFRCwgRVZFTlRfVVBEQVRFRF0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCB1cGRhdGUpO1xuICAgIGV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgICBldmVudC5lbWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChFVkVOVF9OQVZJR0FUSU9OX01PVU5URUQsIFNwbGlkZTIuc3BsaWRlcyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gdXBkYXRlKCkge1xuICAgIHNldEF0dHJpYnV0ZShDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcG9uZW50czIuRWxlbWVudHMubGlzdCwgQVJJQV9PUklFTlRBVElPTiwgb3B0aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnMuZGlyZWN0aW9uID09PSBUVEIgPyAidmVydGljYWwiIDogIiIpO1xuICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIGZ1bmN0aW9uIG9uQ2xpY2soU2xpZGUpIHtcbiAgICBTcGxpZGUyLmdvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhTbGlkZS5pbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbktleWRvd24oU2xpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLCBlKSB7XG4gICAgaWYgKGluY2x1ZGVzKFRSSUdHRVJfS0VZUywgbm9ybWFsaXonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZUtleShlKSkpIHtcbiAgICAgIG9uQ2xpY2soU2xpZGUpO1xuICAgICAgcHJldmVudCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZXR1cDogYXBwbHkoQycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbXBvbmVudHMyLk1lZGlhLnNldCwge1xuICAgICAgc2xpZGVGb2N1czogaXNVbmRlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ZpbmVkKHNsaWRlRm9jdXMpID8gaXNOYXZpZ2F0aW9uIDogc2xpZGVGb2N1c1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB9LCB0cnVlKSxcbiAgICBtb3VudDogbW91bnQsXG4gICAgZGVzdHJveTogZGVzdHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3ksXG4gICAgcmVtb3VudDogcmVtb3VudFxuICB9O1xufVxuXG5mdW5jdGlvbiBXaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZWwoU3BsaWRlMiwgQ29tcG9uZW50czIsIG9wdGlvbnMpIHtcbiAgdmFyIF9FdmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UxMiA9IEV2ZW50SW50ZXJmYWNlKFNwbGlkZTIpLFxuICAgICAgYmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmQgPSBfRXZlbnRJbnRlcmZhY2UxMi5iaW5kO1xuXG4gIHZhciBsYXN0VGltZSA9IDAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gIGZ1bmN0aW9uIG1vdW50KCkge1xuICAgIGlmIChvcHRpb25zLndoZWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCkge1xuICAgICAgYmluZChDb21wb25lbnRzMi5FbGVtZW50cy50cmFjaywgIndoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbCIsIG9uV2hlZWwsIFNDUk9MTF9MSVNURU5FUl9PUFRJT05TKTtcbiAgICB9XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbiAgZnVuY3Rpb24gb25XaGVlbChlKSB7XG4gICAgaWYgKGUuY2FuY2VsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidibGUpIHtcbiAgICAgIHZhciBkZWx0YVkgPSBlLmRlbHRhWTtcbiAgICAgIHZhciBiYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidja3dhcmRzID0gZGVsdGFZIDwgMDtcbiAgICAgIHZhciB0aW1lU3RhbXAgPSB0aW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09mKGUpO1xuXG4gICAgICB2YXIgX21pbiA9IG9wdGlvbnMud2hlZWxNaW5UaHJlc2hvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xkIHx8IDA7XG5cbiAgICAgIHZhciBzbGVlcCA9IG9wdGlvbnMud2hlZWxTbGVlcCB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgMDtcblxuICAgICAgaWYgKGFicyhkZWx0YVkpID4gX21pbiAmJiB0aW1lU3RhbXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy0gbGFzdFRpbWUgPiBzbGVlcCkge1xuICAgICAgICBTcGxpZGUyLmdvKGJhY2t3YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZHMgPyAiPCIgOiAiPiIpO1xuICAgICAgICBsYXN0VGltZSA9IHRpbWVTdGFtcDtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICB9XG5cbiAgICAgIHNob3VsZFByZXZlbnQoYmFja3dhcmRzKSAmJiBwcmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndChlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzaG91bGRQcmV2ZW50KGJhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nrd2FyZHMpIHtcbiAgICByZXR1cm4gIW9wdGlvbnMucmVsZWFzZVdoZWVsIHx8IFMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUyLnN0YXRlLmlzKE1PVklORykgfHwgQ29tcG9uZW50czIuQ29udHJvbGxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3IuZ2V0QWRqYWNlbnQoYmFja3dhcmRzKSAhPT0gLTE7XG4gIH1cblxuICByZXR1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JuIHtcbiAgICBtb3VudDogbW91bnRcbiAgfTtcbn1cblxudmFyIFNSX1JFTU9WQUwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0RFTEFZID0gOTA7XG5cbmZ1bmN0aW9uIExpdmUoU3BsaWRlMiwgQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBvcHRpb25zKSB7XG4gIHZhciBfRXZlbnRJbnRlcmZhY2UxMyA9IEV2ZW50SW50ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyZmFjZShTcGxpZGUyKSxcbiAgICAgIG9uID0gX0V2ZW50SW50ZXJmYWNlMTMub247JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gIHZhciB0cmFjayA9IENvbXBvbmVudHMyLkVsZW1lbnRzLnRyYWNrO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgdmFyIGVuYWJsZWQgPSBvcHRpb25zLmxpdmUgJiYgIW9wdGlvbnMuaXNOYXZpZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhdGlvbjtcbiAgdmFyIHNyID0gY3JlYXRlKCJzcGFuIiwgQ0xBU1NfU1IpO1xuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIGludGVydmFsID0gUmVxdWVzdEludGVydmFsKFNSX1JFTU9WQUxfREVMQVksIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBseSh0b2dnbGUsIGZhbHNlKSk7XG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBkaXNhYmxlKCFDb21wb25lbnRzMi5BdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0b3BsYXkuaXNQYXVzZWQoKSk7XG4gICAgICBzZXRBdHRyaWJ1dGUodHJhY2ssIEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX0FUT01JQywgdHJ1ZSk7XG4gICAgICBzci50ZXh0Q29udGVudCA9ICJcXHUyMDI2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gICAgICBvbihFVkVOVF9BVVRPUExBWV9QTEFZLCBhcHBseShkaXNhYmxlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHJ1ZSkpO1xuICAgICAgb24oRVZFTlRfQVVUT1BMQVlfUEFVU0UsIGFwcGx5KGRpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhYmxlLCBmYWxzZSkpO1xuICAgICAgb24oW0VWRU5UX01PVkVELCBFVkVOVF9TQ1JPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xMRURdLCBhcHBseSh0b2dnbGUsIHRydWUpKTtcbiAgICB9XG4gIH1cblxuICBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gdG9nZ2xlKGFjdGl2ZSkge1xuICAgIHNldEF0dHJpYnV0ZSh0cmFjaywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FSSUFfQlVTWSwgYWN0aXZlKTtcblxuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhcHBlbmQodHJhY2ssIHNyKTtcbiAgICAgIGludGVydmFsLnN0YXJ0KCk7XG4gICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30gZWxzZSB7XG4gICAgICByZW1vdmUoc3IpO1xuICAgICAgaW50ZXJ2YWwuY2FuY2VsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW92ZUF0dHJpYnV0ZSh0cmFjaywgW0FSSUFfTElWRSwgQVJJQV9BVE9NSUMsIEFSJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0lBX0JVU1ldKTtcbiAgICByZW1vdmUoc3IpO1xuICB9XG5cbiAgZnVuY3Rpb24gZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc2FibGUoZGlzYWJsZWQpIHtcbiAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgc2V0QScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZSh0cmFjaywgQVJJQV9MSVZFLCBkaXNhYmxlZCA/ICJvZmYiIDogInAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb2xpdGUiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bnQsXG4gICAgZGlzYWJsZTogZGlzYWJsZSxcbiAgICBkZXN0cm95OiBkZXN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JveVxuICB9O1xufVxuXG52YXIgQ29tcG9uZW50Q29uc3RydWN0b3JzID0gLyojXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBNZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkaWE6IE1lZGlhLFxuICBEaXJlY3Rpb246IERpcmVjdGlvbixcbiAgRWxlbWVudHM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFbGVtZW50cyxcbiAgU2xpZGVzOiBTbGlkZXMsXG4gIExheW91dDogTGF5b3V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgQ2xvbmVzOiBDbG9uZXMsXG4gIE1vdmU6IE1vdmUsXG4gIENvbnRyb2xsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyOiBDb250cm9sbGVyLFxuICBBcnJvd3M6IEFycm93cyxcbiAgQXV0b3BsYXk6IEF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvcGxheSxcbiAgQ292ZXI6IENvdmVyLFxuICBTY3JvbGw6IFNjcm9sbCxcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0RyYWc6IERyYWcsXG4gIEtleWJvYXJkOiBLZXlib2FyZCxcbiAgTGF6eUxvYWQ6IExhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3p5TG9hZCxcbiAgUGFnaW5hdGlvbjogUGFnaW5hdGlvbixcbiAgU3luYzogU3knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmMsXG4gIFdoZWVsOiBXaGVlbCxcbiAgTGl2ZTogTGl2ZVxufSk7XG52YXIgSTE4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ04gPSB7XG4gIHByZXY6ICJQcmV2aW91cyBzbGlkZSIsXG4gIG5leHQ6ICJOZXh0IHNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkZSIsXG4gIGZpcnN0OiAiR28gdG8gZmlyc3Qgc2xpZGUiLFxuICBsYXN0OiAiR28gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvIGxhc3Qgc2xpZGUiLFxuICBzbGlkZVg6ICJHbyB0byBzbGlkZSAlcyIsXG4gIHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dlWDogIkdvIHRvIHBhZ2UgJXMiLFxuICBwbGF5OiAiU3RhcnQgYXV0b3BsYXkiLFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgcGF1c2U6ICJQYXVzZSBhdXRvcGxheSIsXG4gIGNhcm91c2VsOiAiY2Fyb3VzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIixcbiAgc2xpZGU6ICJzbGlkZSIsXG4gIHNlbGVjdDogIlNlbGVjdCBhIHNsaWRlIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbyBzaG93IixcbiAgc2xpZGVMYWJlbDogIiVzIG9mICVzIlxufTtcbnZhciBERUYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVVMVFMgPSB7XG4gIHR5cGU6ICJzbGlkZSIsXG4gIHJvbGU6ICJyZWdpb24iLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgc3BlZWQ6IDQwMCxcbiAgcGVyUGFnZTogMSxcbiAgY2xvbmVTdGF0dXM6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlLFxuICBhcnJvd3M6IHRydWUsXG4gIHBhZ2luYXRpb246IHRydWUsXG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwYWdpbmF0aW9uS2V5Ym9hcmQ6IHRydWUsXG4gIGludGVydmFsOiA1ZTMsXG4gIHBhdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZU9uSG92ZXI6IHRydWUsXG4gIHBhdXNlT25Gb2N1czogdHJ1ZSxcbiAgcmVzZXRQcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZ3Jlc3M6IHRydWUsXG4gIGVhc2luZzogImN1YmljLWJlemllcigwLjI1LCAxLCAwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy41LCAxKSIsXG4gIGRyYWc6IHRydWUsXG4gIGRpcmVjdGlvbjogImx0ciIsXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmltU3BhY2U6IHRydWUsXG4gIGZvY3VzYWJsZU5vZGVzOiAiYSwgYnV0dG9uLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGV4dGFyZWEsIGlucHV0LCBzZWxlY3QsIGlmcmFtZSIsXG4gIGxpdmU6IHRydWUsXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBjbGFzc2VzOiBDTEFTU0VTLFxuICBpMThuOiBJMThOLFxuICByZWR1Y2VkTW90aW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbjoge1xuICAgIHNwZWVkOiAwLFxuICAgIHJld2luZFNwZWVkOiAwLFxuICAgIGEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXRvcGxheTogInBhdXNlIlxuICB9XG59O1xuXG5mdW5jdGlvbiBGYWRlKFNwbGlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UyLCBDb21wb25lbnRzMiwgb3B0aW9ucykge1xuICB2YXIgU2xpZGVzID0gQ29tcG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmVudHMyLlNsaWRlcztcblxuICBmdW5jdGlvbiBtb3VudCgpIHtcbiAgICBFdmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRJbnRlcmZhY2UoU3BsaWRlMikub24oW0VWRU5UX01PVU5URUQsIEVWRU5UX1JFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0ZSRVNIXSwgaW5pdCk7XG4gIH1cblxuICBmdW5jdGlvbiBpbml0KCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTbGlkZXMuZm9yRWFjaChmdW5jdGlvbiAoU2xpZGUpIHtcbiAgICAgIFNsaWRlLnN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZSgidHJhbnNmb3JtIiwgInRyYW5zbGF0ZVgoLSIgKyAxMDAgKiBTbGlkZS5pbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZXggKyAiJSkiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHN0YXJ0KGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmRleCwgZG9uZSkge1xuICAgIFNsaWRlcy5zdHlsZSgidHJhbnNpdGlvbiIsICJvcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhY2l0eSAiICsgb3B0aW9ucy5zcGVlZCArICJtcyAiICsgb3B0aW9ucy5lYXNpbmcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbiAgICBuZXh0VGljayhkb25lKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvdW50OiBtb3VudCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgY2FuY2VsOiBuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29vcFxuICB9O1xufVxuXG5mdW5jdGlvbiBTbGlkZShTcGxpZGUyLCBDb21wb25lbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0czIsIG9wdGlvbnMpIHtcbiAgdmFyIE1vdmUgPSBDb21wb25lbnRzMi5Nb3ZlLFxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgIENvbnRyb2xsZXIgPSBDb21wb25lbnRzMi5Db250cm9sbGVyLFxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1Njcm9sbCA9IENvbXBvbmVudHMyLlNjcm9sbDtcbiAgdmFyIGxpc3QgPSBDb21wb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50czIuRWxlbWVudHMubGlzdDtcbiAgdmFyIHRyYW5zaXRpb24gPSBhcHBseShzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUsIGxpc3QsICJ0cmFuc2l0aW9uIik7XG4gIHZhciBlbmRDYWxsYmFjazsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgZnVuY3Rpb24gbW91bnQoKSB7XG4gICAgRXZlbnRJbnRlcmZhY2UoU3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZTIpLmJpbmQobGlzdCwgInRyYW5zaXRpb25lbmQiLCBmdW5jdGlvbiAoZSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgIGlmIChlLnRhcmdldCA9PT0gbGlzdCAmJiBlbmRDYWxsYmFjaykge1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICAgY2FuY2VsKCk7XG4gICAgICAgIGVuZENhbGxiYWNrKCk7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoaW5kZXgsIGRvbmUpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gTW92ZS50b1Bvc2l0aW9uKGluZGV4LCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZSk7XG4gICAgdmFyIHBvc2l0aW9uID0gTW92ZS5nZXRQb3NpdGlvbigpO1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YXIgc3BlZWQgPSBnZXRTcGVlZChpbmRleCk7XG5cbiAgICBpZiAoYWJzKGRlc3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25hdGlvbiAtIHBvc2l0aW9uKSA+PSAxICYmIHNwZWVkID49IDEpIHtcbiAgICAgIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAob3B0aW9ucy51c2VTY3JvbGwpIHtcbiAgICAgICAgU2Nyb2xsLnNjcm9sbChkZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdGluYXRpb24sIHNwZWVkLCBmYWxzZSwgZG9uZSk7XG4gICAgICB9IGVsc2Uge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgdHJhbnNpdGlvbigidHJhbnNmb3JtICIgKyBzcGVlZCArICJtcyAiICsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9wdGlvbnMuZWFzaW5nKTtcbiAgICAgICAgTW92ZS50cmFuc2xhdGUoZGVzdGluYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aW9uLCB0cnVlKTtcbiAgICAgICAgZW5kQ2FsbGJhY2sgPSBkb25lO1xuICAgICAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9IGVsc2Uge1xuICAgICAgTW92ZS5qdW1wKGluZGV4KTtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkb25lKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB0cmFuc2l0aW9uKCIiKTtcbiAgICBTY3JvbGwuY2FuY2VsKCk7XG4gIH1cblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gZ2V0U3BlZWQoaW5kZXgpIHtcbiAgICB2YXIgcmV3aW5kU3BlZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gb3B0aW9ucy5yZXdpbmRTcGVlZDtcblxuICAgIGlmIChTcGxpZGUyLmlzKFNMSURFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykgJiYgcmV3aW5kU3BlZWQpIHtcbiAgICAgIHZhciBwcmV2ID0gQ29udHJvbGxlci4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2V0SW5kZXgodHJ1ZSk7XG4gICAgICB2YXIgZW5kID0gQ29udHJvbGxlci5nZXRFbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkKCk7XG5cbiAgICAgIGlmIChwcmV2ID09PSAwICYmIGluZGV4ID49IGVuZCB8fCBwcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidldiA+PSBlbmQgJiYgaW5kZXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJld2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RTcGVlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5zcCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vdW50OiBtb3VudCxcbiAgICBzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RhcnQ6IHN0YXJ0LFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59XG5cbnZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX1NwbGlkZSA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfU3BsaWRlKHRhcmdldCwgb3B0aW9ucykge1xuICAgIHRoaXMuZXZlbnQgPSBFdmVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RJbnRlcmZhY2UoKTtcbiAgICB0aGlzLkNvbXBvbmVudHMgPSB7fTtcbiAgICB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zdGF0ZSA9IFN0YXRlKENSRUFURUQpO1xuICAgIHRoaXMuc3BsaWRlcyA9IFtdO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB0aGlzLl9vID0ge307XG4gICAgdGhpcy5fRSA9IHt9O1xuICAgIHZhciByb290JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGlzU3RyaW5nKHRhcmdldCkgPyBxdWVyeShkb2N1bWVudCwgdGFyZ2V0KSA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0YXJnZXQ7XG4gICAgYXNzZXJ0KHJvb3QsIHJvb3QgKyAiIGlzIGludmFsaWQuIik7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgb3B0aW9ucyA9IG1lcmdlKHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICBsYWJlbDogZ2V0QXR0cmlidXRlKHJvb3QsIEFSSUFfTEFCRUwpIHx8ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIixcbiAgICAgIGxhYmVsbGVkYnk6IGdldEF0dHJpYnV0ZShyb290LCBBUklBX0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0JFTExFREJZKSB8fCAiIlxuICAgIH0sIERFRkFVTFRTLCBfU3BsaWRlLmRlZmF1bHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncywgb3B0aW9ucyB8fCB7fSk7XG5cbiAgICB0cnkge1xuICAgICAgbWVyZ2Uob3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbnMsIEpTT04ucGFyc2UoZ2V0QXR0cmlidXRlKHJvb3QsIERBVEFfQVRUUklCJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VURSkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhc3NlcnQoZmFsc2UsICJJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ252YWxpZCBKU09OIik7XG4gICAgfVxuXG4gICAgdGhpcy5fbyA9IE9iamVjdC5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYXRlKG1lcmdlKHt9LCBvcHRpb25zKSk7XG4gIH1cblxuICB2YXIgX3Byb3RvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IF9TcGxpZGUucHJvdG90eXBlO1xuXG4gIF9wcm90by5tb3VudCA9IGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtb3VudChFeHRlbnNpb25zLCBUcmFuc2l0aW9uKSB7XG4gICAgdmFyIF90aGlzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXM7XG5cbiAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50czIgPSB0aGlzLkNvbXBvbmVudHM7XG4gICAgYXNzZXJ0KHN0YXRlLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcyhbQ1JFQVRFRCwgREVTVFJPWUVEXSksICJBbHJlYWR5IG1vdW50ZWQhIik7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHN0YXRlLnNldChDUkVBVEVEKTtcbiAgICB0aGlzLl9DID0gQ29tcG9uZW50czInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICAgIHRoaXMuX1QgPSBUcmFuc2l0aW9uIHx8IHRoaXMuX1QgfHwgKHRoaXMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKEZBREUpID8gRmFkZSA6IFNsaWRlKTtcbiAgICB0aGlzLl9FID0gRXh0ZW5zaW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgfHwgdGhpcy5fRTtcbiAgICB2YXIgQ29uc3RydWN0b3JzID0gYXNzaWduKHt9LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ29tcG9uZW50Q29uc3RydWN0b3JzLCB0aGlzLl9FLCB7XG4gICAgICBUcmFuc2l0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbjogdGhpcy5fVFxuICAgIH0pO1xuICAgIGZvck93bihDb25zdHJ1Y3RvcnMsIGZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiAoQ29tcG9uZW50LCBrZXkpIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBDJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29tcG9uZW50KF90aGlzLCBDb21wb25lbnRzMiwgX3RoaXMuX28pO1xuICAgICAgQ28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXBvbmVudHMyW2tleV0gPSBjb21wb25lbnQ7XG4gICAgICBjb21wb25lbnQuc2V0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwICYmIGNvbXBvbmVudC5zZXR1cCgpO1xuICAgIH0pO1xuICAgIGZvck93bihDb21wbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZW50czIsIGZ1bmN0aW9uIChjb21wb25lbnQpIHtcbiAgICAgIGNvbXBvbmVudC5tJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ291bnQgJiYgY29tcG9uZW50Lm1vdW50KCk7XG4gICAgfSk7XG4gICAgdGhpcy5lbWl0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhFVkVOVF9NT1VOVEVEKTtcbiAgICBhZGRDbGFzcyh0aGlzLnJvb3QsIENMQVNTX0knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTklUSUFMSVpFRCk7XG4gICAgc3RhdGUuc2V0KElETEUpO1xuICAgIHRoaXMuZW1pdCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfUkVBRFkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wcm90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ28uc3luYyA9IGZ1bmN0aW9uIHN5bmMoc3BsaWRlKSB7XG4gICAgdGhpcy5zcGxpZGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5wdXNoKHtcbiAgICAgIHNwbGlkZTogc3BsaWRlXG4gICAgfSk7XG4gICAgc3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGlkZS5zcGxpZGVzLnB1c2goe1xuICAgICAgc3BsaWRlOiB0aGlzLFxuICAgICAgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUGFyZW50OiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5pcygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInSURMRSkpIHtcbiAgICAgIHRoaXMuX0MuU3luYy5yZW1vdW50KCk7XG5cbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBzcGxpZGUuQ29tcG9uZW50cy5TeW5jLnJlbW91bnQoKTtcbiAgICB9XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmdvID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGdvKGNvbnRyb2wpIHtcbiAgICB0aGlzLl9DLkNvbnRyb2xsZXIuZ28oY29udHJvbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLm9uID0gZnVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIG9uKGV2ZW50cywgY2FsbGJhY2spIHtcbiAgICB0aGlzLmV2ZW50Lm9uKGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudHMsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Byb3RvLm9mZiA9IGZ1bmN0aW9uIG9mZihldmVudHMpIHtcbiAgICB0aGlzLmV2ZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndC5vZmYoZXZlbnRzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBfcHJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RvLmVtaXQgPSBmdW5jdGlvbiBlbWl0KGV2ZW50KSB7XG4gICAgdmFyIF90aGlzJGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmVudDtcblxuICAgIChfdGhpcyRldmVudCA9IHRoaXMuZXZlbnQpLmVtaXQuYXBwbHknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKF90aGlzJGV2ZW50LCBbZXZlbnRdLmNvbmNhdChzbGljZShhcmd1bWVudHMsIDEpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgX3Byb3RvLmFkZCA9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBhZGQoc2xpZGVzLCBpbmRleCkge1xuICAgIHRoaXMuX0MuU2xpZGVzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhZGQoc2xpZGVzLCBpbmRleCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZShtYXRjaGVyKSB7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHRoaXMuX0MuU2xpZGVzLnJlbW92ZShtYXRjaGVyKTtcblxuICAgIHJldHVybiB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncztcbiAgfTtcblxuICBfcHJvdG8uaXMgPSBmdW5jdGlvbiBpcyh0eXBlKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIHJldHVybiB0aGlzLl9vLnR5cGUgPT09IHR5cGU7XG4gIH07XG5cbiAgX3ByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ290by5yZWZyZXNoID0gZnVuY3Rpb24gcmVmcmVzaCgpIHtcbiAgICB0aGlzLmVtaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKEVWRU5UX1JFRlJFU0gpO1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIF9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8uZGVzdHJveSA9IGZ1bmN0aW9uIGRlc3Ryb3koY29tcGxldGVseSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBpZiAoY29tcGxldGVseSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb21wbGV0ZWx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGV2ZW50ID0gdGhpcy5ldmVudCxcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHN0YXRlID0gdGhpcy5zdGF0ZTtcblxuICAgIGlmIChzdGF0ZS5pcyhDUkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQVRFRCkpIHtcbiAgICAgIEV2ZW50SW50ZXJmYWNlKHRoaXMpLm9uKEVWRU5UX1JFQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidEWSwgdGhpcy5kZXN0cm95LmJpbmQodGhpcywgY29tcGxldGVseSkpO1xuICAgIH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Vsc2Uge1xuICAgICAgZm9yT3duKHRoaXMuX0MsIGZ1bmN0aW9uIChjb21wb25lbnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgICAgIGNvbXBvbmVudC5kZXN0cm95ICYmIGNvbXBvbmVudC5kZXN0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidveShjb21wbGV0ZWx5KTtcbiAgICAgIH0sIHRydWUpO1xuICAgICAgZXZlbnQuZW1pdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoRVZFTlRfREVTVFJPWSk7XG4gICAgICBldmVudC5kZXN0cm95KCk7XG4gICAgICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcGxldGVseSAmJiBlbXB0eSh0aGlzLnNwbGlkZXMpO1xuICAgICAgc3RhdGUuc2V0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhERVNUUk9ZRUQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBfY3JlYXRlQ2xhc3MoX1NwbGlkZSwgW3tcbiAgICBrZXk6ICJvcHRpb25zIixcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbztcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChvcHRpb25zKSB7XG4gICAgICB0aGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5fQy5NZWRpYS5zZXQob3B0aW9ucywgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuICB9LCB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGtleTogImxlbmd0aCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgcmV0dXJuIHRoaXMuX0MuU2xpZGVzLmdldExlbmd0aCh0cnVlKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgfVxuICB9LCB7XG4gICAga2V5OiAiaW5kZXgiLFxuICAgIGdldDogZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGdldCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9DLkNvbnRyb2xsZXIuZ2V0SScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduZGV4KCk7XG4gICAgfVxuICB9XSk7XG5cbiAgcmV0dXJuIF9TcGxpZGU7XG59KCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG52YXIgU3BsaWRlID0gX1NwbGlkZTtcblNwbGlkZS5kZWZhdWx0cyA9IHt9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcblNwbGlkZS5TVEFURVMgPSBTVEFURVM7XG52YXIgQ0xBU1NfUkVOREVSRUQgPSAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLXJlbmRlcmVkIjtcbnZhciBSRU5ERVJFUl9ERUZBVUxUX0NPTkZJRyA9IHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpc3RUYWc6ICJ1bCIsXG4gIHNsaWRlVGFnOiAibGkiXG59O1xuXG52YXIgU3R5bCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gU3R5bGUoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5zdHlsZXMgPSB7fTtcbiAgICB0aGlzLmlkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGlkO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICB2YScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyIF9wcm90bzIgPSBTdHlsZS5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMi5ydWxlID0gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHJ1bGUoc2VsZWN0b3IsIHByb3AsIHZhbHVlLCBicmVha3BvaW50KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIGJyZWFrcG9pbnQgPSBicmVha3BvaW50IHx8ICJkZWZhdWx0IjtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHNlbGVjdG9ycyA9IHRoaXMuc3R5bGVzW2JyZWFrcG9pbnRdID0gdGhpcy5zJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGVzW2JyZWFrcG9pbnRdIHx8IHt9O1xuICAgIHZhciBzdHlsZXMgPSBzZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3JzW3NlbGVjdG9yXSA9IHNlbGVjdG9yc1tzZWxlY3Rvcl0gfHwge307XG4gICAgcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlc1twcm9wXSA9IHZhbHVlO1xuICB9O1xuXG4gIF9wcm90bzIuYnVpbGQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgdmFyIGNzcyA9ICIiO1xuXG4gICAgaWYgKHRoaXMuc3R5bGVzLmRlZmF1bHQpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gICAgICBjc3MgKz0gdGhpcy5idWlsZFNlbGVjdG9ycyh0aGlzLnN0eWxlcy5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VmYXVsdCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5zdHlsZXMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5zb3J0KGZ1bmN0aW9uIChuLCBtKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLm9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLm1lZGlhUXVlcnkgPT09ICJtaW4iID8gK24gLSArbSA6ICttIC0gK247XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH0pLmZvckVhY2goZnVuY3Rpb24gKGJyZWFrcG9pbnQpIHtcbiAgICAgIGlmIChiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlYWtwb2ludCAhPT0gImRlZmF1bHQiKSB7XG4gICAgICAgIGNzcyArPSAiQG1lZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6ICIgKyBicmVha3BvaW50ICsgInB4KSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyI7XG4gICAgICAgIGNzcyArPSBfdGhpczIuYnVpbGRTZWxlY3RvcnMoX3RoaXMyLnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHlsZXNbYnJlYWtwb2ludF0pO1xuICAgICAgICBjc3MgKz0gIn0iO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY3NzO1xuICB9O1xuXG4gIF9wcm90bzIuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2J1aWxkU2VsZWN0b3JzID0gZnVuY3Rpb24gYnVpbGRTZWxlY3RvcnMoc2VsZWN0bycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidycykge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGNzcyA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciIjtcbiAgICBmb3JPd24oc2VsZWN0b3JzLCBmdW5jdGlvbiAoc3R5bGVzLCBzZWxlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2N0b3IpIHtcbiAgICAgIHNlbGVjdG9yID0gKCIjIiArIF90aGlzMy5pZCArICIgIiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKyBzZWxlY3RvcikudHJpbSgpO1xuICAgICAgY3NzICs9IHNlbGVjdG9yICsgIiB7IicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgICBmb3JPd24oc3R5bGVzLCBmdW5jdGlvbiAodmFsdWUsIHByb3ApIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGlmICh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkge1xuICAgICAgICAgIGNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgKz0gcHJvcCArICI6ICIgKyB2YWx1ZSArICI7IjtcbiAgICAgICAgfVxuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ30pO1xuICAgICAgY3NzICs9ICJ9IjtcbiAgICB9KTtcbiAgICByZXR1cm4gY3NzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfTtcblxuICByZXR1cm4gU3R5bGU7XG59KCk7XG5cbnZhciBTcGxpZGVSZW5kJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VyZXIgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBTcGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWRlUmVuZGVyZXIoY29udGVudHMsIG9wdGlvbnMsIGNvbmZpZywgZGVmYXVsdHMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgdGhpcy5zbGlkZXMgPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne307XG4gICAgdGhpcy5icmVha3BvaW50cyA9IFtdO1xuICAgIG1lcmdlKERFRkFVTFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUywgZGVmYXVsdHMgfHwge30pO1xuICAgIG1lcmdlKG1lcmdlKHRoaXMub3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsIERFRkFVTFRTKSwgb3B0aW9ucyB8fCB7fSk7XG4gICAgdGhpcy5jb250ZW50cyA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBjb250ZW50cztcbiAgICB0aGlzLmNvbmZpZyA9IGFzc2lnbih7fSwgUkVOREVSRVInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0RFRkFVTFRfQ09ORklHLCBjb25maWcgfHwge30pO1xuICAgIHRoaXMuaWQgPSB0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5jb25maWcuaWQgfHwgdW5pcXVlSWQoInNwbGlkZSIpO1xuICAgIHRoaXMuU3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlID0gbmV3IFN0eWxlKHRoaXMuaWQsIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRGlyZWN0aW9uID0gRGlyZWN0aW9uKG51bGwsIG51bGwsIHRoaXMub3B0aW9ucyk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGFzc2VydCh0aGlzLmNvbnRlbnRzLmxlbmd0aCwgIlByb3ZpZGUgYXQgbGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXN0IDEgY29udGVudC4iKTtcbiAgICB0aGlzLmluaXQoKTtcbiAgfVxuXG4gIFNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xpZGVSZW5kZXJlci5jbGVhbiA9IGZ1bmN0aW9uIGNsZWFuKHNwbGlkZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICB2YXIgX0V2ZW50SW50ZXJmYWNlMTQgPSBFdmVudEludGVyZmFjZShzcGxpZGUpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyxcbiAgICAgICAgb24gPSBfRXZlbnRJbnRlcmZhY2UxNC5vbjtcblxuICAgIHZhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Igcm9vdCA9IHNwbGlkZS5yb290O1xuICAgIHZhciBjbG9uZXMgPSBxdWVyeUFsbCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm9vdCwgIi4iICsgQ0xBU1NfQ0xPTkUpO1xuICAgIG9uKEVWRU5UX01PVU5URUQsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiAoKSB7XG4gICAgICByZW1vdmUoY2hpbGQocm9vdCwgInN0eWxlIikpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgICByZW1vdmUoY2xvbmVzKTtcbiAgfTtcblxuICB2YXIgX3AnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm90bzMgPSBTcGxpZGVSZW5kZXJlci5wcm90b3R5cGU7XG5cbiAgX3Byb3RvMy5pbmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCA9IGZ1bmN0aW9uIGluaXQoKSB7XG4gICAgdGhpcy5wYXJzZUJyZWFrcG9pbnRzKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICAgIHRoaXMuaW5pdFNsaWRlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJSb290UycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eWxlcygpO1xuICAgIHRoaXMucmVnaXN0ZXJUcmFja1N0eWxlcygpO1xuICAgIHRoaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLnJlZ2lzdGVyU2xpZGVTdHlsZXMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyTGlzdFN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3lsZXMoKTtcbiAgfTtcblxuICBfcHJvdG8zLmluaXRTbGlkZXMgPSBmdW5jdGlvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ24gaW5pdFNsaWRlcygpIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwdXNoKHRoaXMuc2xpZGVzLCB0aGlzLmNvbnRlbnRzLm1hcChmdW5jdGlvbiAoYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnRlbnQsIGluZGV4KSB7XG4gICAgICBjb250ZW50ID0gaXNTdHJpbmcoY29udGVuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QpID8ge1xuICAgICAgICBodG1sOiBjb250ZW50XG4gICAgICB9IDogY29udGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQ7XG4gICAgICBjb250ZW50LnN0eWxlcyA9IGNvbnRlbnQuc3R5bGVzIHx8IHt9OycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIGNvbnRlbnQuYXR0cnMgPSBjb250ZW50LmF0dHJzIHx8IHt9O1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgX3RoaXM0LmNvdmVyKGNvbnRlbnQpO1xuXG4gICAgICB2YXIgY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMgPSBfdGhpczQub3B0aW9ucy5jbGFzc2VzLnNsaWRlICsgIiAiICsgKGluZCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleCA9PT0gMCA/IENMQVNTX0FDVElWRSA6ICIiKTtcbiAgICAgIGFzc2lnbihjb250JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VudC5hdHRycywge1xuICAgICAgICBjbGFzczogKGNsYXNzZXMgKyAiICIgKyAoY28nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnRlbnQuYXR0cnMuY2xhc3MgfHwgIiIpKS50cmltKCksXG4gICAgICAgIHN0eWxlOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX3RoaXM0LmJ1aWxkU3R5bGVzKGNvbnRlbnQuc3R5bGVzKVxuICAgICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkpO1xuXG4gICAgaWYgKHRoaXMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzTG9vcCgpKSB7XG4gICAgICB0aGlzLmdlbmVyYXRlQ2xvbmVzKHRoaXMuc2xpZGVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90bzMucmVnaXN0ZXJSb290U3R5bGVzICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IGZ1bmN0aW9uIHJlZ2lzdGVyUm9vdFN0eWxlcygpIHtcbiAgICB2YXIgX3RoaXM1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IHRoaXM7XG5cbiAgICB0aGlzLmJyZWFrcG9pbnRzLmZvckVhY2goZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhfcmVmMikge1xuICAgICAgdmFyIHdpZHRoID0gX3JlZjJbMF0sXG4gICAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMgPSBfcmVmMlsxXTtcblxuICAgICAgX3RoaXM1LlN0eWxlLnJ1bGUoIiAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgIm1heC13aWR0aCIsIHVuaXQob3B0aW9ucy53aWR0aCksIHdpZHRoKTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3RlclRyYWNrU3R5bGVzID0gZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIHJlZ2lzdGVyVHJhY2tTdHlsZXMoKSB7XG4gICAgdmFyIF90aGlzNiA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzO1xuXG4gICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5bGU7XG4gICAgdmFyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZWxlY3RvciA9ICIuIiArIENMQVNTX1RSQUNLO1xuICAgIHRoaXMuYnJlYWtwb2luJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYzKSB7XG4gICAgICB2YXIgd2lkdGggPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX3JlZjNbMF0sXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWYzWzFdO1xuICAgICAgU3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneWxlMi5ydWxlKHNlbGVjdG9yLCBfdGhpczYucmVzb2x2ZSgicGFkZGluZ0xlZnQiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyksIF90aGlzNi5jc3NQYWRkaW5nKG9wdGlvbnMsIGZhbHNlKSwgd2lkdGgpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCBfdGhpczYucmVzb2x2ZSgicGFkZGluJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dSaWdodCIpLCBfdGhpczYuY3NzUGFkZGluZyhvcHRpb25zLCB0cnVlKSwgd2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCAiaGVpZ2h0IiwgX3RoaXM2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy5jc3NUcmFja0hlaWdodChvcHRpb25zKSwgd2lkdGgpO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfTtcblxuICBfcHJvdG8zLnJlZ2lzdGVyTGlzdFN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2knCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3Rlckxpc3RTdHlsZXMoKSB7XG4gICAgdmFyIF90aGlzNyA9IHRoaXM7XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5bGU7XG4gICAgdmFyIHNlbGVjdG9yID0gIicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuIiArIENMQVNTX0xJU1Q7XG4gICAgdGhpcy5icmVha3BvaW50cy5mb3JFYWNoKGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiAoX3JlZjQpIHtcbiAgICAgIHZhciB3aWR0aCA9IF9yZWY0WzBdLFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBvcHRpb25zID0gX3JlZjRbMV07XG4gICAgICBTdHlsZTIucnVsZShzZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0b3IsICJ0cmFuc2Zvcm0iLCBfdGhpczcuYnVpbGRUcmFuc2xhdGUob3B0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MpLCB3aWR0aCk7XG5cbiAgICAgIGlmICghX3RoaXM3LmNzc1NsaWRlSGVpZ2h0KG9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb25zKSkge1xuICAgICAgICBTdHlsZTIucnVsZShzZWxlY3RvciwgImFzcGVjdC0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmF0aW8iLCBfdGhpczcuY3NzQXNwZWN0UmF0aW8ob3B0aW9ucyksIHdpZHRoKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvMy5yZWdpc3RlclNsaWQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZVN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU2xpZGVTdHlsZXMoKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBfdGhpczggPSB0aGlzO1xuXG4gICAgdmFyIFN0eWxlMiA9IHRoaXMuU3R5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlO1xuICAgIHZhciBzZWxlY3RvciA9ICIuIiArIENMQVNTX1NMSURFO1xuICAgIHRoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzLmJyZWFrcG9pbnRzLmZvckVhY2goZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFyIHdpZHRoID0gX3JlZjVbMF0sXG4gICAgICAgICAgb3B0aW9ucyA9IF9yZWY1WycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicxXTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG9yLCAid2lkdGgiLCBfdGhpczguJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Nzc1NsaWRlV2lkdGgob3B0aW9ucyksIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZShzZWxlY3RvciwgImhlaWdodCIsIF90aGlzOC5jc3NTbGlkZUhlaWdodChvcHRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29ucykgfHwgIjEwMCUiLCB3aWR0aCk7XG4gICAgICBTdHlsZTIucnVsZShzZWxlY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3IsIF90aGlzOC5yZXNvbHZlKCJtYXJnaW5SaWdodCIpLCB1bml0KG9wdGlvbnMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2dhcCkgfHwgIjBweCIsIHdpZHRoKTtcbiAgICAgIFN0eWxlMi5ydWxlKHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInciArICIgPiBpbWciLCAiZGlzcGxheSIsIG9wdGlvbnMuY292ZXIgPyAibm9uZSIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJzogImlubGluZSIsIHdpZHRoKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYididWlsZFRyYW5zbGF0ZSA9IGZ1bmN0aW9uIGJ1aWxkVHJhbnNsYXRlKG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIF90aGlzJERpcmVjdGlvbiA9IHRoaXMuRGlyZWN0aW9uLFxuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgcmVzb2x2ZSA9IF90aGlzJERpcmVjdGlvbi5yZXNvbHZlLFxuICAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3JpZW50ID0gX3RoaXMkRGlyZWN0aW9uLm9yaWVudDtcbiAgICB2YXIgdmFsdWVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IFtdO1xuICAgIHZhbHVlcy5wdXNoKHRoaXMuY3NzT2Zmc2V0Q2xvbmVzKG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zKSk7XG4gICAgdmFsdWVzLnB1c2godGhpcy5jc3NPZmZzZXRHYXBzKG9wdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzKSk7XG5cbiAgICBpZiAodGhpcy5pc0NlbnRlcihvcHRpb25zKSkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHZhbHVlcy5wdXNoKHRoaXMuYnVpbGRDc3NWYWx1ZShvcmllbnQoLTUwKSwgIiUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIikpO1xuICAgICAgdmFsdWVzLnB1c2guYXBwbHkodmFsdWVzLCB0aGlzLmNzc09mZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXRDZW50ZXIob3B0aW9ucykpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmZpbHRlcihCb29sZWFuKS5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuICJ0cmFuc2xhdGUiICsgcmVzb2x2ZSgiWCIpICsgIigiICsgdmFsdWUgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIikiO1xuICAgIH0pLmpvaW4oIiAiKTtcbiAgfTtcblxuICBfcHJvdG8zLmNzc08nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZmZzZXRDbG9uZXMgPSBmdW5jdGlvbiBjc3NPZmZzZXRDbG9uZXMob3B0aW9ucykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICB2YXIgX3RoaXMkRGlyZWN0aW9uMiA9IHRoaXMuRGlyZWN0aW9uLFxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgcmVzb2x2ZSA9IF90aGlzJERpcmVjdGlvbjIucmVzb2x2ZSxcbiAgICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG9yaWVudCA9IF90aGlzJERpcmVjdGlvbjIub3JpZW50O1xuICAgIHZhciBjbG9uZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidDb3VudCA9IHRoaXMuZ2V0Q2xvbmVDb3VudCgpO1xuXG4gICAgaWYgKHRoaXMuaXNGaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4ZWRXaWR0aChvcHRpb25zKSkge1xuICAgICAgdmFyIF90aGlzJHBhcnNlQ3NzVmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlID0gdGhpcy5wYXJzZUNzc1ZhbHVlKG9wdGlvbnNbcmVzb2x2ZSgiZml4ZWRXaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkdGgiKV0pLFxuICAgICAgICAgIHZhbHVlID0gX3RoaXMkcGFyc2VDc3NWYWx1ZS52JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUsXG4gICAgICAgICAgdW5pdDIgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlLnVuaXQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuXG4gICAgICByZXR1cm4gdGhpcy5idWlsZENzc1ZhbHVlKG9yaWVudCh2YWx1ZSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICogY2xvbmVDb3VudCwgdW5pdDIpO1xuICAgIH1cblxuICAgIHZhciBwZXJjZW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCA9IDEwMCAqIGNsb25lQ291bnQgLyBvcHRpb25zLnBlclBhZ2U7XG4gICAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidybiBvcmllbnQocGVyY2VudCkgKyAiJSI7XG4gIH07XG5cbiAgX3Byb3RvMy5jcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzT2Zmc2V0Q2VudGVyID0gZnVuY3Rpb24gY3NzT2Zmc2V0Q2VudGVyKG9wdGlvbnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIF90aGlzJERpcmVjdGlvbjMgPSB0aGlzLkRpcmVjdGlvbixcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICAgIHJlc29sdmUgPSBfdGhpcyREaXJlY3Rpb24zLnJlc29sdmUsXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICBvcmllbnQgPSBfdGhpcyREaXJlY3Rpb24zLm9yaWVudDtcblxuICAgIGlmICh0aCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpcy5pc0ZpeGVkV2lkdGgob3B0aW9ucykpIHtcbiAgICAgIHZhciBfdGhpcyRwYXJzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VDc3NWYWx1ZTIgPSB0aGlzLnBhcnNlQ3NzVmFsdWUob3B0aW9uc1tyZXNvbHZlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiciZml4ZWRXaWR0aCIpXSksXG4gICAgICAgICAgdmFsdWUgPSBfdGhpcyRwYXJzZUNzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NWYWx1ZTIudmFsdWUsXG4gICAgICAgICAgdW5pdDIgPSBfdGhpcyRwYXJzZUNzc1YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZTIudW5pdDtcblxuICAgICAgcmV0dXJuIFt0aGlzLmJ1aWxkQ3NzVmFsdWUob3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWVudCh2YWx1ZSAvIDIpLCB1bml0MildO1xuICAgIH1cblxuICAgIHZhciB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVzID0gW107XG4gICAgdmFyIHBlclBhZ2UgPSBvcHRpb25zLnBlclBhZ2UsXG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgICBnYXAgPSBvcHRpb25zLmdhcDtcbiAgICB2YWx1ZXMucHVzaChvcmllbnQoNScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicwIC8gcGVyUGFnZSkgKyAiJSIpO1xuXG4gICAgaWYgKGdhcCkge1xuICAgICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBfdGhpcyRwYXJzZUNzc1ZhbHVlMyA9IHRoaXMucGFyc2VDc3NWYWx1ZShnYXAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSxcbiAgICAgICAgICBfdmFsdWUgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlMy52YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicsXG4gICAgICAgICAgX3VuaXQgPSBfdGhpcyRwYXJzZUNzc1ZhbHVlMy51bmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndDtcblxuICAgICAgdmFyIGdhcE9mZnNldCA9IChfdmFsdWUgLyBwZXJQYWdlIC0gX3YnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWx1ZSkgLyAyO1xuICAgICAgdmFsdWVzLnB1c2godGhpcy5idWlsZENzc1ZhbHVlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcmllbnQoZ2FwT2Zmc2V0KSwgX3VuaXQpKTtcbiAgICB9XG5cbiAgICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHZhbHVlcztcbiAgfTtcblxuICBfcHJvdG8zLmNzc09mZnNldEdhcHMgPSBmdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gY3NzT2Zmc2V0R2FwcyhvcHRpb25zKSB7XG4gICAgdmFyIGNsb25lQ291JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250ID0gdGhpcy5nZXRDbG9uZUNvdW50KCk7XG5cbiAgICBpZiAoY2xvbmVDb3VudCAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgb3B0aW9ucy5nYXApIHtcbiAgICAgIHZhciBvcmllbnQgPSB0aGlzLkRpcmVjdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb24ub3JpZW50O1xuXG4gICAgICB2YXIgX3RoaXMkcGFyc2VDc3NWYWx1ZTQgPSB0aGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5wYXJzZUNzc1ZhbHVlKG9wdGlvbnMuZ2FwKSxcbiAgICAgICAgICB2YWx1ZSA9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfdGhpcyRwYXJzZUNzc1ZhbHVlNC52YWx1ZSxcbiAgICAgICAgICB1bml0MiA9IF90JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpcyRwYXJzZUNzc1ZhbHVlNC51bml0O1xuXG4gICAgICBpZiAodGhpcy5pc0ZpeGVkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1dpZHRoKG9wdGlvbnMpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1aWxkQ3NzVmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKG9yaWVudCh2YWx1ZSAqIGNsb25lQ291bnQpLCB1bml0Mik7XG4gICAgICB9XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgICB2YXIgcGVyUGFnZSA9IG9wdGlvbnMucGVyUGFnZTtcbiAgICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZ2FwcyA9IGNsb25lQ291bnQgLyBwZXJQYWdlO1xuICAgICAgcmV0dXJuIHRoaXMuYicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1aWxkQ3NzVmFsdWUob3JpZW50KGdhcHMgKiB2YWx1ZSksIHVuaXQyKTtcbiAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG4gICAgcmV0dXJuICIiO1xuICB9O1xuXG4gIF9wcm90bzMucmVzb2x2ZSA9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiByZXNvbHZlKHByb3ApIHtcbiAgICByZXR1cm4gY2FtZWxUb0tlYmFiKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKHByb3ApKTtcbiAgfTtcblxuICBfcHJvdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvMy5jc3NQYWRkaW5nID0gZnVuY3Rpb24gY3NzUGFkZGluZyhvcHRpb25zLCByaWcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaHQpIHtcbiAgICB2YXIgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZztcbiAgICB2YXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3AgPSB0aGlzLkRpcmVjdGlvbi5yZXNvbHZlKHJpZ2h0ID8gInJpZ2h0IiA6JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAibGVmdCIsIHRydWUpO1xuICAgIHJldHVybiBwYWRkaW5nICYmIHVuaXQocGFkZGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmdbcHJvcF0gfHwgKGlzT2JqZWN0KHBhZGRpbmcpID8gMCA6IHBhZGRpbmcpKSB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgIjBweCI7XG4gIH07XG5cbiAgX3Byb3RvMy5jc3NUcmFja0hlaWdodCA9IGZ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ25jdGlvbiBjc3NUcmFja0hlaWdodChvcHRpb25zKSB7XG4gICAgdmFyIGhlaWdodCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPSAiIjtcblxuICAgIGlmICh0aGlzLmlzVmVydGljYWwoKSkge1xuICAgICAgaGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaWdodCA9IHRoaXMuY3NzSGVpZ2h0KG9wdGlvbnMpO1xuICAgICAgYXNzZXJ0KGhlaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnaHQsIFwnImhlaWdodCIgaXMgbWlzc2luZy5cJyk7XG4gICAgICBoZWlnaHQgPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgImNhbGMoIiArIGhlaWdodCArICIgLSAiICsgdGhpcy5jc3NQYWRkaW5nKG9wdGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zLCBmYWxzZSkgKyAiIC0gIiArIHRoaXMuY3NzUGFkZGluZyhvcHRpb25zLCB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3J1ZSkgKyAiKSI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfTtcblxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgX3Byb3RvMy5jc3NIZWlnaHQgPSBmdW5jdGlvbiBjc3NIZWlnaHQob3B0aW9ucycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmhlaWdodCk7XG4gIH07XG5cbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIF9wcm90bzMuY3NzU2xpZGVXaWR0aCA9IGZ1bmN0aW9uIGNzc1NsaWRlV2lkdGgoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29wdGlvbnMpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5hdXRvV2lkdGggPyAiIiA6IHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbml0KG9wdGlvbnMuZml4ZWRXaWR0aCkgfHwgKHRoaXMuaXNWZXJ0aWNhbCgpID8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIiIDogdGhpcy5jc3NTbGlkZVNpemUob3B0aW9ucykpO1xuICB9O1xuXG4gIF9wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JvdG8zLmNzc1NsaWRlSGVpZ2h0ID0gZnVuY3Rpb24gY3NzU2xpZGVIZWlnaHQobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMpIHtcbiAgICByZXR1cm4gdW5pdChvcHRpb25zLmZpeGVkSGVpZ2h0KSB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgKHRoaXMuaXNWZXJ0aWNhbCgpID8gb3B0aW9ucy5hdXRvSGVpZ2h0ID8gIiIgOicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdGhpcy5jc3NTbGlkZVNpemUob3B0aW9ucykgOiB0aGlzLmNzc0hlaWdodChvcHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9ucykpO1xuICB9O1xuXG4gIF9wcm90bzMuY3NzU2xpZGVTaXplID0gZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGNzc1NsaWRlU2l6ZShvcHRpb25zKSB7XG4gICAgdmFyIGdhcCA9IHVuaXQobycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwdGlvbnMuZ2FwKTtcbiAgICByZXR1cm4gImNhbGMoKDEwMCUiICsgKGdhcCAmJiAiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArICIgKyBnYXApICsgIikvIiArIChvcHRpb25zLnBlclBhZ2UgfHwgMSkgKyAoZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcCAmJiAiIC0gIiArIGdhcCkgKyAiKSI7XG4gIH07XG5cbiAgX3Byb3RvMy5jcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzQXNwZWN0UmF0aW8gPSBmdW5jdGlvbiBjc3NBc3BlY3RSYXRpbyhvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHZhciBoZWlnaHRSYXRpbyA9IG9wdGlvbnMuaGVpZ2h0UmF0aW87XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiBoZWlnaHRSYXRpbyA/ICIiICsgMSAvIGhlaWdodFJhdGlvIDogIiI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xuXG4gIF9wcm90bzMuYnVpbGRDc3NWYWx1ZSA9IGZ1bmN0aW9uIGJ1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lsZENzc1ZhbHVlKHZhbHVlLCB1bml0Mikge1xuICAgIHJldHVybiAiIiArIHZhbHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZSArIHVuaXQyO1xuICB9O1xuXG4gIF9wcm90bzMucGFyc2VDc3NWYWx1ZSA9IGYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBwYXJzZUNzc1ZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKGlzU3RyaW5nKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSkpIHtcbiAgICAgIHZhciBudW1iZXIgPSBwYXJzZUZsb2F0KHZhbHVlKSB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgMDtcbiAgICAgIHZhciB1bml0MiA9IHZhbHVlLnJlcGxhY2UoL1xcZCooXFwuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xcZCopPy8sICIiKSB8fCAicHgiO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlOiBudW1iZXIsXG4gICAgICAgIHVuaXQ6IHVuaXQyXG4gICAgICB9O1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIHVuaXQ6ICJweCJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90bzMucGFyc2VCcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYWtwb2ludHMgPSBmdW5jdGlvbiBwYXJzZUJyZWFrcG9pbnRzKCkge1xuICAgIHZhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX3RoaXM5ID0gdGhpcztcblxuICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMub3B0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnMuYnJlYWtwb2ludHM7XG4gICAgdGhpcy5icmVha3BvaW50cy5wdXNoKFsiZGVmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F1bHQiLCB0aGlzLm9wdGlvbnNdKTtcblxuICAgIGlmIChicmVha3BvaW50cyknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICAgIGZvck93bihicmVha3BvaW50cywgZnVuY3Rpb24gKG9wdGlvbnMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3aWR0aCkge1xuICAgICAgICBfdGhpczkuYnJlYWtwb2ludHMucHVzaChbd2lkdGgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBtZXJnZShtZXJnZSh7fSwgX3RoaXM5Lm9wdGlvbnMpLCBvcHRpb25zKV0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8zLmlzRml4ZWRXaWR0aCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmdW5jdGlvbiBpc0ZpeGVkV2lkdGgob3B0aW9ucykge1xuICAgIHJldHVybiAhIW8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHRpb25zW3RoaXMuRGlyZWN0aW9uLnJlc29sdmUoImZpeGVkV2lkdGgiKV07XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuXG4gIF9wcm90bzMuaXNMb29wID0gZnVuY3Rpb24gaXNMb29wKCkge1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICByZXR1cm4gdGhpcy5vcHRpb25zLnR5cGUgPT09IExPT1A7XG4gIH07XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIF9wcm90bzMuaXNDZW50ZXIgPSBmdW5jdGlvbiBpc0NlbnRlcihvcHRpb25zKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIGlmIChvcHRpb25zLmZvY3VzID09PSAiY2VudGVyIikge1xuICAgICAgaWYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICh0aGlzLmlzTG9vcCgpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgIH1cblxuICAgICAgaWYgKHRoaXMub3B0aW9ucy50eXBlID09PSBTTElERSkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3tcbiAgICAgICAgcmV0dXJuICF0aGlzLm9wdGlvbnMudHJpbVNwYWNlO1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgX3Byb3RvMy5pJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NWZXJ0aWNhbCA9IGZ1bmN0aW9uIGlzVmVydGljYWwoKSB7XG4gICAgcmV0dXJuIHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaGlzLm9wdGlvbnMuZGlyZWN0aW9uID09PSBUVEI7XG4gIH07XG5cbiAgX3Byb3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbzMuYnVpbGRDbGFzc2VzID0gZnVuY3Rpb24gYnVpbGRDbGFzc2VzKCkge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICByZXR1cm4gW0NMQVNTX1JPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09ULCBDTEFTU19ST09UICsgIi0tIiArIG9wdGlvbnMudHlwZSwgQ0xBU1NfUk9PVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKyAiLS0iICsgb3B0aW9ucy5kaXJlY3Rpb24sIG9wdGlvbnMuZHJhZyAmJiBDTEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1NfUk9PVCArICItLWRyYWdnYWJsZSIsIG9wdGlvbnMuaXNOYXZpZ2F0aW9uICYmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBDTEFTU19ST09UICsgIi0tbmF2IiwgQ0xBU1NfQUNUSVZFLCAhdGhpcy5jb25maScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnLmhpZGRlbiAmJiBDTEFTU19SRU5ERVJFRF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKCIgIik7XG4gIH07XG5cbiAgX3Byb3RvMy5idWlsZEF0dHJzID0gZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGJ1aWxkQXR0cnMoYXR0cnMpIHtcbiAgICB2YXIgYXR0ciA9ICIiO1xuICAgIGZvck8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInd24oYXR0cnMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBhdHRyICs9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid2YWx1ZSA/ICIgIiArIGNhbWVsVG9LZWJhYihrZXkpICsgIj1cXCIiICsgdmFsdWUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysgIlxcIiIgOiAiIjtcbiAgICB9KTtcbiAgICByZXR1cm4gYXR0ci50cmltKCk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9O1xuXG4gIF9wcm90bzMuYnVpbGRTdHlsZXMgPSBmdW5jdGlvbiBidWlsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RTdHlsZXMoc3R5bGVzKSB7XG4gICAgdmFyIHN0eWxlID0gIiI7XG4gICAgZm9yT3duJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhzdHlsZXMsIGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgICBzdHlsZSArPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIiAiICsgY2FtZWxUb0tlYmFiKGtleSkgKyAiOiIgKyB2YWx1ZSArICI7IjtcbiAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfSk7XG4gICAgcmV0dXJuIHN0eWxlLnRyaW0oKTtcbiAgfTtcblxuICBfcHJvdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMy5yZW5kZXJTbGlkZXMgPSBmdW5jdGlvbiByZW5kZXJTbGlkZXMoKSB7XG4gICAgdicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhciBfdGhpczEwID0gdGhpcztcblxuICAgIHZhciB0YWcgPSB0aGlzLmNvbmZpZy5zbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZGVUYWc7XG4gICAgcmV0dXJuIHRoaXMuc2xpZGVzLm1hcChmdW5jdGlvbiAoY29uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlbnQpIHtcbiAgICAgIHJldHVybiAiPCIgKyB0YWcgKyAiICIgKyBfdGhpczEwLmInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWlsZEF0dHJzKGNvbnRlbnQuYXR0cnMpICsgIj4iICsgKGNvbnRlbnQuaHRtbCB8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3wgIiIpICsgIjwvIiArIHRhZyArICI+IjtcbiAgICB9KS5qb2luKCIiKTtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH07XG5cbiAgX3Byb3RvMy5jb3ZlciA9IGZ1bmN0aW9uIGNvdmVyKGNvbnRlbnQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgdmFyIHN0eWxlcyA9IGNvbnRlbnQuc3R5bGVzLFxuICAgICAgICBfY29udGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnQkaHRtbCA9IGNvbnRlbnQuaHRtbCxcbiAgICAgICAgaHRtbCA9IF9jb250ZW50JCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidodG1sID09PSB2b2lkIDAgPyAiIiA6IF9jb250ZW50JGh0bWw7XG5cbiAgICBpZiAodCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaXMub3B0aW9ucy5jb3ZlciAmJiAhdGhpcy5vcHRpb25zLmxhenlMb2FkKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgdmFyIHNyYyA9IGh0bWwubWF0Y2goLzxpbWcuKj9zcmNcXHMqPVxccyonCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKFtcJyJdKSguKz8pXFwxLio/Pi8pO1xuXG4gICAgICBpZiAoc3JjICYmIHNyY1syJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ10pIHtcbiAgICAgICAgc3R5bGVzLmJhY2tncm91bmQgPSAiY2VudGVyL2NvdmVyIG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInby1yZXBlYXQgdXJsKFwnIiArIHNyY1syXSArICJcJykiO1xuICAgICAgfVxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9XG4gIH07XG5cbiAgX3Byb3RvMy5nZW5lcmF0ZUNsb25lcyA9IGZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBnZW5lcmF0ZUNsb25lcyhjb250ZW50cykge1xuICAgIHZhciBjbGFzc2VzID0gdGgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXMub3B0aW9ucy5jbGFzc2VzO1xuICAgIHZhciBjb3VudCA9IHRoaXMuZ2V0Q2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlQ291bnQoKTtcbiAgICB2YXIgc2xpZGVzID0gY29udGVudHMuc2xpY2UoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbiAgICB3aGlsZSAoc2xpZGVzLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHVzaChzbGlkZXMsIHNsaWRlcyk7XG4gICAgfVxuXG4gICAgcHVzaChzbGlkZXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLnNsaWNlKC1jb3VudCkucmV2ZXJzZSgpLCBzbGlkZXMuc2xpY2UoMCwgY291bnQpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykuZm9yRWFjaChmdW5jdGlvbiAoY29udGVudCwgaW5kZXgpIHtcbiAgICAgIHZhciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXR0cnMgPSBhc3NpZ24oe30sIGNvbnRlbnQuYXR0cnMsIHtcbiAgICAgICAgY2xhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzOiBjb250ZW50LmF0dHJzLmNsYXNzICsgIiAiICsgY2xhc3Nlcy5jbG9uZVxuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIH0pO1xuICAgICAgdmFyIGNsb25lID0gYXNzaWduKHt9LCBjb250ZW50LCB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBhdHRyczogYXR0cnNcbiAgICAgIH0pO1xuICAgICAgaW5kZXggPCBjb3VuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPyBjb250ZW50cy51bnNoaWZ0KGNsb25lKSA6IGNvbnRlbnRzLnB1c2goY2xvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8zLmdldENsb25lQ291bnQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gZ2V0Q2xvbmVDb3VudCgpIHtcbiAgICBpZiAodGhpcy5pc0xvb3AoKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgaWYgKG9wdGlvbnMuY2xvbmVzKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uZXM7XG4gICAgICB9XG5cbiAgICAgIHZhciBwZXJQYWdlID0gbWF4LmFwcGx5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh2b2lkIDAsIHRoaXMuYnJlYWtwb2ludHMubWFwKGZ1bmN0aW9uIChfcmVmNikgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgICAgdmFyIG9wdGlvbnMyID0gX3JlZjZbMV07XG4gICAgICAgIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgb3B0aW9uczIucGVyUGFnZTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBwZXJQYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZSAqICgob3B0aW9ucy5mbGlja01heFBhZ2VzIHx8IDEpICsgMSk7XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIH1cblxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIF9wcm90bzMucmVuZGVyQXJybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid3cyA9IGZ1bmN0aW9uIHJlbmRlckFycm93cygpIHtcbiAgICB2YXIgaHRtbCA9ICIiJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICBodG1sICs9ICI8ZGl2IGNsYXNzPVxcIiIgKyB0aGlzLm9wdGlvbnMuY2xhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzZXMuYXJyb3dzICsgIlxcIj4iO1xuICAgIGh0bWwgKz0gdGhpcy5yZW5kZXJBcnJvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3codHJ1ZSk7XG4gICAgaHRtbCArPSB0aGlzLnJlbmRlckFycm93KGZhbHNlKTtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICByZXR1cm4gaHRtbDtcbiAgfTtcblxuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgX3Byb3RvMy5yZW5kZXJBcnJvdyA9IGZ1bmN0aW9uIHJlbmRlckFycm93KHByZXYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSB7XG4gICAgdmFyIF90aGlzJG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXG4gICAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICBjbGFzc2VzID0gX3RoaXMkb3B0aW9ucy5jbGFzc2VzLFxuICAgICAgICBpMThuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IF90aGlzJG9wdGlvbnMuaTE4bjtcbiAgICB2YXIgYXR0cnMgPSB7XG4gICAgICBjbCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3M6IGNsYXNzZXMuYXJyb3cgKyAiICIgKyAocHJldiA/IGNsYXNzZXMucHJldiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBjbGFzc2VzLm5leHQpLFxuICAgICAgdHlwZTogImJ1dHRvbiIsXG4gICAgICBhcmknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYUxhYmVsOiBwcmV2ID8gaTE4bi5wcmV2IDogaTE4bi5uZXh0XG4gICAgfTtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuICI8YnV0dG9uICIgKyB0aGlzLmJ1aWxkQXR0cnMoYXR0cnMpICsgIj48JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3N2ZyB4bWxucz1cXCIiICsgWE1MX05BTUVfU1BBQ0UgKyAiXFwiIHZpZXdCb3gnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPVxcIjAgMCAiICsgU0laRSArICIgIiArIFNJWkUgKyAiXFwiIHdpZHRoPVxcIiInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICsgU0laRSArICJcXCIgaGVpZ2h0PVxcIiIgKyBTSVpFICsgIlxcIj48cGF0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZD1cXCIiICsgKHRoaXMub3B0aW9ucy5hcnJvd1BhdGggfHwgUEFUSCkgKyAiXFwiIC8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPjwvc3ZnPjwvYnV0dG9uPiI7XG4gIH07XG5cbiAgX3Byb3RvMy5odG1sID0gZnUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmN0aW9uIGh0bWwoKSB7XG4gICAgdmFyIF90aGlzJGNvbmZpZyA9IHRoaXMuY29uZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpZyxcbiAgICAgICAgcm9vdENsYXNzID0gX3RoaXMkY29uZmlnLnJvb3RDbGFzcyxcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgICAgIGxpc3RUYWcgPSBfdGhpcyRjb25maWcubGlzdFRhZyxcbiAgICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Fycm93cyA9IF90aGlzJGNvbmZpZy5hcnJvd3MsXG4gICAgICAgIGJlZm9yZVRyYWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInayA9IF90aGlzJGNvbmZpZy5iZWZvcmVUcmFjayxcbiAgICAgICAgYWZ0ZXJUcmFjaycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBfdGhpcyRjb25maWcuYWZ0ZXJUcmFjayxcbiAgICAgICAgc2xpZGVyID0gX3RoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lzJGNvbmZpZy5zbGlkZXIsXG4gICAgICAgIGJlZm9yZVNsaWRlciA9IF90aGlzJGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25maWcuYmVmb3JlU2xpZGVyLFxuICAgICAgICBhZnRlclNsaWRlciA9IF90aGlzJCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjb25maWcuYWZ0ZXJTbGlkZXI7XG4gICAgdmFyIGh0bWwgPSAiIjtcbiAgICBodG1sICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicrPSAiPGRpdiBpZD1cXCIiICsgdGhpcy5pZCArICJcXCIgY2xhc3M9XFwiIiArICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0aGlzLmJ1aWxkQ2xhc3NlcygpICsgIiAiICsgKHJvb3RDbGFzcyB8fCAiIikgKyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIlxcIj4iO1xuICAgIGh0bWwgKz0gIjxzdHlsZT4iICsgdGhpcy5TdHlsZS5idWlsZCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKSArICI8L3N0eWxlPiI7XG5cbiAgICBpZiAoc2xpZGVyKSB7XG4gICAgICBodG0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCArPSBiZWZvcmVTbGlkZXIgfHwgIiI7XG4gICAgICBodG1sICs9ICI8ZGl2IGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzcz1cXCJzcGxpZGVfX3NsaWRlclxcIj4iO1xuICAgIH1cblxuICAgIGh0bWwgKz0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2JlZm9yZVRyYWNrIHx8ICIiO1xuXG4gICAgaWYgKGFycm93cykge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2h0bWwgKz0gdGhpcy5yZW5kZXJBcnJvd3MoKTtcbiAgICB9XG5cbiAgICBodG1sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyArPSAiPGRpdiBjbGFzcz1cXCJzcGxpZGVfX3RyYWNrXFwiPiI7XG4gICAgaHRtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2wgKz0gIjwiICsgbGlzdFRhZyArICIgY2xhc3M9XFwic3BsaWRlX19saXN0XFwiPiI7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGh0bWwgKz0gdGhpcy5yZW5kZXJTbGlkZXMoKTtcbiAgICBodG1sICs9ICI8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJy8iICsgbGlzdFRhZyArICI+IjtcbiAgICBodG1sICs9ICI8L2Rpdj4iO1xuICAgIGh0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ21sICs9IGFmdGVyVHJhY2sgfHwgIiI7XG5cbiAgICBpZiAoc2xpZGVyKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaHRtbCArPSAiPC9kaXY+IjtcbiAgICAgIGh0bWwgKz0gYWZ0ZXJTbGlkZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHx8ICIiO1xuICAgIH1cblxuICAgIGh0bWwgKz0gIjwvZGl2PiI7XG4gICAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiBodG1sO1xuICB9O1xuXG4gIHJldHVybiBTcGxpZGVSZW5kZXJlcjtcbn0oKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5cbmV4cG9ydHMuQ0xBU1NFUyA9IENMQVNTRVM7XG5leHBvcnRzLkNMQVNTXycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBQ1RJVkUgPSBDTEFTU19BQ1RJVkU7XG5leHBvcnRzLkNMQVNTX0FSUk9XID0gQ0xBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1NTX0FSUk9XO1xuZXhwb3J0cy5DTEFTU19BUlJPV1MgPSBDTEFTU19BUlJPV1M7XG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5DTEFTU19BUlJPV19ORVhUID0gQ0xBU1NfQVJST1dfTkVYVDtcbmV4cG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncnRzLkNMQVNTX0FSUk9XX1BSRVYgPSBDTEFTU19BUlJPV19QUkVWO1xuZXhwb3J0cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuQ0xBU1NfQ0xPTkUgPSBDTEFTU19DTE9ORTtcbmV4cG9ydHMuQ0xBU1NfQ09OVEFJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05FUiA9IENMQVNTX0NPTlRBSU5FUjtcbmV4cG9ydHMuQ0xBU1NfRk9DVVNfSU4gPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfRk9DVVNfSU47XG5leHBvcnRzLkNMQVNTX0lOSVRJQUxJWkVEID0gQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX0lOSVRJQUxJWkVEO1xuZXhwb3J0cy5DTEFTU19MSVNUID0gQ0xBU1NfTElTVDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnRzLkNMQVNTX0xPQURJTkcgPSBDTEFTU19MT0FESU5HO1xuZXhwb3J0cy5DJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xBU1NfTkVYVCA9IENMQVNTX05FWFQ7XG5leHBvcnRzLkNMQVNTX09WRVJGTE9XID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIENMQVNTX09WRVJGTE9XO1xuZXhwb3J0cy5DTEFTU19QQUdJTkFUSU9OID0gQ0xBUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTX1BBR0lOQVRJT047XG5leHBvcnRzLkNMQVNTX1BBR0lOQVRJT05fUEFHRSA9IENMJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FTU19QQUdJTkFUSU9OX1BBR0U7XG5leHBvcnRzLkNMQVNTX1BSRVYgPSBDTEFTU18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUFJFVjtcbmV4cG9ydHMuQ0xBU1NfUFJPR1JFU1MgPSBDTEFTU19QUk9HUkVTUztcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnRzLkNMQVNTX1BST0dSRVNTX0JBUiA9IENMQVNTX1BST0dSRVNTX0JBUjtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidleHBvcnRzLkNMQVNTX1JPT1QgPSBDTEFTU19ST09UO1xuZXhwb3J0cy5DTEFTU19TJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xJREUgPSBDTEFTU19TTElERTtcbmV4cG9ydHMuQ0xBU1NfU1BJTk5FUiA9IENMQVMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU19TUElOTkVSO1xuZXhwb3J0cy5DTEFTU19TUiA9IENMQVNTX1NSO1xuZXhwb3J0cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQ0xBU1NfVE9HR0xFID0gQ0xBU1NfVE9HR0xFO1xuZXhwb3J0cy5DTEFTU19UT0dHTCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFX1BBVVNFID0gQ0xBU1NfVE9HR0xFX1BBVVNFO1xuZXhwb3J0cy5DTEFTU19UT0dHJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFX1BMQVkgPSBDTEFTU19UT0dHTEVfUExBWTtcbmV4cG9ydHMuQ0xBU1NfVFJBQ0snCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gQ0xBU1NfVFJBQ0s7XG5leHBvcnRzLkNMQVNTX1ZJU0lCTEUgPSBDTEFTU19WSScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTSUJMRTtcbmV4cG9ydHMuREVGQVVMVFMgPSBERUZBVUxUUztcbmV4cG9ydHMuRVZFTicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidUX0FDVElWRSA9IEVWRU5UX0FDVElWRTtcbmV4cG9ydHMuRVZFTlRfQVJST1dTX01PJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1VOVEVEID0gRVZFTlRfQVJST1dTX01PVU5URUQ7XG5leHBvcnRzLkVWRU5UX0FSUk8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInV1NfVVBEQVRFRCA9IEVWRU5UX0FSUk9XU19VUERBVEVEO1xuZXhwb3J0cy5FVkVOVCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidfQVVUT1BMQVlfUEFVU0UgPSBFVkVOVF9BVVRPUExBWV9QQVVTRTtcbmV4cG9ydHMuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0VWRU5UX0FVVE9QTEFZX1BMQVkgPSBFVkVOVF9BVVRPUExBWV9QTEFZO1xuZXhwb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHMuRVZFTlRfQVVUT1BMQVlfUExBWUlORyA9IEVWRU5UX0FVVE9QTEFZX1BMQVlJJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05HO1xuZXhwb3J0cy5FVkVOVF9DTElDSyA9IEVWRU5UX0NMSUNLO1xuZXhwb3J0cy5FJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1ZFTlRfREVTVFJPWSA9IEVWRU5UX0RFU1RST1k7XG5leHBvcnRzLkVWRU5UX0RSQUcnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gRVZFTlRfRFJBRztcbmV4cG9ydHMuRVZFTlRfRFJBR0dFRCA9IEVWRU5UX0RSQScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidHR0VEO1xuZXhwb3J0cy5FVkVOVF9EUkFHR0lORyA9IEVWRU5UX0RSQUdHSU5HO1xuZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4cG9ydHMuRVZFTlRfRU5EX0lOREVYX0NIQU5HRUQgPSBFVkVOVF9FTkRfSU5ERVgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInX0NIQU5HRUQ7XG5leHBvcnRzLkVWRU5UX0hJRERFTiA9IEVWRU5UX0hJRERFTjtcbmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneHBvcnRzLkVWRU5UX0lOQUNUSVZFID0gRVZFTlRfSU5BQ1RJVkU7XG5leHBvcnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidFVkVOVF9MQVpZTE9BRF9MT0FERUQgPSBFVkVOVF9MQVpZTE9BRF9MT0FERUQ7XG5lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5FVkVOVF9NT1VOVEVEID0gRVZFTlRfTU9VTlRFRDtcbmV4cG9ydHMuRVYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRU5UX01PVkUgPSBFVkVOVF9NT1ZFO1xuZXhwb3J0cy5FVkVOVF9NT1ZFRCA9IEVWRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidOVF9NT1ZFRDtcbmV4cG9ydHMuRVZFTlRfTkFWSUdBVElPTl9NT1VOVEVEID0gRVZFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ05UX05BVklHQVRJT05fTU9VTlRFRDtcbmV4cG9ydHMuRVZFTlRfT1ZFUkZMT1cgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfT1ZFUkZMT1c7XG5leHBvcnRzLkVWRU5UX1BBR0lOQVRJT05fTU9VTlRFRCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPSBFVkVOVF9QQUdJTkFUSU9OX01PVU5URUQ7XG5leHBvcnRzLkVWRU5UX1BBR0lOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0FUSU9OX1VQREFURUQgPSBFVkVOVF9QQUdJTkFUSU9OX1VQREFURUQ7XG5leHBvcnQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncy5FVkVOVF9SRUFEWSA9IEVWRU5UX1JFQURZO1xuZXhwb3J0cy5FVkVOVF9SRUZSRScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidTSCA9IEVWRU5UX1JFRlJFU0g7XG5leHBvcnRzLkVWRU5UX1JFU0laRSA9IEVWRU5UJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ19SRVNJWkU7XG5leHBvcnRzLkVWRU5UX1JFU0laRUQgPSBFVkVOVF9SRVNJWkVEO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2V4cG9ydHMuRVZFTlRfU0NST0xMID0gRVZFTlRfU0NST0xMO1xuZXhwb3J0cy5FVkUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInTlRfU0NST0xMRUQgPSBFVkVOVF9TQ1JPTExFRDtcbmV4cG9ydHMuRVZFTlRfU0hJRicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidURUQgPSBFVkVOVF9TSElGVEVEO1xuZXhwb3J0cy5FVkVOVF9TTElERV9LRVlET1dOJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IEVWRU5UX1NMSURFX0tFWURPV047XG5leHBvcnRzLkVWRU5UX1VQREFURUQgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRVZFTlRfVVBEQVRFRDtcbmV4cG9ydHMuRVZFTlRfVklTSUJMRSA9IEVWRU5UX1ZJUycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidJQkxFO1xuZXhwb3J0cy5FdmVudEJpbmRlciA9IEV2ZW50QmluZGVyO1xuZXhwb3J0cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicuRXZlbnRJbnRlcmZhY2UgPSBFdmVudEludGVyZmFjZTtcbmV4cG9ydHMuRkFERSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBGQURFO1xuZXhwb3J0cy5MT09QID0gTE9PUDtcbmV4cG9ydHMuTFRSID0gTFQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUjtcbmV4cG9ydHMuUlRMID0gUlRMO1xuZXhwb3J0cy5SZXF1ZXN0SW50ZXJ2YWwgPSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInUmVxdWVzdEludGVydmFsO1xuZXhwb3J0cy5TTElERSA9IFNMSURFO1xuZXhwb3J0cy4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInU1RBVFVTX0NMQVNTRVMgPSBTVEFUVVNfQ0xBU1NFUztcbmV4cG9ydHMuU3BsaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic9IFNwbGlkZTtcbmV4cG9ydHMuU3BsaWRlUmVuZGVyZXIgPSBTcGxpZGVSZW5kZXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3I7XG5leHBvcnRzLlN0YXRlID0gU3RhdGU7XG5leHBvcnRzLlRUQiA9IFRUQjsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLlRocm90dGxlID0gVGhyb3R0bGU7XG5leHBvcnRzWyJkZWZhdWx0Il0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInID0gU3BsaWRlO1xuJywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3NwbGlkZS5janMuanMnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzc6IHsnZW4nOiB7J0Fic29sdXRlUGF0aCc6ICcnLAogICAgICAgICAgICAgJ0NvbnRlbnQnOiBiJ2Z1bmN0aW9uIGVtcHR5KGFycmF5KSB7XG4gIGFycmF5Lmxlbmd0aCA9IDA7XG59XG5cbmYnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5jdGlvbiBzbGljZShhcnJheUxpa2UsIHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIEFycmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIneS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnJheUxpa2UsIHN0YXJ0LCBlbmQpO1xufScKICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gZmluZChhcnJheUxpa2UsIHByZWRpY2F0ZSkge1xuICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNsaWNlKGFycmF5TGlrZSkuZmlsdGVyKHByZWRpY2F0ZSlbMF07XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBhcHBseShmdW5jKSB7XG4gIHJldHVybiBmdW5jLmJpbmQobnVsbCwgLi4uc2xpY2UoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ3VtZW50cywgMSkpO1xufVxuXG5jb25zdCBuZXh0VGljayA9IHNldFRpbWVvdXQ7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcblxuZnVuY3Rpb24gcmFmKGZ1bmMpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHJldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuYyk7XG59XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlT2YodHlwZSwgc3ViamVjdCkge1xuICByZXR1cm4gdHlwZW9mIHN1YmplY3QgPT09JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB0eXBlO1xufVxuZnVuY3Rpb24gaXNPYmplY3Qoc3ViamVjdCkge1xuICByZXR1cm4gIScKICAgICAgICAgICAgICAgICAgICAgICAgYidpc051bGwoc3ViamVjdCkgJiYgdHlwZU9mKCJvYmplY3QiLCBzdWJqZWN0KTtcbn1cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmNvbnN0IGlzRnVuY3Rpb24gPSBhcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidwbHkodHlwZU9mLCAiZnVuY3Rpb24iKTtcbmNvbnN0IGlzU3RyaW5nID0gYXBwbHkodHlwZScKICAgICAgICAgICAgICAgICAgICAgICAgYidPZiwgInN0cmluZyIpO1xuY29uc3QgaXNVbmRlZmluZWQgPSBhcHBseSh0eXBlT2YsICJ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidkZWZpbmVkIik7XG5mdW5jdGlvbiBpc051bGwoc3ViamVjdCkge1xuICByZXR1cm4gcycKICAgICAgICAgICAgICAgICAgICAgICAgYid1YmplY3QgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHN1YmplYycKICAgICAgICAgICAgICAgICAgICAgICAgYid0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN1YmplY3QgaW5zdGFuY2VvZiAoc3ViaicKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3Qub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLkhUTUxFbGVtZW50JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgPyB2JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FsdWUgOiBbdmFsdWVdO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgaXRlcicKICAgICAgICAgICAgICAgICAgICAgICAgYidhdGVlKSB7XG4gIHRvQXJyYXkodmFsdWVzKS5mb3JFYWNoKGl0ZXJhdGVlKTtcbn1cblxuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Z1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICByZXR1cm4gYXJyYXkuaW5kJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V4T2YodmFsdWUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIHB1c2goYXJyYXksIGl0ZW1zKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICBhcnJheS5wdXNoKC4uLnRvQXJyYXkoaXRlbXMpKTtcbiAgcmV0dXJuIGFycicKICAgICAgICAgICAgICAgICAgICAgICAgYidheTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBhZGQpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGlmIChlbG0pIHtcbiAgICBmb3JFYWNoKGNsYXNzZXMsIChuYW1lKSA9PiB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgZWxtLmNsYXNzTGlzdFthZGQgPyAiYWRkIiA6JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAicmVtb3ZlIl0obmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0aW9uIGFkZENsYXNzKGVsbSwgY2xhc3Nlcykge1xuICB0b2dnbGVDbGFzcyhlbG0sIGlzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ1N0cmluZyhjbGFzc2VzKSA/IGNsYXNzZXMuc3BsaXQoIiAiKSA6IGNsYXNzZXMsIHRydWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgZm9yRScKICAgICAgICAgICAgICAgICAgICAgICAgYidhY2goY2hpbGRyZW4sIHBhcmVudC5hcHBlbmRDaGlsZC5iaW5kKHBhcmVudCkpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuZnVuY3Rpb24gYmVmb3JlKG5vZGVzLCByZWYpIHtcbiAgZm9yRWFjaChub2RlcycKICAgICAgICAgICAgICAgICAgICAgICAgYicsIChub2RlKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gKHJlZiB8fCBub2RlKS5wYXJlbicKICAgICAgICAgICAgICAgICAgICAgICAgYid0Tm9kZTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyZShub2RlLCByZWYpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXMoZScKICAgICAgICAgICAgICAgICAgICAgICAgYidsbSwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQoZWxtKSAmJiAoZWxtWycKICAgICAgICAgICAgICAgICAgICAgICAgYicibXNNYXRjaGVzU2VsZWN0b3IiXSB8fCBlbG0ubWF0Y2hlcykuY2FsbChlbG0sIHNlbGVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Rvcik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGNvbnN0IGNoaWxkcmVuMiA9IHBhcmVudCA/IHNsaWNlKHBhcmVudC5jaGlsZHJlbikgOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgW107XG4gIHJldHVybiBzZWxlY3RvciA/IGNoaWxkcmVuMi5maWx0ZXIoKGNoaWxkKSA9PicKICAgICAgICAgICAgICAgICAgICAgICAgYicgbWF0Y2hlcyhjaGlsZCwgc2VsZWN0b3IpKSA6IGNoaWxkcmVuMjtcbn1cblxuZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGNoaWxkKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gY2gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWxkcmVuKHBhcmVudCwgc2VsZWN0b3IpWzBdIDogcGFyZW50LmZpcnN0RWxlbWVudENoaScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZDtcbn1cblxuY29uc3Qgb3duS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5mdW5jdGlvbiBmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyT3duKG9iamVjdCwgaXRlcmF0ZWUsIHJpZ2h0KSB7XG4gIGlmIChvYmplY3QpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgKHJpZ2h0ID8gb3duS2V5cyhvYmplY3QpLnJldmVyc2UoKSA6IG93bktleXMob2JqJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdCkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAga2V5ICE9PSAiX19wcm90b19fIiAmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYgaXRlcmF0ZWUob2JqZWN0W2tleV0sIGtleSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dScKICAgICAgICAgICAgICAgICAgICAgICAgYidybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uIGFzc2lnbihvYmplY3QpIHtcbiAgc2xpY2UoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZ3VtZW50cywgMSkuZm9yRWFjaCgoc291cmNlKSA9PiB7XG4gICAgZm9yT3duKHNvdXJjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBvYmplY3Rba2V5XSA9IHNvdXJjZVtrZXldJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBvYmplY3Q7XG59XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBtZXJnZShvYmplY3QpIHtcbiAgc2xpY2UoYXJndW1lbnRzLCAxKS5mb3JFYWNoKChzb3VyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NlKSA9PiB7XG4gICAgZm9yT3duKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Uuc2xpY2UoKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgICBvYmplY3Rba2V5XSA9IG1lcmdlKHt9LCBpc09iamVjdChvYmplY3Rba2V5XSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gb2JqZWN0W2tleV0gOiB7fSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIG9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXMpIHsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGZvckVhY2goa2V5cyB8fCBvd25LZXlzKG9iamVjdCksIChrZXkpID0+IHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICAgZGVsZXRlIG9iamVjdFtrZXldO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQScKICAgICAgICAgICAgICAgICAgICAgICAgYid0dHJpYnV0ZShlbG1zLCBhdHRycykge1xuICBmb3JFYWNoKGVsbXMsIChlbG0pID0+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gICAgZm9yRWFjaChhdHRycywgKGF0dHIpID0+IHtcbiAgICAgIGVsbSAmJiBlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xtLnJlbW92ZUF0dHJpYnV0ZShhdHRyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBzZXRBdHRyaWJ1dGUoZWxtcywgYXR0cnMsIHZhbHVlKSB7XG4gIGlmIChpc09iamVjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QoYXR0cnMpKSB7XG4gICAgZm9yT3duKGF0dHJzLCAodmFsdWUyLCBuYW1lKSA9PiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgICAgc2V0QXR0cmlidXRlKGVsbXMsIG5hbWUsIHZhbHVlMik7XG4gICAgfSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuICB9IGVsc2Uge1xuICAgIGZvckVhY2goZWxtcywgKGVsbSkgPT4ge1xuICAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lzTnVsbCh2YWx1ZSkgfHwgdmFsdWUgPT09ICIiID8gcmVtb3ZlQXR0cmlidXRlKGVsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGF0dHJzKSA6IGVsbS5zZXRBdHRyaWJ1dGUoYXR0cnMsIFN0cmluZyh2YWx1ZSkpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGUodGFnLCBhdHRycywgcGFyZW50KScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICBjb25zdCBlbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpZiAoYXR0cnMpIHtcbiAgICBpc1N0cmluZyhhdHRycykgPyBhZGRDbGFzcyhlbG0sIGF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgYidycykgOiBzZXRBdHRyaWJ1dGUoZWxtLCBhdHRycyk7XG4gIH1cbiAgcGFyZW50ICYmICcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBlbmQocGFyZW50LCBlbG0pO1xuICByZXR1cm4gZWxtO1xufVxuXG5mdW5jdGlvbiBzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R5bGUoZWxtLCBwcm9wLCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsbSlbcHJvcF07XG4gIH1cbiAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmICghaXNOdWxsKHZhbHVlKSkge1xuICAgIGVsbS5zdHlsZVtwcm9wXSA9IGAke3ZhbHVlfScKICAgICAgICAgICAgICAgICAgICAgICAgYidgO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BsYXkoZWxtLCBkaXNwbGF5Mikge1xuICBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgYid5bGUoZWxtLCAiZGlzcGxheSIsIGRpc3BsYXkyKTtcbn1cblxuZnVuY3Rpb24gZm9jdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInKGVsbSkge1xuICBlbG1bInNldEFjdGl2ZSJdICYmIGVsbVsic2V0QWN0aXZlIl0oKSB8fCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxtLmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbn1cblxuZnVuY3Rpb24gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2dldEF0dHJpYnV0ZShlbG0sIGF0dHIpIHtcbiAgcmV0dXJuIGVsbS5nZXRBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F0dHIpO1xufVxuXG5mdW5jdGlvbiBoYXNDbGFzcyhlbG0sIGNsYXNzTmFtZSkge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGVsbSAmJiBlbG0uY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiByZWN0KHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0LmdldEInCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3VuZGluZ0NsaWVudFJlY3QoKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKG5vZGVzKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICBmb3JFYWNoKG5vZGVzLCAobm9kZSkgPT4ge1xuICAgIGlmIChub2RlICYmIG5vJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2RlLnBhcmVudE5vZGUpIHtcbiAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29kZSk7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbWVhc3VyZShwYXJlbnQsIHZhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2x1ZSkge1xuICBpZiAoaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgY29uc3QgZGl2ID0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NyZWF0ZSgiZGl2IiwgeyBzdHlsZTogYHdpZHRoOiAke3ZhbHVlfTsgcG9zaXRpb246IGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYnNvbHV0ZTtgIH0sIHBhcmVudCk7XG4gICAgdmFsdWUgPSByZWN0KGRpdikud2lkdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidoO1xuICAgIHJlbW92ZShkaXYpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHBhcnNlSHRtbChodG1sKSB7XG4gIHJldHVybiBjaGlsZChuZXcgRE9NUGFycycKICAgICAgICAgICAgICAgICAgICAgICAgYidlcigpLnBhcnNlRnJvbVN0cmluZyhodG1sLCAidGV4dC9odG1sIikuYm9keSk7XG59JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiBwcmV2ZW50KGUsIHN0b3BQcm9wYWdhdGlvbikge1xuICBlLnByZScKICAgICAgICAgICAgICAgICAgICAgICAgYid2ZW50RGVmYXVsdCgpO1xuICBpZiAoc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgZS5zdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXVlcnkocGFyZW50LCBzZWxlY3Rvcikge1xuICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIHBhcmVudCAmJiBwYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG5mdW5jdGlvbiBxdWVyeUFsbChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ24gc2VsZWN0b3IgPyBzbGljZShwYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvciknCiAgICAgICAgICAgICAgICAgICAgICAgIGInKSA6IFtdO1xufVxuXG5mdW5jdGlvbiByZW1vdmVDbGFzcyhlbG0sIGNsYXNzZXMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIHRvZ2dsZUNsYXNzKGVsbSwgY2xhc3NlcywgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGltZU9mKGUpIHtcbiAgcmV0dXJuIGUudGltZVN0YW1wO1xufVxuXG5mdW5jdGlvbiB1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidpdCh2YWx1ZSkge1xuICByZXR1cm4gaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgPyBgJHt2YWx1ZX1weGAgOiAiIjtcbn1cblxuY29uc3QgUFJPSkVDVF9DT0RFID0gInMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxpZGUiO1xuXG5mdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBpZiAoIWNvbmRpdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7UFJPSkVDVF9DJwogICAgICAgICAgICAgICAgICAgICAgICBiJ09ERX1dICR7bWVzc2FnZSB8fCAiIn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvcignCiAgICAgICAgICAgICAgICAgICAgICAgIGInbWVzc2FnZSkge1xuICBjb25zb2xlLmVycm9yKGBbJHtQUk9KRUNUX0NPREV9XSAke21lc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYWdlfWApO1xufVxuXG5jb25zdCB7IG1pbiwgbWF4LCBmbG9vciwgY2VpbCwgYWJzIH0gJwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gTWF0aDtcblxuZnVuY3Rpb24gYXBwcm94aW1hdGVseUVxdWFsKHgsIHksIGVwc2lsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uKSB7XG4gIHJldHVybiBhYnMoeCAtIHkpIDwgZXBzaWxvbjtcbn1cblxuZnVuY3Rpb24nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGJldHdlZW4obnVtYmVyLCB4LCB5LCBleGNsdXNpdmUpIHtcbiAgY29uc3QgbWluaW11bSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPSBtaW4oeCwgeSk7XG4gIGNvbnN0IG1heGltdW0gPSBtYXgoeCwgeSk7XG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gZXhjbHVzaXZlID8gbWluaW11bSA8IG51bWJlciAmJiBudW1iZXIgPCBtYXhpbXVtICcKICAgICAgICAgICAgICAgICAgICAgICAgYic6IG1pbmltdW0gPD0gbnVtYmVyICYmIG51bWJlciA8PSBtYXhpbXVtO1xufVxuXG5mdW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInY3Rpb24gY2xhbXAobnVtYmVyLCB4LCB5KSB7XG4gIGNvbnN0IG1pbmltdW0gPSBtaW4oeCwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHkpO1xuICBjb25zdCBtYXhpbXVtID0gbWF4KHgsIHkpO1xuICByZXR1cm4gbWluKG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXgobWluaW11bSwgbnVtYmVyKSwgbWF4aW11bSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24oJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3gpIHtcbiAgcmV0dXJuICsoeCA+IDApIC0gKyh4IDwgMCk7XG59XG5cbmZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInYW1lbFRvS2ViYWIoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKFthLXonCiAgICAgICAgICAgICAgICAgICAgICAgIGInMC05XSkoW0EtWl0pL2csICIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBmb3JtYXQoc3RyaW5nLCByZXBsYWNlbWVudHMpIHtcbiAgZm9yRWFjaChyZXBsYWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lbnRzLCAocmVwbGFjZW1lbnQpID0+IHtcbiAgICBzdHJpbmcgPSBzdHJpbmcucmVwbGFjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2UoIiVzIiwgYCR7cmVwbGFjZW1lbnR9YCk7XG4gIH0pO1xuICByZXR1cm4gc3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gcGFkKG51bWJlcikge1xuICByZXR1cm4gbnVtYmVyIDwgMTAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID8gYDAke251bWJlcn1gIDogYCR7bnVtYmVyfWA7XG59XG5cbmNvbnN0IGlkcyA9IHt9JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbmZ1bmN0aW9uIHVuaXF1ZUlkKHByZWZpeCkge1xuICByZXR1cm4gYCR7cHJlZml4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ30ke3BhZChpZHNbcHJlZml4XSA9IChpZHNbcHJlZml4XSB8fCAwKSArIDEpfWA7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG5leHBvcnQgeyBhYnMsIGFkZENsYXNzLCBhcHBlbmQsIGFwcGx5LCBhcHByb3gnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaW1hdGVseUVxdWFsLCBhc3NlcnQsIGFzc2lnbiwgYmVmb3JlLCBiZXR3ZWVuLCBjYW1lbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidUb0tlYmFiLCBjZWlsLCBjaGlsZCwgY2hpbGRyZW4sIGNsYW1wLCBjcmVhdGUsIGRpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5LCBlbXB0eSwgZXJyb3IsIGZpbmQsIGZsb29yLCBmb2N1cywgZm9yRWFjaCwgZm9yT3cnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbiwgZm9ybWF0LCBnZXRBdHRyaWJ1dGUsIGhhc0NsYXNzLCBpbmNsdWRlcywgaXNBcnJheScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGlzRnVuY3Rpb24sIGlzSFRNTEVsZW1lbnQsIGlzTnVsbCwgaXNPYmplY3QsIGlzU3RyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2luZywgaXNVbmRlZmluZWQsIG1hdGNoZXMsIG1heCwgbWVhc3VyZSwgbWVyZ2UsIG1pbiwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIG5leHRUaWNrLCBub29wLCBvbWl0LCBvd25LZXlzLCBwYWQsIHBhcnNlSHRtbCwgcHJldicKICAgICAgICAgICAgICAgICAgICAgICAgYidlbnQsIHB1c2gsIHF1ZXJ5LCBxdWVyeUFsbCwgcmFmLCByZWN0LCByZW1vdmUsIHJlbW92JwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VBdHRyaWJ1dGUsIHJlbW92ZUNsYXNzLCBzZXRBdHRyaWJ1dGUsIHNpZ24sIHNsaWNlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc3R5bGUsIHRpbWVPZiwgdG9BcnJheSwgdG9nZ2xlQ2xhc3MsIHVuaXF1ZUlkLCB1bml0ICcKICAgICAgICAgICAgICAgICAgICAgICAgYid9O1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3V0aWxzL3NwbGlkZS11dGlscy5lc20uanMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYidmdW5jdGlvbiBlbXB0eShhcnJheSkge1xuICBhcnJheS5sZW5ndGggPSAwO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ31cblxuZnVuY3Rpb24gc2xpY2UoYXJyYXlMaWtlLCBzdGFydCwgZW5kKSB7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJyYXlMaWtlLCBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcnQsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIGZpbmQoYXJyYXlMaWtlLCBwcmVkaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjYXRlKSB7XG4gIHJldHVybiBzbGljZShhcnJheUxpa2UpLmZpbHRlcihwcmVkaWNhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RlKVswXTtcbn1cblxuZnVuY3Rpb24gYXBwbHkoZnVuYykge1xuICByZXR1cm4gZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmMuYmluZChudWxsLCAuLi5zbGljZShhcmd1bWVudHMsIDEpKTtcbn1cblxuYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbnN0IG5leHRUaWNrID0gc2V0VGltZW91dDtcblxuY29uc3Qgbm9vcCA9ICgpID0+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG59O1xuXG5mdW5jdGlvbiByYWYoZnVuYykge1xuICByZXR1cm4gcmVxdWVzdEEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbmltYXRpb25GcmFtZShmdW5jKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHR5cGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBzdWJqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gdHlwZTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAhaXNOdWxsKHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWJqZWN0KSAmJiB0eXBlT2YoIm9iamVjdCIsIHN1YmplY3QpO1xufVxuY29uc3QgaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuY29uc3QgaXNGdW5jdGlvbiA9IGFwcGx5KCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0eXBlT2YsICJmdW5jdGlvbiIpO1xuY29uc3QgaXNTdHJpbmcgPSBhcHBseSh0eXBlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ09mLCAic3RyaW5nIik7XG5jb25zdCBpc1VuZGVmaW5lZCA9IGFwcGx5KHR5cGVPZiwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICJ1bmRlZmluZWQiKTtcbmZ1bmN0aW9uIGlzTnVsbChzdWJqZWN0KSB7XG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gc3ViamVjdCA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQoc3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmplY3QpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3ViamVjdCBpbnN0YW5jZW9mICgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc3ViamVjdC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdykuSFRNJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0xFbGVtZW50O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgfVxufVxuXG5mdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XG59XG5cbmZ1bmN0aW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmb3JFYWNoKHZhbHVlcywgaXRlcmF0ZWUpIHtcbiAgdG9BcnJheSh2YWx1ZXMpLmZvJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKGl0ZXJhdGVlKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXMoYXJyYXksJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB2YWx1ZSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgPiAtMScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG59XG5cbmZ1bmN0aW9uIHB1c2goYXJyYXksIGl0ZW1zKSB7XG4gIGFycmF5LnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndXNoKC4uLnRvQXJyYXkoaXRlbXMpKTtcbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBhZGQpIHtcbiAgaWYgKGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG0pIHtcbiAgICBmb3JFYWNoKGNsYXNzZXMsIChuYW1lKSA9PiB7XG4gICAgICBpZiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKG5hbWUpIHtcbiAgICAgICAgZWxtLmNsYXNzTGlzdFthZGQgPyAiYWRkIiA6ICJyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtb3ZlIl0obmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGFkZENsYXNzKGVsbSwgY2xhc3Nlcykge1xuICB0b2dnbGVDbGFzcyhlbG0sIGlzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1N0cmluZyhjbGFzc2VzKSA/IGNsYXNzZXMuc3BsaXQoIiAiKSA6IGNsYXNzZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0cnVlKTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kKHBhcmVudCwgY2hpbGRyZW4pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIGZvckVhY2goY2hpbGRyZW4sIHBhcmVudC5hcHBlbmRDaGlsZC5iaW5kKHBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnQpKTtcbn1cblxuZnVuY3Rpb24gYmVmb3JlKG5vZGVzLCByZWYpIHtcbiAgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvckVhY2gobm9kZXMsIChub2RlKSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gKHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2YgfHwgbm9kZSkucGFyZW50Tm9kZTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50Lmluc2VydEJlZm9yZShub2RlLCByZWYpO1xuICAgIH1cbiAgfSk7XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiBtYXRjaGVzKGVsbSwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBpc0hUTUxFbGVtZW50KGVsbSkgJiYgKGVsbVsibXNNYXRjaGVzU2VsZWN0b3IiXScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgfHwgZWxtLm1hdGNoZXMpLmNhbGwoZWxtLCBzZWxlY3Rvcik7XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBjaGlsZHJlbihwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIGNvbnN0IGNoaWxkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbjIgPSBwYXJlbnQgPyBzbGljZShwYXJlbnQuY2hpbGRyZW4pIDogW107XG4gIHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbjIuZmlsdGVyKChjaGlsZCkgPT4gbWF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NoZXMoY2hpbGQsIHNlbGVjdG9yKSkgOiBjaGlsZHJlbjI7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiBjaGlsZChwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPyBjaGlsZHJlbihwYXJlbnQsIHNlbGVjdG9yKVswXSA6IHBhcmVudC5maXJzdEVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VtZW50Q2hpbGQ7XG59XG5cbmNvbnN0IG93bktleXMgPSBPYmplY3Qua2V5cztcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbmZ1bmN0aW9uIGZvck93bihvYmplY3QsIGl0ZXJhdGVlLCByaWdodCkge1xuICBpZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgKG9iamVjdCkge1xuICAgIChyaWdodCA/IG93bktleXMob2JqZWN0KS5yZXZlcnNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJygpIDogb3duS2V5cyhvYmplY3QpKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZXJhdGVlKG9iamVjdFtrZXldLCBrZXkpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbiBhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NzaWduKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goKHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3VyY2UpID0+IHtcbiAgICBmb3JPd24oc291cmNlLCAodmFsdWUsIGtleSkgPT4geycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAgfSk7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gbWVyZ2Uob2JqZWMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndCkge1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goKHNvdXJjZSkgPT4geycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBmb3JPd24oc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlLnNsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2ljZSgpO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIG9iamVjdFtrZXldID0gbWVyZ2Uoe30sIGlzT2JqZWN0KG9iamVjdFtrZXldKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgPyBvYmplY3Rba2V5XSA6IHt9LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICByZXR1cm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGtleXMpIHtcbiAgZm9yRWFjaChrZXlzIHx8IG93bktleXMob2JqZWN0KSwgKGtleScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpID0+IHtcbiAgICBkZWxldGUgb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gcmVtb3ZlQXR0cmlidXRlKGVsbXMsIGF0dHJzKSB7XG4gIGZvckVhY2goZWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbXMsIChlbG0pID0+IHtcbiAgICBmb3JFYWNoKGF0dHJzLCAoYXR0cikgPT4ge1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInICAgIGVsbSAmJiBlbG0ucmVtb3ZlQXR0cmlidXRlKGF0dHIpO1xuICAgIH0pO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfSk7XG59XG5cbmZ1bmN0aW9uIHNldEF0dHJpYnV0ZShlbG1zLCBhdHRycywgdmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKSB7XG4gIGlmIChpc09iamVjdChhdHRycykpIHtcbiAgICBmb3JPd24oYXR0cnMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCAodmFsdWUyLCBuYW1lKSA9PiB7XG4gICAgICBzZXRBdHRyaWJ1dGUoZWxtcywgbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbWUsIHZhbHVlMik7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZm9yRWFjaCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZWxtcywgKGVsbSkgPT4ge1xuICAgICAgaXNOdWxsKHZhbHVlKSB8fCB2YWx1ZSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz09ICIiID8gcmVtb3ZlQXR0cmlidXRlKGVsbSwgYXR0cnMpIDogZWxtLnNldEF0dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaWJ1dGUoYXR0cnMsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH0pO1xuICB9XG59XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBjcmVhdGUodGFnLCBhdHRycywgcGFyZW50KSB7XG4gIGNvbnN0IGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG4gIGlmIChhdHRycykgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBpc1N0cmluZyhhdHRycykgPyBhZGRDbGFzcyhlbG0sIGF0dHJzKSA6IHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RBdHRyaWJ1dGUoZWxtLCBhdHRycyk7XG4gIH1cbiAgcGFyZW50ICYmIGFwcGVuZChwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FyZW50LCBlbG0pO1xuICByZXR1cm4gZWxtO1xufVxuXG5mdW5jdGlvbiBzdHlsZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoZWxtLCBwcm9wLCB2YWx1ZSkge1xuICBpZiAoaXNVbmRlZmluZWQodmFsdWUpKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIHJldHVybiBnZXRDb21wdXRlZFN0eWxlKGVsbSlbcHJvcF07XG4gIH0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gIGlmICghaXNOdWxsKHZhbHVlKSkge1xuICAgIGVsbS5zdHlsZVtwcm9wXSA9IGAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJHt2YWx1ZX1gO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BsYXkoZWxtLCBkaXNwJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xheTIpIHtcbiAgc3R5bGUoZWxtLCAiZGlzcGxheSIsIGRpc3BsYXkyKTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIGZvY3VzKGVsbSkge1xuICBlbG1bInNldEFjdGl2ZSJdICYnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJiBlbG1bInNldEFjdGl2ZSJdKCkgfHwgZWxtLmZvY3VzKHsgcHJldmVudFNjcm9sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2w6IHRydWUgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbG0sIGF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyKSB7XG4gIHJldHVybiBlbG0uZ2V0QXR0cmlidXRlKGF0dHIpO1xufVxuXG5mdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduY3Rpb24gaGFzQ2xhc3MoZWxtLCBjbGFzc05hbWUpIHtcbiAgcmV0dXJuIGVsbSAmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyYgZWxtLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xufVxuXG5mdW5jJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24gcmVjdCh0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldC5nZXRCb3VuZGluZ0MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZShub2Rlcykge1xuICBmJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yRWFjaChub2RlcywgKG5vZGUpID0+IHtcbiAgICBpZiAobm9kZSAmJiBub2RlLnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnROb2RlKSB7XG4gICAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG1lYXN1cmUocGFyZW50JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgdmFsdWUpIHtcbiAgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIGNvbnN0IGRpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3YgPSBjcmVhdGUoImRpdiIsIHsgc3R5bGU6IGB3aWR0aDogJHt2YWx1ZX07IHBvcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGlvbjogYWJzb2x1dGU7YCB9LCBwYXJlbnQpO1xuICAgIHZhbHVlID0gcmVjdChkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2l2KS53aWR0aDtcbiAgICByZW1vdmUoZGl2KTtcbiAgfVxuICByZXR1cm4gdmFsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUh0bWwoaHRtbCkge1xuICByZXR1cm4gYycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoaWxkKG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgInRleHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInL2h0bWwiKS5ib2R5KTtcbn1cblxuZnVuY3Rpb24gcHJldmVudChlLCBzdG9wUHInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb3BhZ2F0aW9uKSB7XG4gIGUucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKHN0b3BQcm8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncGFnYXRpb24pIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGUuc3RvcEknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXJ5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyhwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBwYXJlbnQgJiYgcGFyZW50LnEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gcXVlcnlBbGwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gc2xpY2UocCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkgOiBbXTtcbn1cblxuZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bmN0aW9uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICB0b2dnbGVDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MoZWxtLCBjbGFzc2VzLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHRpbWVPZihlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICByZXR1cm4gZS50aW1lU3RhbXA7XG59XG5cbmZ1bmN0aW9uIHVuaXQodicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlKSB7XG4gIHJldHVybiBpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA/IGAke3ZhbHVlfXB4YCA6ICIiO1xufVxuXG5jb25zdCBQUk9KRUNUX0NPREUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gInNwbGlkZSI7XG5cbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB7XG4gIGlmICghY29uZGl0aW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBbJHtQJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1JPSkVDVF9DT0RFfV0gJHttZXNzYWdlIHx8ICIifWApO1xuICB9XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBlcnJvcihtZXNzYWdlKSB7XG4gIGNvbnNvbGUuZXJyb3IoYFske1BST0pFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0NUX0NPREV9XSAke21lc3NhZ2V9YCk7XG59XG5cbmNvbnN0IHsgbWluLCBtYXgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmbG9vciwgY2VpbCwgYWJzIH0gPSBNYXRoO1xuXG5mdW5jdGlvbiBhcHByb3hpbWF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgcmV0dXJuIGFicyh4IC0geSkgPCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXBzaWxvbjtcbn1cblxuZnVuY3Rpb24gYmV0d2VlbihudW1iZXIsIHgsIHksIGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneGNsdXNpdmUpIHtcbiAgY29uc3QgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgY29uc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIG1heGltdW0gPSBtYXgoeCwgeSk7XG4gIHJldHVybiBleGNsdXNpdmUgPyBtaW5pbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bSA8IG51bWJlciAmJiBudW1iZXIgPCBtYXhpbXVtIDogbWluaW11bSA8PSBudW0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyICYmIG51bWJlciA8PSBtYXhpbXVtO1xufVxuXG5mdW5jdGlvbiBjbGFtcCgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbnVtYmVyLCB4LCB5KSB7XG4gIGNvbnN0IG1pbmltdW0gPSBtaW4oeCwgeSk7XG4gIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInb25zdCBtYXhpbXVtID0gbWF4KHgsIHkpO1xuICByZXR1cm4gbWluKG1heChtaW5pbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid1bSwgbnVtYmVyKSwgbWF4aW11bSk7XG59XG5cbmZ1bmN0aW9uIHNpZ24oeCkgeycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgcmV0dXJuICsoeCA+IDApIC0gKyh4IDwgMCk7XG59XG5cbmZ1bmN0aW9uIGMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYW1lbFRvS2ViYWIoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidbYS16MC05XSkoW0EtWl0pL2csICIkMS0kMiIpLnRvTG93ZXJDYXNlKCk7XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxuXG5mdW5jdGlvbiBmb3JtYXQoc3RyaW5nLCByZXBsYWNlbWVudHMpIHtcbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGZvckVhY2gocmVwbGFjZW1lbnRzLCAocmVwbGFjZW1lbnQpID0+IHtcbiAgICBzdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyaW5nID0gc3RyaW5nLnJlcGxhY2UoIiVzIiwgYCR7cmVwbGFjZW1lbnR9YCk7XG4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB9KTtcbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZnVuY3Rpb24gcGFkKG51bWJlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgcmV0dXJuIG51bWJlciA8IDEwID8gYDAke251bWJlcn1gIDogYCR7bnVtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Jlcn1gO1xufVxuXG5jb25zdCBpZHMgPSB7fTtcbmZ1bmN0aW9uIHVuaXF1ZUlkKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwcmVmaXgpIHtcbiAgcmV0dXJuIGAke3ByZWZpeH0ke3BhZChpZHNbcHJlZml4XSA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAoaWRzW3ByZWZpeF0gfHwgMCkgKyAxKX1gO1xufVxuXG5leHBvcnQgeyBhYnMsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhZGRDbGFzcywgYXBwZW5kLCBhcHBseSwgYXBwcm94aW1hdGVseUVxdWFsLCBhcycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzZXJ0LCBhc3NpZ24sIGJlZm9yZSwgYmV0d2VlbiwgY2FtZWxUb0tlYmFiLCBjZWknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbCwgY2hpbGQsIGNoaWxkcmVuLCBjbGFtcCwgY3JlYXRlLCBkaXNwbGF5LCBlbXB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ksIGVycm9yLCBmaW5kLCBmbG9vciwgZm9jdXMsIGZvckVhY2gsIGZvck93biwgZicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcm1hdCwgZ2V0QXR0cmlidXRlLCBoYXNDbGFzcywgaW5jbHVkZXMsIGlzQXJyYXknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInLCBpc0Z1bmN0aW9uLCBpc0hUTUxFbGVtZW50LCBpc051bGwsIGlzT2JqZWN0LCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NTdHJpbmcsIGlzVW5kZWZpbmVkLCBtYXRjaGVzLCBtYXgsIG1lYXN1cmUsIG1lcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZSwgbWluLCBuZXh0VGljaywgbm9vcCwgb21pdCwgb3duS2V5cywgcGFkLCBwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInc2VIdG1sLCBwcmV2ZW50LCBwdXNoLCBxdWVyeSwgcXVlcnlBbGwsIHJhZiwgcmVjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QsIHJlbW92ZSwgcmVtb3ZlQXR0cmlidXRlLCByZW1vdmVDbGFzcywgc2V0QXR0cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpYnV0ZSwgc2lnbiwgc2xpY2UsIHN0eWxlLCB0aW1lT2YsIHRvQXJyYXksIHRvZ2cnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbGVDbGFzcywgdW5pcXVlSWQsIHVuaXQgfTtcbicsCiAgICAgICAgICAgICAgICAnRGVzdFBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdGaWxlTmFtZSc6ICdBMDAwMDAxMDI3MDAxMDAxL3dzL3NyYy9zcGxpZGVqcy9zcGxpZGUvZGlzdC9qcy91dGlscy9zcGxpZGUtdXRpbHMuZXNtLmpzJywKICAgICAgICAgICAgICAgICdJc1RleHQnOiAxLAogICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgJ05lZWRDb3B5JzogMSwKICAgICAgICAgICAgICAgICdSZW1vdmVBZnRlckNvcHknOiAwLAogICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdJbmNsdWRlJywKICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciBjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIGZpeGVkICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNTc2cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7IHBhZGRpbmc6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgV2lkZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU2NyZWVucyAqLyBAbWVkaWEgb25seSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NyZWVuIGFuZCAobWluLXdpZHRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc6IDk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7IHBhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fSwKIDM4OiB7J2VuJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICdDb250ZW50JzogYiIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnXyIKICAgICAgICAgICAgICAgICAgICAgICAgYiJfZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBlbXB0eShhciIKICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkpIHtcbiAgYXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gc2xpY2UoYXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5TGlrZSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5jYWxsKGFycmF5TGlrZSwgc3RhcnQsIGVuZCk7XG59XG5cbmZ1bmN0aW9uIGZpbmQoYScKICAgICAgICAgICAgICAgICAgICAgICAgYidycmF5TGlrZSwgcHJlZGljYXRlKSB7XG4gIHJldHVybiBzbGljZShhcnJheUxpa2UpLmZpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYid0ZXIocHJlZGljYXRlKVswXTtcbn1cblxuZnVuY3Rpb24gYXBwbHkoZnVuYykge1xuICByJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0dXJuIGZ1bmMuYmluZChudWxsLCAuLi5zbGljZShhcmd1bWVudHMsIDEpKTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmNvbnN0IG5leHRUaWNrID0gc2V0VGltZW91dDtcblxuY29uc3Qgbm9vcCA9ICgpICcKICAgICAgICAgICAgICAgICAgICAgICAgYic9PiB7XG59O1xuXG5mdW5jdGlvbiByYWYoZnVuYykge1xuICByZXR1cm4gcmVxdWVzdEFuJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2ltYXRpb25GcmFtZShmdW5jKTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHR5cGUsIHN1YicKICAgICAgICAgICAgICAgICAgICAgICAgYidqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygc3ViamVjdCA9PT0gdHlwZTtcbn1cbmZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiBpc09iamVjdChzdWJqZWN0KSB7XG4gIHJldHVybiAhaXNOdWxsKHN1YmplY3QpICYnCiAgICAgICAgICAgICAgICAgICAgICAgIGInJiB0eXBlT2YoIm9iamVjdCIsIHN1YmplY3QpO1xufVxuY29uc3QgaXNBcnJheSA9IEEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJheS5pc0FycmF5O1xuY29uc3QgaXNGdW5jdGlvbiA9IGFwcGx5KHR5cGVPZiwgImZ1bmMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGlvbiIpO1xuY29uc3QgaXNTdHJpbmcgPSBhcHBseSh0eXBlT2YsICJzdHJpbmciKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG5jb25zdCBpc1VuZGVmaW5lZCA9IGFwcGx5KHR5cGVPZiwgInVuZGVmaW5lZCIpJwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbmZ1bmN0aW9uIGlzTnVsbChzdWJqZWN0KSB7XG4gIHJldHVybiBzdWJqZWN0ID09JwogICAgICAgICAgICAgICAgICAgICAgICBiJz0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQoc3ViamVjdCkge1xuICB0cicKICAgICAgICAgICAgICAgICAgICAgICAgYid5IHtcbiAgICByZXR1cm4gc3ViamVjdCBpbnN0YW5jZW9mIChzdWJqZWN0Lm93bmVyRG9jdScKICAgICAgICAgICAgICAgICAgICAgICAgYidtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdykuSFRNTEVsZW1lbnQ7XG4gIH0gY2F0Y2ggKCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkodicKICAgICAgICAgICAgICAgICAgICAgICAgYidhbHVlKSB7XG4gIHJldHVybiBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ107XG59XG5cbmZ1bmN0aW9uIGZvckVhY2godmFsdWVzLCBpdGVyYXRlZSkge1xuICB0b0EnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnJheSh2YWx1ZXMpLmZvckVhY2goaXRlcmF0ZWUpO1xufVxuXG5mdW5jdGlvbiBpbmNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3VkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHJldHVybiBhcnJheS5pbmRleE9mKHZhbHVlKSA+JwogICAgICAgICAgICAgICAgICAgICAgICBiJyAtMTtcbn1cblxuZnVuY3Rpb24gcHVzaChhcnJheSwgaXRlbXMpIHtcbiAgYXJyYXkucHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInc2goLi4udG9BcnJheShpdGVtcykpO1xuICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgYidvbiB0b2dnbGVDbGFzcyhlbG0sIGNsYXNzZXMsIGFkZCkge1xuICBpZiAoZWxtKSB7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIGZvckVhY2goY2xhc3NlcywgKG5hbWUpID0+IHtcbiAgICAgIGlmIChuYW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgICAgICBlbG0uY2xhc3NMaXN0W2FkZCA/ICJhZGQiIDogInJlbW92ZSJdKG5hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MoZWxtLCBjbGFzc2VzKSB7XG4gIHRvZ2dsZUNsYXNzKGVsbSwgaXNTdHJpbmcoY2xhc3NlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3MpID8gY2xhc3Nlcy5zcGxpdCgiICIpIDogY2xhc3NlcywgdHJ1ZSk7XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBhcHBlbmQocGFyZW50LCBjaGlsZHJlbikge1xuICBmb3JFYWNoKGNoaWxkcmVuLCcKICAgICAgICAgICAgICAgICAgICAgICAgYicgcGFyZW50LmFwcGVuZENoaWxkLmJpbmQocGFyZW50KSk7XG59XG5cbmZ1bmN0aW9uIGInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWZvcmUobm9kZXMsIHJlZikge1xuICBmb3JFYWNoKG5vZGVzLCAobm9kZSkgPT4geycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICBjb25zdCBwYXJlbnQgPSAocmVmIHx8IG5vZGUpLnBhcmVudE5vZGU7XG4gICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGlmIChwYXJlbnQpIHtcbiAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgcmVmKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgfVxuICB9KTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyhlbG0sIHNlbGVjdG9yKScKICAgICAgICAgICAgICAgICAgICAgICAgYicge1xuICByZXR1cm4gaXNIVE1MRWxlbWVudChlbG0pICYmIChlbG1bIm1zTWF0Y2hlc1NlbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlY3RvciJdIHx8IGVsbS5tYXRjaGVzKS5jYWxsKGVsbSwgc2VsZWN0b3IpO1xufVxuXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZnVuY3Rpb24gY2hpbGRyZW4ocGFyZW50LCBzZWxlY3Rvcikge1xuICBjb25zdCBjaGlsZHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW4yID0gcGFyZW50ID8gc2xpY2UocGFyZW50LmNoaWxkcmVuKSA6IFtdO1xuICByZXR1cm4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHNlbGVjdG9yID8gY2hpbGRyZW4yLmZpbHRlcigoY2hpbGQpID0+IG1hdGNoZXMoY2hpbCcKICAgICAgICAgICAgICAgICAgICAgICAgYidkLCBzZWxlY3RvcikpIDogY2hpbGRyZW4yO1xufVxuXG5mdW5jdGlvbiBjaGlsZChwYXInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LCBzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbihwYXJlbnQnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBzZWxlY3RvcilbMF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbmNvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ25zdCBvd25LZXlzID0gT2JqZWN0LmtleXM7XG5cbmZ1bmN0aW9uIGZvck93bihvYmplJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2N0LCBpdGVyYXRlZSwgcmlnaHQpIHtcbiAgaWYgKG9iamVjdCkge1xuICAgIChyaWdoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPyBvd25LZXlzKG9iamVjdCkucmV2ZXJzZSgpIDogb3duS2V5cyhvYmplY3QpKS5mb3InCiAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaCgoa2V5KSA9PiB7XG4gICAgICBrZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZXJhdGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZShvYmplY3Rba2V5XSwga2V5KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gb2JqZWN0JwogICAgICAgICAgICAgICAgICAgICAgICBiJztcbn1cblxuZnVuY3Rpb24gYXNzaWduKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCAxKS5mb3JFYWNoKChzb3VyY2UpID0+IHtcbiAgICBmb3JPd24oc291cmNlLCAodmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInLCBrZXkpID0+IHtcbiAgICAgIG9iamVjdFtrZXldID0gc291cmNlW2tleV07XG4gICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gbWVyZ2Uob2InCiAgICAgICAgICAgICAgICAgICAgICAgIGInamVjdCkge1xuICBzbGljZShhcmd1bWVudHMsIDEpLmZvckVhY2goKHNvdXJjZSkgPScKICAgICAgICAgICAgICAgICAgICAgICAgYic+IHtcbiAgICBmb3JPd24oc291cmNlLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaScKICAgICAgICAgICAgICAgICAgICAgICAgYidmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlLnNsaScKICAgICAgICAgICAgICAgICAgICAgICAgYidjZSgpO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICcKICAgICAgICAgICAgICAgICAgICAgICAgYicgIG9iamVjdFtrZXldID0gbWVyZ2Uoe30sIGlzT2JqZWN0KG9iamVjdFtrZXldKSA/IG9iJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3Rba2V5XSA6IHt9LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG4gIHJldHUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncm4gb2JqZWN0O1xufVxuXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5cykge1xuICBmbycKICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaChrZXlzIHx8IG93bktleXMob2JqZWN0KSwgKGtleSkgPT4ge1xuICAgIGRlbGV0ZScKICAgICAgICAgICAgICAgICAgICAgICAgYicgb2JqZWN0W2tleV07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VsbXMsIGF0dHJzKSB7XG4gIGZvckVhY2goZWxtcywgKGVsbSkgPT4ge1xuICAgIGZvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JFYWNoKGF0dHJzLCAoYXR0cikgPT4ge1xuICAgICAgZWxtICYmIGVsbS5yZW1vdmVBdHRyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2lidXRlKGF0dHIpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc2V0QXR0cmliJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3V0ZShlbG1zLCBhdHRycywgdmFsdWUpIHtcbiAgaWYgKGlzT2JqZWN0KGF0dHJzKSknCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgICBmb3JPd24oYXR0cnMsICh2YWx1ZTIsIG5hbWUpID0+IHtcbiAgICAgIHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUoZWxtcywgbmFtZSwgdmFsdWUyKTtcbiAgICB9KTtcbiAgfSBlbHMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZSB7XG4gICAgZm9yRWFjaChlbG1zLCAoZWxtKSA9PiB7XG4gICAgICBpc051bGwodmEnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbHVlKSB8fCB2YWx1ZSA9PT0gIiIgPyByZW1vdmVBdHRyaWJ1dGUoZWxtLCBhdHRycykgOicKICAgICAgICAgICAgICAgICAgICAgICAgYicgZWxtLnNldEF0dHJpYnV0ZShhdHRycywgU3RyaW5nKHZhbHVlKSk7XG4gICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZSh0YWcsIGF0dHJzLCBwYXJlbnQpIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGVsbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKTtcbiAgaWYgKGF0dHJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJykge1xuICAgIGlzU3RyaW5nKGF0dHJzKSA/IGFkZENsYXNzKGVsbSwgYXR0cnMpIDogc2V0JwogICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShlbG0sIGF0dHJzKTtcbiAgfVxuICBwYXJlbnQgJiYgYXBwZW5kKHBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3JlbnQsIGVsbSk7XG4gIHJldHVybiBlbG07XG59XG5cbmZ1bmN0aW9uIHN0eWxlKGVsbSwnCiAgICAgICAgICAgICAgICAgICAgICAgIGInIHByb3AsIHZhbHVlKSB7XG4gIGlmIChpc1VuZGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxtKVtwcm9wXTtcbiAgfVxuICBpZiAoIWknCiAgICAgICAgICAgICAgICAgICAgICAgIGInc051bGwodmFsdWUpKSB7XG4gICAgZWxtLnN0eWxlW3Byb3BdID0gYCR7dmFsdWV9YCcKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGxheShlbG0sIGRpc3BsYXkyKSB7XG4gIHN0eScKICAgICAgICAgICAgICAgICAgICAgICAgYidsZShlbG0sICJkaXNwbGF5IiwgZGlzcGxheTIpO1xufVxuXG5mdW5jdGlvbiBmb2N1cygnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWxtKSB7XG4gIGVsbVsic2V0QWN0aXZlIl0gJiYgZWxtWyJzZXRBY3RpdmUiXSgpIHx8IGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInbG0uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiBnJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2V0QXR0cmlidXRlKGVsbSwgYXR0cikge1xuICByZXR1cm4gZWxtLmdldEF0dHJpYnV0ZShhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3R0cik7XG59XG5cbmZ1bmN0aW9uIGhhc0NsYXNzKGVsbSwgY2xhc3NOYW1lKSB7XG4gIHInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXR1cm4gZWxtICYmIGVsbS5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIHJlY3QodGFyZ2V0KSB7XG4gIHJldHVybiB0YXJnZXQuZ2V0Qm8nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndW5kaW5nQ2xpZW50UmVjdCgpO1xufVxuXG5mdW5jdGlvbiByZW1vdmUobm9kZXMpIHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgYicgIGZvckVhY2gobm9kZXMsIChub2RlKSA9PiB7XG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYScKICAgICAgICAgICAgICAgICAgICAgICAgYidyZW50Tm9kZSkge1xuICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtZWFzdXJlKHBhcmVudCwgdmFsdWUpICcKICAgICAgICAgICAgICAgICAgICAgICAgYid7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICBjb25zdCBkaXYgPSBjcmVhdCcKICAgICAgICAgICAgICAgICAgICAgICAgYidlKCJkaXYiLCB7IHN0eWxlOiBgd2lkdGg6ICR7dmFsdWV9OyBwb3NpdGlvbjogYWJzb2x1JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3RlO2AgfSwgcGFyZW50KTtcbiAgICB2YWx1ZSA9IHJlY3QoZGl2KS53aWR0aDtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgcmVtb3ZlKGRpdik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fyc2VIdG1sKGh0bWwpIHtcbiAgcmV0dXJuIGNoaWxkKG5ldyBET01QYXJzZXIoKS5wYXJzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VGcm9tU3RyaW5nKGh0bWwsICJ0ZXh0L2h0bWwiKS5ib2R5KTtcbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduIHByZXZlbnQoZSwgc3RvcFByb3BhZ2F0aW9uKSB7XG4gIGUucHJldmVudERlZmF1bHQoKScKICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gIGlmIChzdG9wUHJvcGFnYXRpb24pIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbicKICAgICAgICAgICAgICAgICAgICAgICAgYicoKTtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICB9XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBxdWVyeShwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJldHVybiBwYXJlbnQgJiYgcCcKICAgICAgICAgICAgICAgICAgICAgICAgYidhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn1cblxuZnVuY3Rpb24gcXVlcnknCiAgICAgICAgICAgICAgICAgICAgICAgIGInQWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmV0dXJuIHNlbGVjdG9yID8gc2xpY2UocGEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSkgOiBbXTtcbn1cblxuZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29uIHJlbW92ZUNsYXNzKGVsbSwgY2xhc3Nlcykge1xuICB0b2dnbGVDbGFzcyhlbG0sIGNsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2Fzc2VzLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIHRpbWVPZihlKSB7XG4gIHJldHVybiAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInZS50aW1lU3RhbXA7XG59XG5cbmZ1bmN0aW9uIHVuaXQodmFsdWUpIHtcbiAgcmV0dXJuICcKICAgICAgICAgICAgICAgICAgICAgICAgYidpc1N0cmluZyh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID8gYCR7dmFsdWV9cHhgIDogIiI7JwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5jb25zdCBQUk9KRUNUX0NPREUgPSAic3BsaWRlIjtcblxuZnVuY3Rpb24gYXNzJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgJwogICAgICAgICAgICAgICAgICAgICAgICBiJyAgdGhyb3cgbmV3IEVycm9yKGBbJHtQUk9KRUNUX0NPREV9XSAke21lc3NhZ2UgfHwgIiInCiAgICAgICAgICAgICAgICAgICAgICAgIGInfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UpIHtcbiAgY29uc29sZS4nCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJyb3IoYFske1BST0pFQ1RfQ09ERX1dICR7bWVzc2FnZX1gKTtcbn1cblxuY29uc3QgJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3sgbWluLCBtYXgsIGZsb29yLCBjZWlsLCBhYnMgfSA9IE1hdGg7XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICBiJyBhcHByb3hpbWF0ZWx5RXF1YWwoeCwgeSwgZXBzaWxvbikge1xuICByZXR1cm4gYWJzKHggJwogICAgICAgICAgICAgICAgICAgICAgICBiJy0geSkgPCBlcHNpbG9uO1xufVxuXG5mdW5jdGlvbiBiZXR3ZWVuKG51bWJlciwgeCwgeScKICAgICAgICAgICAgICAgICAgICAgICAgYicsIGV4Y2x1c2l2ZSkge1xuICBjb25zdCBtaW5pbXVtID0gbWluKHgsIHkpO1xuICBjbycKICAgICAgICAgICAgICAgICAgICAgICAgYiduc3QgbWF4aW11bSA9IG1heCh4LCB5KTtcbiAgcmV0dXJuIGV4Y2x1c2l2ZSA/IG1pbmltdScKICAgICAgICAgICAgICAgICAgICAgICAgYidtIDwgbnVtYmVyICYmIG51bWJlciA8IG1heGltdW0gOiBtaW5pbXVtIDw9IG51bWJlciAmJwogICAgICAgICAgICAgICAgICAgICAgICBiJyYgbnVtYmVyIDw9IG1heGltdW07XG59XG5cbmZ1bmN0aW9uIGNsYW1wKG51bWJlciwgeCcKICAgICAgICAgICAgICAgICAgICAgICAgYicsIHkpIHtcbiAgY29uc3QgbWluaW11bSA9IG1pbih4LCB5KTtcbiAgY29uc3QgbWF4aScKICAgICAgICAgICAgICAgICAgICAgICAgYidtdW0gPSBtYXgoeCwgeSk7XG4gIHJldHVybiBtaW4obWF4KG1pbmltdW0sIG51bWJlciksICcKICAgICAgICAgICAgICAgICAgICAgICAgYidtYXhpbXVtKTtcbn1cblxuZnVuY3Rpb24gc2lnbih4KSB7XG4gIHJldHVybiArKHggPiAwJwogICAgICAgICAgICAgICAgICAgICAgICBiJykgLSArKHggPCAwKTtcbn1cblxuZnVuY3Rpb24gY2FtZWxUb0tlYmFiKHN0cmluZykgeycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8oW2EtejAtOV0pKFtBLVpdKS9nLCAiJDEtJCcKICAgICAgICAgICAgICAgICAgICAgICAgYicyIikudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0KHN0cmluZywgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncGxhY2VtZW50cykge1xuICBmb3JFYWNoKHJlcGxhY2VtZW50cywgKHJlcGxhY2VtZW50KSAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInPT4ge1xuICAgIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKCIlcyIsIGAke3JlcGxhY2VtZW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIndH1gKTtcbiAgfSk7XG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHBhZChudW0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInYmVyKSB7XG4gIHJldHVybiBudW1iZXIgPCAxMCA/IGAwJHtudW1iZXJ9YCA6IGAke251bWInCiAgICAgICAgICAgICAgICAgICAgICAgIGInZXJ9YDtcbn1cblxuY29uc3QgaWRzID0ge307XG5mdW5jdGlvbiB1bmlxdWVJZChwcmVmaScKICAgICAgICAgICAgICAgICAgICAgICAgYid4KSB7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtwYWQoaWRzW3ByZWZpeF0gPSAoaWRzW3ByZScKICAgICAgICAgICAgICAgICAgICAgICAgYidmaXhdIHx8IDApICsgMSl9YDtcbn1cblxuZXhwb3J0cy5hYnMgPSBhYnM7XG5leHBvcnRzJwogICAgICAgICAgICAgICAgICAgICAgICBiJy5hZGRDbGFzcyA9IGFkZENsYXNzO1xuZXhwb3J0cy5hcHBlbmQgPSBhcHBlbmQ7XG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5hcHBseSA9IGFwcGx5O1xuZXhwb3J0cy5hcHByb3hpbWF0ZWx5RXF1YWwgPSBhJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3Bwcm94aW1hdGVseUVxdWFsO1xuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG5leHBvJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3J0cy5hc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmJlZm9yZSA9IGJlZm9yZTtcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnRzLmJldHdlZW4gPSBiZXR3ZWVuO1xuZXhwb3J0cy5jYW1lbFRvS2ViYWIgPSBjYW1lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2xUb0tlYmFiO1xuZXhwb3J0cy5jZWlsID0gY2VpbDtcbmV4cG9ydHMuY2hpbGQgPSBjJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGQ7XG5leHBvcnRzLmNoaWxkcmVuID0gY2hpbGRyZW47XG5leHBvcnRzLmNsYW1wJwogICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGNsYW1wO1xuZXhwb3J0cy5jcmVhdGUgPSBjcmVhdGU7XG5leHBvcnRzLmRpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICBiJ2F5ID0gZGlzcGxheTtcbmV4cG9ydHMuZW1wdHkgPSBlbXB0eTtcbmV4cG9ydHMuZXJyJwogICAgICAgICAgICAgICAgICAgICAgICBiJ29yID0gZXJyb3I7XG5leHBvcnRzLmZpbmQgPSBmaW5kO1xuZXhwb3J0cy5mbG9vciA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmbG9vcjtcbmV4cG9ydHMuZm9jdXMgPSBmb2N1cztcbmV4cG9ydHMuZm9yRWFjaCA9JwogICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3JFYWNoO1xuZXhwb3J0cy5mb3JPd24gPSBmb3JPd247XG5leHBvcnRzLmZvcm1hJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBmb3JtYXQ7XG5leHBvcnRzLmdldEF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLmhhc0NsYXNzID0gaGFzQ2xhc3M7XG5leHBvcnRzLmluY2x1ZGVzID0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInIGluY2x1ZGVzO1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcbmV4cG9ydHMuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuZXhwb3J0cy5pc0hUTUxFbGVtZW50ID0gaXNIVE0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInTEVsZW1lbnQ7XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcbmV4cG9ydHMuaXNPYmonCiAgICAgICAgICAgICAgICAgICAgICAgIGInZWN0ID0gaXNPYmplY3Q7XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7XG5leHAnCiAgICAgICAgICAgICAgICAgICAgICAgIGInb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuZXhwb3J0cy5tYXRjaGVzID0gbWEnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndGNoZXM7XG5leHBvcnRzLm1heCA9IG1heDtcbmV4cG9ydHMubWVhc3VyZSA9IG1lYXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGIndXJlO1xuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuZXhwb3J0cy5taW4gPSBtaW47XG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5uZXh0VGljayA9IG5leHRUaWNrO1xuZXhwb3J0cy5ub29wID0gbm9vcDsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLm9taXQgPSBvbWl0O1xuZXhwb3J0cy5vd25LZXlzID0gb3duS2V5czsnCiAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLnBhZCA9IHBhZDtcbmV4cG9ydHMucGFyc2VIdG1sID0gcGFyc2VIdG0nCiAgICAgICAgICAgICAgICAgICAgICAgIGInbDtcbmV4cG9ydHMucHJldmVudCA9IHByZXZlbnQ7XG5leHBvcnRzLnB1c2ggPSBwdXMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaDtcbmV4cG9ydHMucXVlcnkgPSBxdWVyeTtcbmV4cG9ydHMucXVlcnlBbGwgPSBxdWUnCiAgICAgICAgICAgICAgICAgICAgICAgIGIncnlBbGw7XG5leHBvcnRzLnJhZiA9IHJhZjtcbmV4cG9ydHMucmVjdCA9IHJlY3Q7XG5lJwogICAgICAgICAgICAgICAgICAgICAgICBiJ3hwb3J0cy5yZW1vdmUgPSByZW1vdmU7XG5leHBvcnRzLnJlbW92ZUF0dHJpYnV0ZSA9IHJlJwogICAgICAgICAgICAgICAgICAgICAgICBiJ21vdmVBdHRyaWJ1dGU7XG5leHBvcnRzLnJlbW92ZUNsYXNzID0gcmVtb3ZlQ2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgIGInO1xuZXhwb3J0cy5zZXRBdHRyaWJ1dGUgPSBzZXRBdHRyaWJ1dGU7XG5leHBvcnRzLnMnCiAgICAgICAgICAgICAgICAgICAgICAgIGInaWduID0gc2lnbjtcbmV4cG9ydHMuc2xpY2UgPSBzbGljZTtcbmV4cG9ydHMuc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgIGInID0gc3R5bGU7XG5leHBvcnRzLnRpbWVPZiA9IHRpbWVPZjtcbmV4cG9ydHMudG9BcnInCiAgICAgICAgICAgICAgICAgICAgICAgIGInYXkgPSB0b0FycmF5O1xuZXhwb3J0cy50b2dnbGVDbGFzcyA9IHRvZ2dsZUNsYXNzOycKICAgICAgICAgICAgICAgICAgICAgICAgYidcbmV4cG9ydHMudW5pcXVlSWQgPSB1bmlxdWVJZDtcbmV4cG9ydHMudW5pdCA9IHVuaScKICAgICAgICAgICAgICAgICAgICAgICAgYid0O1xuJywKICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3V0aWxzL3NwbGlkZS11dGlscy5janMuanMnLAogICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnfSwKICAgICAgJ2VuLVVTJzogeydBYnNvbHV0ZVBhdGgnOiAnJywKICAgICAgICAgICAgICAgICdDb250ZW50JzogYiIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnXyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJfZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG5mdW5jdGlvbiBlbXB0eShhciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXkpIHtcbiAgYXJyYXkubGVuZ3RoID0gMDtcbn1cblxuZnVuY3Rpb24gc2xpY2UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGFycmF5TGlrZSwgc3RhcnQsIGVuZCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidwZS5zbGljZS5jYWxsKGFycmF5TGlrZSwgc3RhcnQsIGVuZCk7XG59XG5cbmZ1bicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjdGlvbiBmaW5kKGFycmF5TGlrZSwgcHJlZGljYXRlKSB7XG4gIHJldHVybiBzbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UoYXJyYXlMaWtlKS5maWx0ZXIocHJlZGljYXRlKVswXTtcbn1cblxuZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGFwcGx5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmMuYmluZChudWxsLCAuLi5zbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoYXJndW1lbnRzLCAxKSk7XG59XG5cbmNvbnN0IG5leHRUaWNrID0gc2V0VGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVvdXQ7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5mdW5jdGlvbiByYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmKGZ1bmMpIHtcbiAgcmV0dXJuIHJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIHR5cGVPZih0eXBlLCBzdWJqZWN0KSB7XG4gIHJldHVybicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgdHlwZW9mIHN1YmplY3QgPT09IHR5cGU7XG59XG5mdW5jdGlvbiBpc09iamVjdChzdScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidiamVjdCkge1xuICByZXR1cm4gIWlzTnVsbChzdWJqZWN0KSAmJiB0eXBlT2YoIm9iJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2plY3QiLCBzdWJqZWN0KTtcbn1cbmNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJztcbmNvbnN0IGlzRnVuY3Rpb24gPSBhcHBseSh0eXBlT2YsICJmdW5jdGlvbiIpO1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NvbnN0IGlzU3RyaW5nID0gYXBwbHkodHlwZU9mLCAic3RyaW5nIik7XG5jb25zdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaXNVbmRlZmluZWQgPSBhcHBseSh0eXBlT2YsICJ1bmRlZmluZWQiKTtcbmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBpc051bGwoc3ViamVjdCkge1xuICByZXR1cm4gc3ViamVjdCA9PT0gbnVsbDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHN1YmplY3QpIHtcbiAgdHJ5IHtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgICAgcmV0dXJuIHN1YmplY3QgaW5zdGFuY2VvZiAoc3ViamVjdC5vd25lckRvY3UnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cpLkhUTUxFbGVtZW50O1xuICB9IGNhdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29BcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBbdmFsdWVdO1xufVxuXG5mdW5jdGlvbiBmb3JFYWNoKHZhbHVlcywgaXRlcmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndGVlKSB7XG4gIHRvQXJyYXkodmFsdWVzKS5mb3JFYWNoKGl0ZXJhdGVlKTtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZSkge1xuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGFycmF5LmluZGV4T2YodmFsdWUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIHB1cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidoKGFycmF5LCBpdGVtcykge1xuICBhcnJheS5wdXNoKC4uLnRvQXJyYXkoaXRlbXMpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbSwgY2xhc3NlcywgYWRkKSB7XG4gIGlmIChlbG0pIHtcbiAgICBmb3JFYWNoKGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzLCAobmFtZSkgPT4ge1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgZWxtLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidjbGFzc0xpc3RbYWRkID8gImFkZCIgOiAicmVtb3ZlIl0obmFtZSk7XG4gICAgICB9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZENsYXNzKGVsbSwgY2xhc3MnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXMpIHtcbiAgdG9nZ2xlQ2xhc3MoZWxtLCBpc1N0cmluZyhjbGFzc2VzKSA/IGNsYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzc2VzLnNwbGl0KCIgIikgOiBjbGFzc2VzLCB0cnVlKTtcbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIGFwcGVuZChwYXJlbnQsIGNoaWxkcmVuKSB7XG4gIGZvckVhY2goY2hpbGRyZW4sJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBwYXJlbnQuYXBwZW5kQ2hpbGQuYmluZChwYXJlbnQpKTtcbn1cblxuZnVuY3RpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29uIGJlZm9yZShub2RlcywgcmVmKSB7XG4gIGZvckVhY2gobm9kZXMsIChub2RlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IChyZWYgfHwgbm9kZSkucGFyZW50Tm9kZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYic7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgcGFyZW50Lmluc2VydEJlZm9yZShubycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidkZSwgcmVmKTtcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVzKGVsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ20sIHNlbGVjdG9yKSB7XG4gIHJldHVybiBpc0hUTUxFbGVtZW50KGVsbSkgJiYgKGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInbG1bIm1zTWF0Y2hlc1NlbGVjdG9yIl0gfHwgZWxtLm1hdGNoZXMpLmNhbGwoZWxtJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJywgc2VsZWN0b3IpO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbihwYXJlbnQsIHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3Rvcikge1xuICBjb25zdCBjaGlsZHJlbjIgPSBwYXJlbnQgPyBzbGljZShwYXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZW50LmNoaWxkcmVuKSA6IFtdO1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicyLmZpbHRlcigoY2hpbGQpID0+IG1hdGNoZXMoY2hpbGQsIHNlbGVjdG9yKSkgOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2hpbGRyZW4yO1xufVxuXG5mdW5jdGlvbiBjaGlsZChwYXJlbnQsIHNlbGVjdG8nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncikge1xuICByZXR1cm4gc2VsZWN0b3IgPyBjaGlsZHJlbihwYXJlbnQsIHNlbGVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvcilbMF0gOiBwYXJlbnQuZmlyc3RFbGVtZW50Q2hpbGQ7XG59XG5cbmNvbnN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvd25LZXlzID0gT2JqZWN0LmtleXM7XG5cbmZ1bmN0aW9uIGZvck93bihvYmplY3QsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpdGVyYXRlZSwgcmlnaHQpIHtcbiAgaWYgKG9iamVjdCkge1xuICAgIChyaWdodCA/ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvd25LZXlzKG9iamVjdCkucmV2ZXJzZSgpIDogb3duS2V5cyhvYmplY3QpKS5mb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRWFjaCgoa2V5KSA9PiB7XG4gICAgICBrZXkgIT09ICJfX3Byb3RvX18iICYmIGl0ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyYXRlZShvYmplY3Rba2V5XSwga2V5KTtcbiAgICB9KTtcbiAgfVxuICByZXR1cicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIG9iamVjdDtcbn1cblxuZnVuY3Rpb24gYXNzaWduKG9iamVjdCkge1xuICBzbGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2UoYXJndW1lbnRzLCAxKS5mb3JFYWNoKChzb3VyY2UpID0+IHtcbiAgICBmb3JPdycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgIG9iamVjdFtrZXldID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NvdXJjZVtrZXldO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9iamVjdDtcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid9XG5cbmZ1bmN0aW9uIG1lcmdlKG9iamVjdCkge1xuICBzbGljZShhcmd1bWVudCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLCAxKS5mb3JFYWNoKChzb3VyY2UpID0+IHtcbiAgICBmb3JPd24oc291cmNlLCAoJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3ZhbHVlLCBrZXkpID0+IHtcbiAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZS5zbGljZSgpO1xuICAgICAgfSBlbHNlIGknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIG9iamVjdFtrZXldID0gbWVyZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlKHt9LCBpc09iamVjdChvYmplY3Rba2V5XSkgPyBvYmplY3Rba2V5XSA6IHt9LCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqZWN0W2tleV0gPSB2YWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqZWN0O1xufScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcblxuZnVuY3Rpb24gb21pdChvYmplY3QsIGtleXMpIHtcbiAgZm9yRWFjaChrZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid5cyB8fCBvd25LZXlzKG9iamVjdCksIChrZXkpID0+IHtcbiAgICBkZWxldGUgb2JqJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2VjdFtrZXldO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQXR0cmlidXRlKCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlbG1zLCBhdHRycykge1xuICBmb3JFYWNoKGVsbXMsIChlbG0pID0+IHtcbiAgICBmbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidyRWFjaChhdHRycywgKGF0dHIpID0+IHtcbiAgICAgIGVsbSAmJiBlbG0ucmVtb3ZlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0F0dHJpYnV0ZShhdHRyKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInZXRBdHRyaWJ1dGUoZWxtcywgYXR0cnMsIHZhbHVlKSB7XG4gIGlmIChpc09iamVjdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicoYXR0cnMpKSB7XG4gICAgZm9yT3duKGF0dHJzLCAodmFsdWUyLCBuYW1lKSA9PiB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICAgICAgc2V0QXR0cmlidXRlKGVsbXMsIG5hbWUsIHZhbHVlMik7XG4gICAgfSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICB9IGVsc2Uge1xuICAgIGZvckVhY2goZWxtcywgKGVsbSkgPT4ge1xuICAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAgIGlzTnVsbCh2YWx1ZSkgfHwgdmFsdWUgPT09ICIiID8gcmVtb3ZlQXR0cmlidScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0ZShlbG0sIGF0dHJzKSA6IGVsbS5zZXRBdHRyaWJ1dGUoYXR0cnMsIFN0cmluZygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndmFsdWUpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGUodGFnLCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgYXR0cnMsIHBhcmVudCkge1xuICBjb25zdCBlbG0gPSBkb2N1bWVudC5jcmVhdGVFJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlbWVudCh0YWcpO1xuICBpZiAoYXR0cnMpIHtcbiAgICBpc1N0cmluZyhhdHRycykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz8gYWRkQ2xhc3MoZWxtLCBhdHRycykgOiBzZXRBdHRyaWJ1dGUoZWxtLCBhdHRycycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xuICB9XG4gIHBhcmVudCAmJiBhcHBlbmQocGFyZW50LCBlbG0pO1xuICByZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid0dXJuIGVsbTtcbn1cblxuZnVuY3Rpb24gc3R5bGUoZWxtLCBwcm9wLCB2YWx1ZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlKSkge1xuICAgIHJldHVybiBnZXRDbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtcHV0ZWRTdHlsZShlbG0pW3Byb3BdO1xuICB9XG4gIGlmICghaXNOdWxsKHZhbHVlKScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpIHtcbiAgICBlbG0uc3R5bGVbcHJvcF0gPSBgJHt2YWx1ZX1gO1xuICB9XG59XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5mdW5jdGlvbiBkaXNwbGF5KGVsbSwgZGlzcGxheTIpIHtcbiAgc3R5bGUoZWxtLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInImRpc3BsYXkiLCBkaXNwbGF5Mik7XG59XG5cbmZ1bmN0aW9uIGZvY3VzKGVsbSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHtcbiAgZWxtWyJzZXRBY3RpdmUiXSAmJiBlbG1bInNldEFjdGl2ZSJdKCkgfHwgZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidsbS5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7XG59XG5cbmZ1bmN0aScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidvbiBnZXRBdHRyaWJ1dGUoZWxtLCBhdHRyKSB7XG4gIHJldHVybiBlbG0uZ2V0QXR0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3JpYnV0ZShhdHRyKTtcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoZWxtLCBjbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NOYW1lKSB7XG4gIHJldHVybiBlbG0gJiYgZWxtLmNsYXNzTGlzdC5jb250YWlucygnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gcmVjdCh0YXJnZXQpIHtcbiAgcmV0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3VybiB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG59XG5cbmZ1bmN0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2lvbiByZW1vdmUobm9kZXMpIHtcbiAgZm9yRWFjaChub2RlcywgKG5vZGUpID0+IHsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG4gICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XG4gICAgICBub2RlLnAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidmdW5jdGlvbiBtZWFzdXJlKHBhcmVudCwgdmFsdWUpIHtcbiAgaWYgKGlzU3RyaW5nJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyh2YWx1ZSkpIHtcbiAgICBjb25zdCBkaXYgPSBjcmVhdGUoImRpdiIsIHsgc3R5bGUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInOiBgd2lkdGg6ICR7dmFsdWV9OyBwb3NpdGlvbjogYWJzb2x1dGU7YCB9LCBwYXJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ250KTtcbiAgICB2YWx1ZSA9IHJlY3QoZGl2KS53aWR0aDtcbiAgICByZW1vdmUoZGl2JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBwYXJzZUh0bWwnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInKGh0bWwpIHtcbiAgcmV0dXJuIGNoaWxkKG5ldyBET01QYXJzZXIoKS5wYXJzZUZybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidtU3RyaW5nKGh0bWwsICJ0ZXh0L2h0bWwiKS5ib2R5KTtcbn1cblxuZnVuY3RpbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduIHByZXZlbnQoZSwgc3RvcFByb3BhZ2F0aW9uKSB7XG4gIGUucHJldmVudERlZmF1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2x0KCk7XG4gIGlmIChzdG9wUHJvcGFnYXRpb24pIHtcbiAgICBlLnN0b3BQcm9wYWdhJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3Rpb24oKTtcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfVxufVxuXG5mdW5jdGlvbiBxdWVyeShwYXJlbnQsIHNlbGVjdG9yKSB7XG4gIHJlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3R1cm4gcGFyZW50ICYmIHBhcmVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbn0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5cbmZ1bmN0aW9uIHF1ZXJ5QWxsKHBhcmVudCwgc2VsZWN0b3IpIHtcbiAgcmUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIndHVybiBzZWxlY3RvciA/IHNsaWNlKHBhcmVudC5xdWVyeVNlbGVjdG9yQWxsKHNlJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xlY3RvcikpIDogW107XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsbSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2NsYXNzZXMpIHtcbiAgdG9nZ2xlQ2xhc3MoZWxtLCBjbGFzc2VzLCBmYWxzZSk7XG59JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuXG5mdW5jdGlvbiB0aW1lT2YoZSkge1xuICByZXR1cm4gZS50aW1lU3RhbXA7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xufVxuXG5mdW5jdGlvbiB1bml0KHZhbHVlKSB7XG4gIHJldHVybiBpc1N0cmluZycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicodmFsdWUpID8gdmFsdWUgOiB2YWx1ZSA/IGAke3ZhbHVlfXB4YCA6ICIiOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcbn1cblxuY29uc3QgUFJPSkVDVF9DT0RFID0gInNwbGlkZSI7XG5cbmZ1bmN0aW9uJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBhc3NlcnQoY29uZGl0aW9uLCBtZXNzYWdlKSB7XG4gIGlmICghY29uZGl0aW9uKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICAgIHRocm93IG5ldyBFcnJvcihgWyR7UFJPSkVDVF9DT0RFfV0gJHttZXNzYScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidnZSB8fCAiIn1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlcnJvcihtZXNzYWdlKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIne1xuICBjb25zb2xlLmVycm9yKGBbJHtQUk9KRUNUX0NPREV9XSAke21lc3NhZ2V9YCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicpO1xufVxuXG5jb25zdCB7IG1pbiwgbWF4LCBmbG9vciwgY2VpbCwgYWJzIH0gPScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgTWF0aDtcblxuZnVuY3Rpb24gYXBwcm94aW1hdGVseUVxdWFsKHgsIHksIGVwc2lsbycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYiduKSB7XG4gIHJldHVybiBhYnMoeCAtIHkpIDwgZXBzaWxvbjtcbn1cblxuZnVuY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInaW9uIGJldHdlZW4obnVtYmVyLCB4LCB5LCBleGNsdXNpdmUpIHtcbiAgY29uc3QgbScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidpbmltdW0gPSBtaW4oeCwgeSk7XG4gIGNvbnN0IG1heGltdW0gPSBtYXgoeCwgeSk7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICByZXR1cm4gZXhjbHVzaXZlID8gbWluaW11bSA8IG51bWJlciAmJiBudW1iZXInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIDwgbWF4aW11bSA6IG1pbmltdW0gPD0gbnVtYmVyICYmIG51bWJlciA8PSBtYXhpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ211bTtcbn1cblxuZnVuY3Rpb24gY2xhbXAobnVtYmVyLCB4LCB5KSB7XG4gIGNvbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzdCBtaW5pbXVtID0gbWluKHgsIHkpO1xuICBjb25zdCBtYXhpbXVtID0gbWF4KHgsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyB5KTtcbiAgcmV0dXJuIG1pbihtYXgobWluaW11bSwgbnVtYmVyKSwgbWF4aW11bSknCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInO1xufVxuXG5mdW5jdGlvbiBzaWduKHgpIHtcbiAgcmV0dXJuICsoeCA+IDApIC0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJysoeCA8IDApO1xufVxuXG5mdW5jdGlvbiBjYW1lbFRvS2ViYWIoc3RyaW5nKSB7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLyhbYS16MC05XSkoW0EtWl0pL2csICInCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInJDEtJDIiKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXQoc3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncmluZywgcmVwbGFjZW1lbnRzKSB7XG4gIGZvckVhY2gocmVwbGFjZW1lbnRzLCAocicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlcGxhY2VtZW50KSA9PiB7XG4gICAgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UoIiVzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyIsIGAke3JlcGxhY2VtZW50fWApO1xuICB9KTtcbiAgcmV0dXJuIHN0cmluZzsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG59XG5cbmZ1bmN0aW9uIHBhZChudW1iZXIpIHtcbiAgcmV0dXJuIG51bWJlciA8JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyAxMCA/IGAwJHtudW1iZXJ9YCA6IGAke251bWJlcn1gO1xufVxuXG5jb25zdCBpJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2RzID0ge307XG5mdW5jdGlvbiB1bmlxdWVJZChwcmVmaXgpIHtcbiAgcmV0dXJuIGAkJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3twcmVmaXh9JHtwYWQoaWRzW3ByZWZpeF0gPSAoaWRzW3ByZWZpeF0gfHwgMCkgKycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYicgMSl9YDtcbn1cblxuZXhwb3J0cy5hYnMgPSBhYnM7XG5leHBvcnRzLmFkZENsYXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncyA9IGFkZENsYXNzO1xuZXhwb3J0cy5hcHBlbmQgPSBhcHBlbmQ7XG5leHBvcnRzLmEnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIncHBseSA9IGFwcGx5O1xuZXhwb3J0cy5hcHByb3hpbWF0ZWx5RXF1YWwgPSBhcHBybycKICAgICAgICAgICAgICAgICAgICAgICAgICAgYid4aW1hdGVseUVxdWFsO1xuZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG5leHBvcnRzLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhc3NpZ24gPSBhc3NpZ247XG5leHBvcnRzLmJlZm9yZSA9IGJlZm9yZTtcbmV4cG9ydCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzLmJldHdlZW4gPSBiZXR3ZWVuO1xuZXhwb3J0cy5jYW1lbFRvS2ViYWIgPSBjYW1lJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xUb0tlYmFiO1xuZXhwb3J0cy5jZWlsID0gY2VpbDtcbmV4cG9ydHMuY2hpbGQgPSBjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hpbGQ7XG5leHBvcnRzLmNoaWxkcmVuID0gY2hpbGRyZW47XG5leHBvcnRzLmNsYW1wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IGNsYW1wO1xuZXhwb3J0cy5jcmVhdGUgPSBjcmVhdGU7XG5leHBvcnRzLmRpc3BsJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2F5ID0gZGlzcGxheTtcbmV4cG9ydHMuZW1wdHkgPSBlbXB0eTtcbmV4cG9ydHMuZXJyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ29yID0gZXJyb3I7XG5leHBvcnRzLmZpbmQgPSBmaW5kO1xuZXhwb3J0cy5mbG9vciA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmbG9vcjtcbmV4cG9ydHMuZm9jdXMgPSBmb2N1cztcbmV4cG9ydHMuZm9yRWFjaCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyBmb3JFYWNoO1xuZXhwb3J0cy5mb3JPd24gPSBmb3JPd247XG5leHBvcnRzLmZvcm1hJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3QgPSBmb3JtYXQ7XG5leHBvcnRzLmdldEF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInXG5leHBvcnRzLmhhc0NsYXNzID0gaGFzQ2xhc3M7XG5leHBvcnRzLmluY2x1ZGVzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIGluY2x1ZGVzO1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcbmV4cG9ydHMuaXMnCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xuZXhwb3J0cy5pc0hUTUxFbGVtZW50ID0gaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzSFRNTEVsZW1lbnQ7XG5leHBvcnRzLmlzTnVsbCA9IGlzTnVsbDtcbmV4cG9ydHMuaScKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidzT2JqZWN0ID0gaXNPYmplY3Q7XG5leHBvcnRzLmlzU3RyaW5nID0gaXNTdHJpbmc7JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1xuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuZXhwb3J0cy5tYXRjJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2hlcyA9IG1hdGNoZXM7XG5leHBvcnRzLm1heCA9IG1heDtcbmV4cG9ydHMubWVhc3VyJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2UgPSBtZWFzdXJlO1xuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuZXhwb3J0cy5taW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJz0gbWluO1xuZXhwb3J0cy5uZXh0VGljayA9IG5leHRUaWNrO1xuZXhwb3J0cy5ub29wJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyA9IG5vb3A7XG5leHBvcnRzLm9taXQgPSBvbWl0O1xuZXhwb3J0cy5vd25LZXlzID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ293bktleXM7XG5leHBvcnRzLnBhZCA9IHBhZDtcbmV4cG9ydHMucGFyc2VIdG1sID0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BhcnNlSHRtbDtcbmV4cG9ydHMucHJldmVudCA9IHByZXZlbnQ7XG5leHBvcnRzLnB1JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3NoID0gcHVzaDtcbmV4cG9ydHMucXVlcnkgPSBxdWVyeTtcbmV4cG9ydHMucXVlcnlBJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2xsID0gcXVlcnlBbGw7XG5leHBvcnRzLnJhZiA9IHJhZjtcbmV4cG9ydHMucmVjdCA9JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJyByZWN0O1xuZXhwb3J0cy5yZW1vdmUgPSByZW1vdmU7XG5leHBvcnRzLnJlbW92ZUF0JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3RyaWJ1dGUgPSByZW1vdmVBdHRyaWJ1dGU7XG5leHBvcnRzLnJlbW92ZUNsYXNzID0nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInIHJlbW92ZUNsYXNzO1xuZXhwb3J0cy5zZXRBdHRyaWJ1dGUgPSBzZXRBdHRyaWJ1dCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidlO1xuZXhwb3J0cy5zaWduID0gc2lnbjtcbmV4cG9ydHMuc2xpY2UgPSBzbGljJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2U7XG5leHBvcnRzLnN0eWxlID0gc3R5bGU7XG5leHBvcnRzLnRpbWVPZiA9IHRpbWVPJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2Y7XG5leHBvcnRzLnRvQXJyYXkgPSB0b0FycmF5O1xuZXhwb3J0cy50b2dnbGVDbGFzJwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3MgPSB0b2dnbGVDbGFzcztcbmV4cG9ydHMudW5pcXVlSWQgPSB1bmlxdWVJZDtcbmV4JwogICAgICAgICAgICAgICAgICAgICAgICAgICBiJ3BvcnRzLnVuaXQgPSB1bml0O1xuJywKICAgICAgICAgICAgICAgICdEZXN0UGF0aCc6ICcnLAogICAgICAgICAgICAgICAgJ0ZpbGVOYW1lJzogJ0EwMDAwMDEwMjcwMDEwMDEvd3Mvc3JjL3NwbGlkZWpzL3NwbGlkZS9kaXN0L2pzL3V0aWxzL3NwbGlkZS11dGlscy5janMuanMnLAogICAgICAgICAgICAgICAgJ0lzVGV4dCc6IDEsCiAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAnTmVlZENvcHknOiAxLAogICAgICAgICAgICAgICAgJ1JlbW92ZUFmdGVyQ29weSc6IDAsCiAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0luY2x1ZGUnLAogICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyIGNlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgZml4ZWQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA1NzZweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgcGFkZGluZzogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCBXaWRlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTY3JlZW5zICovIEBtZWRpYSBvbmx5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzY3JlZW4gYW5kIChtaW4td2lkdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzogOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgcGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzUzOiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcwQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcwQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJywKICAgICAgICAgICAgICAgICAnbW9kVmFyJzogeydWYXJMaXN0JzogeydBY2NvcmRpb25DYXJkQm9keUNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uT3BlbkZpcnN0JzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb21tZW50XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmQnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbW96LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIHN0YXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1IZWxwJzogJyA8ZGl2IGNsYXNzPSJhbGVydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYldlYi5odG1sc1syXVsiVmFycyJdWyJEZXZNc2ciXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlLjwvZGl2PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1NzZweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rlc2t0b3BzICovIEBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dpZGUgU2NyZWVucyAqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5OTJweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVZpZGVvQmFja2dyb3VuZCc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmlnaHQ6bm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhQ2xhc3MnOiAnJ319fX0sCiAzNTQ6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzFBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdzX3NsaWRlJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzFBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnLAogICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNCbG9jayc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BQYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbVBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgaWQgZm9udCBjb2xvclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgbW9kdWxlIGJhY2tncm91bmRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZFNWRyc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUVuZFRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlciI+IFRvIHNldHVwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIDEuIEluc3RydWN0aW9ucyBhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Qb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIF9Gb250Q29sb3JfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgI19JRF8ge3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuaGNvbnRlbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLTUwJSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzU3NnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOjAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIExhcmdlIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2lkZSBTY3JlZW5zICovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaGVhZGVyLXVuaXRfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1sZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fSwKIDM1NTogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMkEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMkEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZycsCiAgICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRIZWFkZXJDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1DU1NWYXInOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcFBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZz0yMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvbnRDb2xvcj1fQ29sb3JBX1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQmFja2dyb3VuZD1cbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8tYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQgaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUdQb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2LCBzZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgcGFnZSBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVJbmMnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIF9NQmFja2dyb3VuZF9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy01MCUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNTc2cHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBNZWRpdW0gRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNzY4cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXaWRlIFNjcmVlbnMgKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZVRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlkZW97XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29iamVjdC1maXQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzU2OiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICczQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICczQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJywKICAgICAgICAgICAgICAgICAnbW9kVmFyJzogeydWYXJMaXN0JzogeydBY2NvcmRpb25DYXJkQm9keUNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uT3BlbkZpcnN0JzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb21tZW50XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmQnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbW96LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIHN0YXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1IZWxwJzogJyA8ZGl2IGNsYXNzPSJhbGVydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYldlYi5odG1sc1syXVsiVmFycyJdWyJEZXZNc2ciXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlLjwvZGl2PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1NzZweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rlc2t0b3BzICovIEBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dpZGUgU2NyZWVucyAqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5OTJweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVZpZGVvQmFja2dyb3VuZCc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmlnaHQ6bm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhQ2xhc3MnOiAnJ319fX0sCiAzNTc6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzRBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdzX3NsaWRlJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzRBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnLAogICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNCbG9jayc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BQYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbVBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgaWQgZm9udCBjb2xvclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgbW9kdWxlIGJhY2tncm91bmRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZFNWRyc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUVuZFRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlciI+IFRvIHNldHVwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIDEuIEluc3RydWN0aW9ucyBhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Qb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIF9Gb250Q29sb3JfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgI19JRF8ge3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuaGNvbnRlbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLTUwJSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzU3NnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOjAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIExhcmdlIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2lkZSBTY3JlZW5zICovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaGVhZGVyLXVuaXRfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1sZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fSwKIDM1ODogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnNUEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnNUEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZycsCiAgICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRIZWFkZXJDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1DU1NWYXInOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcFBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZz0yMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvbnRDb2xvcj1fQ29sb3JBX1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQmFja2dyb3VuZD1cbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8tYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQgaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUdQb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2LCBzZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgcGFnZSBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVJbmMnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIF9NQmFja2dyb3VuZF9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy01MCUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNTc2cHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBNZWRpdW0gRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNzY4cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXaWRlIFNjcmVlbnMgKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZVRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlkZW97XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29iamVjdC1maXQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzU5OiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICc2QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICc2QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJywKICAgICAgICAgICAgICAgICAnbW9kVmFyJzogeydWYXJMaXN0JzogeydBY2NvcmRpb25DYXJkQm9keUNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uT3BlbkZpcnN0JzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb21tZW50XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmQnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbW96LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIHN0YXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1IZWxwJzogJyA8ZGl2IGNsYXNzPSJhbGVydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYldlYi5odG1sc1syXVsiVmFycyJdWyJEZXZNc2ciXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlLjwvZGl2PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1NzZweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rlc2t0b3BzICovIEBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dpZGUgU2NyZWVucyAqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5OTJweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVZpZGVvQmFja2dyb3VuZCc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmlnaHQ6bm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhQ2xhc3MnOiAnJ319fX0sCiAzNjA6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzdBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdzX3NsaWRlJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzdBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnLAogICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNCbG9jayc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BQYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbVBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgaWQgZm9udCBjb2xvclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgbW9kdWxlIGJhY2tncm91bmRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZFNWRyc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUVuZFRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlciI+IFRvIHNldHVwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIDEuIEluc3RydWN0aW9ucyBhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Qb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIF9Gb250Q29sb3JfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgI19JRF8ge3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuaGNvbnRlbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLTUwJSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzU3NnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOjAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIExhcmdlIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2lkZSBTY3JlZW5zICovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaGVhZGVyLXVuaXRfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1sZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fSwKIDM2MTogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnOEEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnOEEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZycsCiAgICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRIZWFkZXJDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1DU1NWYXInOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcFBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZz0yMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvbnRDb2xvcj1fQ29sb3JBX1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQmFja2dyb3VuZD1cbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8tYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQgaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUdQb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2LCBzZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgcGFnZSBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVJbmMnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIF9NQmFja2dyb3VuZF9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy01MCUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNTc2cHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBNZWRpdW0gRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNzY4cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXaWRlIFNjcmVlbnMgKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZVRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlkZW97XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29iamVjdC1maXQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzYyOiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICc5QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICc5QS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJywKICAgICAgICAgICAgICAgICAnbW9kVmFyJzogeydWYXJMaXN0JzogeydBY2NvcmRpb25DYXJkQm9keUNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uT3BlbkZpcnN0JzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb21tZW50XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmQnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbW96LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIHN0YXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1IZWxwJzogJyA8ZGl2IGNsYXNzPSJhbGVydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYldlYi5odG1sc1syXVsiVmFycyJdWyJEZXZNc2ciXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlLjwvZGl2PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1NzZweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rlc2t0b3BzICovIEBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dpZGUgU2NyZWVucyAqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5OTJweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVZpZGVvQmFja2dyb3VuZCc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmlnaHQ6bm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhQ2xhc3MnOiAnJ319fX0sCiAzNjM6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzEwQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcxMEEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZycsCiAgICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRIZWFkZXJDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1DU1NWYXInOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcFBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZz0yMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvbnRDb2xvcj1fQ29sb3JBX1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQmFja2dyb3VuZD1cbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8tYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQgaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUdQb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2LCBzZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgcGFnZSBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVJbmMnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIF9NQmFja2dyb3VuZF9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy01MCUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNTc2cHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBNZWRpdW0gRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNzY4cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXaWRlIFNjcmVlbnMgKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZVRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlkZW97XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29iamVjdC1maXQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzY0OiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcxMUEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMTFBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnLAogICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNCbG9jayc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BQYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbVBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgaWQgZm9udCBjb2xvclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgbW9kdWxlIGJhY2tncm91bmRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZFNWRyc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUVuZFRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlciI+IFRvIHNldHVwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIDEuIEluc3RydWN0aW9ucyBhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Qb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIF9Gb250Q29sb3JfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgI19JRF8ge3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuaGNvbnRlbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLTUwJSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzU3NnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOjAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIExhcmdlIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2lkZSBTY3JlZW5zICovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaGVhZGVyLXVuaXRfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1sZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fSwKIDM2NTogeydlbic6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMTJBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnfSwKICAgICAgICdlbi1VUyc6IHsnTGFyZ2VJbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvbW91bnRhaW4xNDQweDYwMC5qcGcnLAogICAgICAgICAgICAgICAgICdNeU1vZHVsZSc6ICdzX3NsaWRlJywKICAgICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzEyQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJywKICAgICAgICAgICAgICAgICAnbW9kVmFyJzogeydWYXJMaXN0JzogeydBY2NvcmRpb25DYXJkQm9keUNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZENsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uQ2FyZEhlYWRlckNsYXNzJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjb3JkaW9uT3BlbkZpcnN0JzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEeW5hbWljQmxvY2snOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNTU1Zhcic6ICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBjb21tZW50XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21QYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21QYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nPTIwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGlkIGZvbnQgY29sb3JcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRm9udENvbG9yPV9Db2xvckFfXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIG1vZHVsZSBiYWNrZ3JvdW5kXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01CYWNrZ3JvdW5kPVxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmQnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctd2Via2l0LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctbW96LWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctby1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT4gJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Db3ZlckJhY2tncm91bmRTVkcnOiAnIDxzdHlsZT4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsIHN0YXkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCBpbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiAjX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1FbmRUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktR1Bvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1IZWxwJzogJyA8ZGl2IGNsYXNzPSJhbGVydCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbGVydC1kYW5nZXIiPiBUbyBzZXR1cCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXYsIHNldCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYldlYi5odG1sc1syXVsiVmFycyJdWyJEZXZNc2ciXSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byAxLiBJbnN0cnVjdGlvbnMgYXJlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2luIHRoZSBwYWdlIHNvdXJjZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RlLjwvZGl2PicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZUluYyc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gIHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICBfRm9udENvbG9yX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgX01CYWNrZ3JvdW5kX1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICNfSURfIHtwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTt9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8gLmhjb250ZW50IHtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiA1MCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0cmFuc2Zvcm06ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJhbnNsYXRlKC01MCUsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLTUwJSk7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc1NzZweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIE1lZGl1bSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Rlc2t0b3BzICovIEBtZWRpYSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgc2NyZWVuIGFuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhtaW4td2lkdGggOiA3NjhweCkgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzowICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBMYXJnZSBEZXZpY2VzLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1dpZGUgU2NyZWVucyAqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BtZWRpYSBvbmx5IHNjcmVlbiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCAobWluLXdpZHRoIDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc5OTJweCkgeyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6IDAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5MZWZ0UmlnaHRQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlblRvcE1hcmdpbl9weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVZpZGVvQmFja2dyb3VuZCc6ICc8c3R5bGU+XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLmhlYWRlci11bml0X0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItcmlnaHQ6bm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdib3JkZXItbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHBvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Fic29sdXRlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgaGVpZ2h0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB3aWR0aDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdG9wOiAwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aWRlb3tcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2JqZWN0LWZpdDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dHJhQ2xhc3MnOiAnJ319fX0sCiAzNjY6IHsnZW4nOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAnU2hvcnREZXNjJzogJzEzQS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnNlY3RldHVyXCdzICJhZGlwaXNjaW5nIiBcJ2VsaXRcJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnSW50ZWdlciBtb2xlc3RpZSBsb3JlbSBhdCBtYXNzYVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFjaWxpc2lzIGluIHByZXRpdW0gbmlzbCBhbGlxdWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdOdWxsYSB2b2x1dHBhdCBhbGlxdWFtIHZlbGl0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdQaGFzZWxsdXMgaWFjdWxpcyBuZXF1ZVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUHVydXMgc29kYWxlcyB1bHRyaWNpZXNcbicsCiAgICAgICAgICAgICAgJ1NsaWRlVHlwZSc6ICdKU09OJywKICAgICAgICAgICAgICAnVGh1bUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy90aHVtL3RodW0uanBnJ30sCiAgICAgICAnZW4tVVMnOiB7J0xhcmdlSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL21vdW50YWluMTQ0MHg2MDAuanBnJywKICAgICAgICAgICAgICAgICAnTXlNb2R1bGUnOiAnc19zbGlkZScsCiAgICAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcxM0EuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZycsCiAgICAgICAgICAgICAgICAgJ21vZFZhcic6IHsnVmFyTGlzdCc6IHsnQWNjb3JkaW9uQ2FyZEJvZHlDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbkNhcmRIZWFkZXJDbGFzcyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY29yZGlvbk9wZW5GaXJzdCc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRHluYW1pY0Jsb2NrJzogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1DU1NWYXInOiAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgY29tbWVudFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcFBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcFBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Ub3BQYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tUGFkZGluZz0xMDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tUGFkZGluZz00MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZz0yMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5MZWZ0UmlnaHRQYWRkaW5nPTE1XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkJvdHRvbU1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBpZCBmb250IGNvbG9yXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZvbnRDb2xvcj1fQ29sb3JBX1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIyBtb2R1bGUgYmFja2dyb3VuZFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNQmFja2dyb3VuZD1cbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI19JRF8geyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW1vei1iYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLW8tYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgfSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+ICcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ292ZXJCYWNrZ3JvdW5kU1ZHJzogJyA8c3R5bGU+ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBzdGF5ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnQgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXI7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBzY3JvbGwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aWxsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQgaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogI19JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfVGludEJHXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybChfQ0lNQUdFXykgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduby1yZXBlYXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjZW50ZXIgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcqLyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktRW5kVGFnQ29kZSc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUdQb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktSGVscCc6ICcgPGRpdiBjbGFzcz0iYWxlcnQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxlcnQtZGFuZ2VyIj4gVG8gc2V0dXAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGV2LCBzZXQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGJXZWIuaHRtbHNbMl1bIlZhcnMiXVsiRGV2TXNnIl0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gMS4gSW5zdHJ1Y3Rpb25zIGFyZSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0aGUgcGFnZSBzb3VyY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29kZS48L2Rpdj4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVBvc3RJbmMnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVJbmMnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfICB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAgX0ZvbnRDb2xvcl9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIF9NQmFja2dyb3VuZF9cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAjX0lEXyB7cG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIC5oY29udGVudCB7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgbGVmdDogNTAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgdHJhbnNmb3JtOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyYW5zbGF0ZSgtNTAlLCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy01MCUpO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNTc2cHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21NYXJnaW5fcHg7fSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvKiBNZWRpdW0gRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZXNrdG9wcyAqLyBAbWVkaWEgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbmx5IHNjcmVlbiBhbmQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcobWluLXdpZHRoIDogNzY4cHgpICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyNfSURfIC5yb3cgeyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmc6MCAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYXJnaW4tdG9wOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19NaWRTY3JlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTGFyZ2UgRGV2aWNlcywgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdXaWRlIFNjcmVlbnMgKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAbWVkaWEgb25seSBzY3JlZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQgKG1pbi13aWR0aCA6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnOTkycHgpIHsjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOiAwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuTGVmdFJpZ2h0UGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9ICNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BQYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhZGRpbmctYm90dG9tOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Ub3BNYXJnaW5fcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21NYXJnaW5fcHg7fX1cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLVByZVRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1WaWRlb0JhY2tncm91bmQnOiAnPHN0eWxlPlxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy5oZWFkZXItdW5pdF9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLXJpZ2h0Om5vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZTsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnI3ZpZGVvLWNvbnRhaW5lcl9JRF8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBwb3NpdGlvbjogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYnNvbHV0ZTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGhlaWdodDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMDAlO1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgd2lkdGg6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRvcDogMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmlkZW97XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29iamVjdC1maXQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ30gXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYUNsYXNzJzogJyd9fX19LAogMzY3OiB7J2VuJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgJ1Nob3J0RGVzYyc6ICcxNEEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0XG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb25zZWN0ZXR1clwncyAiYWRpcGlzY2luZyIgXCdlbGl0XCdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVnZXIgbW9sZXN0aWUgbG9yZW0gYXQgbWFzc2FcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhY2lsaXNpcyBpbiBwcmV0aXVtIG5pc2wgYWxpcXVldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnTnVsbGEgdm9sdXRwYXQgYWxpcXVhbSB2ZWxpdFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnUGhhc2VsbHVzIGlhY3VsaXMgbmVxdWVcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B1cnVzIHNvZGFsZXMgdWx0cmljaWVzXG4nLAogICAgICAgICAgICAgICdTbGlkZVR5cGUnOiAnSlNPTicsCiAgICAgICAgICAgICAgJ1RodW1JbWcnOiAnaHR0cHM6Ly9pbWFnZS53ZWJjbXNiLmNvbS9pbWFnZXMvdGh1bS90aHVtLmpwZyd9LAogICAgICAgJ2VuLVVTJzogeydMYXJnZUltZyc6ICdodHRwczovL2ltYWdlLndlYmNtc2IuY29tL2ltYWdlcy9tb3VudGFpbjE0NDB4NjAwLmpwZycsCiAgICAgICAgICAgICAgICAgJ015TW9kdWxlJzogJ3Nfc2xpZGUnLAogICAgICAgICAgICAgICAgICdTaG9ydERlc2MnOiAnMTRBLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2VjdGV0dXJcJ3MgImFkaXBpc2NpbmciIFwnZWxpdFwnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdJbnRlZ2VyIG1vbGVzdGllIGxvcmVtIGF0IG1hc3NhXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYWNpbGlzaXMgaW4gcHJldGl1bSBuaXNsIGFsaXF1ZXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ051bGxhIHZvbHV0cGF0IGFsaXF1YW0gdmVsaXRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BoYXNlbGx1cyBpYWN1bGlzIG5lcXVlXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQdXJ1cyBzb2RhbGVzIHVsdHJpY2llc1xuJywKICAgICAgICAgICAgICAgICAnU2xpZGVUeXBlJzogJ0pTT04nLAogICAgICAgICAgICAgICAgICdUaHVtSW1nJzogJ2h0dHBzOi8vaW1hZ2Uud2ViY21zYi5jb20vaW1hZ2VzL3RodW0vdGh1bS5qcGcnLAogICAgICAgICAgICAgICAgICdtb2RWYXInOiB7J1Zhckxpc3QnOiB7J0FjY29yZGlvbkNhcmRCb2R5Q2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25DYXJkSGVhZGVyQ2xhc3MnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBY2NvcmRpb25PcGVuRmlyc3QnOiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0R5bmFtaWNCbG9jayc6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktQ1NTVmFyJzogJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjIGNvbW1lbnRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BQYWRkaW5nPTEwMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BQYWRkaW5nPTQwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NtYWxsU2NyZWVuVG9wUGFkZGluZz0xMFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkJvdHRvbVBhZGRpbmc9MTAwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01pZFNjcmVlbkJvdHRvbVBhZGRpbmc9NDBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nPTEwXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCaWdTY2VlbkxlZnRSaWdodFBhZGRpbmc9MjBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuTGVmdFJpZ2h0UGFkZGluZz0xNVxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmc9MTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQmlnU2NlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNaWRTY3JlZW5Ub3BNYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTbWFsbFNjcmVlblRvcE1hcmdpbj0wXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JpZ1NjZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTWlkU2NyZWVuQm90dG9tTWFyZ2luPTBcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU21hbGxTY3JlZW5Cb3R0b21NYXJnaW49MFxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgaWQgZm9udCBjb2xvclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250Q29sb3I9X0NvbG9yQV9cbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyMgbW9kdWxlIGJhY2tncm91bmRcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUJhY2tncm91bmQ9XG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZCc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyNfSURfIHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19UaW50QkdfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsKF9DSU1BR0VfKSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vLXJlcGVhdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NlbnRlciAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1tb3otYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1vLWJhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLXNpemU6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY292ZXI7IH0gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPiAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUNvdmVyQmFja2dyb3VuZFNWRyc6ICcgPHN0eWxlPiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIHNjcm9sbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpbGwgc3RheSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50ICAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtc2l6ZTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3ZlcjsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogc2Nyb2xsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lsbCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyovIFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qICNfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1RpbnRCR18gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwoX0NJTUFHRV8pICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8tcmVwZWF0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2VudGVyICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQ7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFja2dyb3VuZC1zaXplOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyB9ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKi8gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L3N0eWxlPlxyXG4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUVuZFRhZ0NvZGUnOiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1HUG9zdEluYyc6ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ011bHRpLUhlbHAnOiAnIDxkaXYgY2xhc3M9ImFsZXJ0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FsZXJ0LWRhbmdlciI+IFRvIHNldHVwICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rldiwgc2V0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RiV2ViLmh0bWxzWzJdWyJWYXJzIl1bIkRldk1zZyJdICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIDEuIEluc3RydWN0aW9ucyBhcmUgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gdGhlIHBhZ2Ugc291cmNlICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvZGUuPC9kaXY+JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1Qb3N0SW5jJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktUHJlSW5jJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgIF9Gb250Q29sb3JfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBfTUJhY2tncm91bmRfXHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgI19JRF8ge3Bvc2l0aW9uOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0aXZlO31cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjX0lEXyAuaGNvbnRlbnQge1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIGxlZnQ6IDUwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHRyYW5zZm9ybTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cmFuc2xhdGUoLTUwJSwgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctNTAlKTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzU3NnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19TbWFsbFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfU21hbGxTY3JlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX1NtYWxsU2NyZWVuQm90dG9tTWFyZ2luX3B4O30gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLyogTWVkaXVtIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRGVza3RvcHMgKi8gQG1lZGlhICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25seSBzY3JlZW4gYW5kICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKG1pbi13aWR0aCA6IDc2OHB4KSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3sjX0lEXyAucm93IHsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nOjAgICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlblRvcFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbVBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFyZ2luLXRvcDogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfTWlkU2NyZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX01pZFNjcmVlbkJvdHRvbU1hcmdpbl9weDt9fVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8qIExhcmdlIERldmljZXMsICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV2lkZSBTY3JlZW5zICovICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQG1lZGlhIG9ubHkgc2NyZWVuICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kIChtaW4td2lkdGggOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzk5MnB4KSB7I19JRF8gLnJvdyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZzogMCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19CaWdTY2VlbkxlZnRSaWdodFBhZGRpbmdfcHg7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSAjX0lEXyB7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFkZGluZy10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wUGFkZGluZ19weDsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYWRkaW5nLWJvdHRvbTogJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfQmlnU2NlZW5Cb3R0b21QYWRkaW5nX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi10b3A6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuVG9wTWFyZ2luX3B4OyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21hcmdpbi1ib3R0b206ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX0JpZ1NjZWVuQm90dG9tTWFyZ2luX3B4O319XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9zdHlsZT5cclxuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNdWx0aS1QcmVUYWdDb2RlJzogJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTXVsdGktVmlkZW9CYWNrZ3JvdW5kJzogJzxzdHlsZT5cclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuaGVhZGVyLXVuaXRfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAneyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1yaWdodDpub25lOyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1sZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vbmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVsYXRpdmU7ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfVxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyN2aWRlby1jb250YWluZXJfSURfICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgcG9zaXRpb246ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWJzb2x1dGU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBoZWlnaHQ6ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMTAwJTtcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIHdpZHRoOiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEwMCU7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICB0b3A6IDA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICBsZWZ0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzA7XHJcbicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnfSBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcjdmlkZW8tY29udGFpbmVyX0lEXyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZpZGVve1xyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QtZml0OiAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvdmVyOyBcclxuJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd9IFxyXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvc3R5bGU+XHJcbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmFDbGFzcyc6ICcnfX19fX0K
Copyright © 2025 by WebAsOne LLC, All Rights Reserved