{"version":3,"sources":["src/_scripts/node_modules/browser-pack/_prelude.js","src/_scripts/src/_modules/article.details/article.details.js","src/_scripts/src/_modules/articles/articles.js","src/_scripts/src/_modules/campaign.details/campaign.details.js","src/_scripts/src/_modules/case.details/case.details.js","src/_scripts/src/_modules/common/content-overlay/content-overlay.js","src/_scripts/src/_modules/common/drop-down-box/drop-down-box.js","src/_scripts/src/_modules/common/fix-links/fix-links.js","src/_scripts/src/_modules/common/footer/footer-bottom/footer-bottom.js","src/_scripts/src/_modules/common/footer/footer-top/footer-top.js","src/_scripts/src/_modules/common/loader/loader.js","src/_scripts/src/_modules/common/login/login.js","src/_scripts/src/_modules/common/redirect/redirect.js","src/_scripts/src/_modules/connect.with.us/connect.with.us.js","src/_scripts/src/_modules/current.cases/current.cases.js","src/_scripts/src/_modules/error/error.js","src/_scripts/src/_modules/homepage/formal-insolvency/formal-insolvency.js","src/_scripts/src/_modules/homepage/homepage-banner/homepage-banner.js","src/_scripts/src/_modules/homepage/how-can-we-help/how-can-we-help.js","src/_scripts/src/_modules/homepage/our-latest-thinking/our-latest-thinking.js","src/_scripts/src/_modules/homepage/the-team/the-team.js","src/_scripts/src/_modules/legal/legal-and-privacy.js","src/_scripts/src/_modules/people.details/people.details.js","src/_scripts/src/_modules/site.map/site.map.js","src/_scripts/src/_modules/utilities/utilities.js","src/_scripts/src/_scripts/main.js"],"names":[],"mappings":"AAAA;ACAA,YAAY;;AAEZ,IAAI,SAAS,GAAG,OAAO,CAAC,wBAAwB,CAAC;AACjD,IAAI,SAAS,GAAG,IAAI,SAAS,EAAE;;AAE/B;AACA,IAAI,cAAc,GAAG,SAAjB,cAAc,GAAc;EAC9B,IAAI,CAAC,IAAI,GAAG,iBAAiB;EAE7B,IAAI,sBAAsB,GAAG,iBAAiB;EAE9C,SAAS,CAAC,eAAe,CACvB,sBAAsB,EACtB,kCAAkC,EAClC,gCAAgC,CACjC;AACH,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAI,EAAE;EAChD,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;IAC1B,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE;EACZ,CAAC,MACI;IACH,gCAAgC,EAAE;EACpC;AACF;AAEA,SAAS,gCAAgC,GAAG;EAC1C,SAAS,EAAE;AACb;AAEA,SAAS,SAAS,GAAG;EACnB,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,+FAA+F,CAAC;EAC1H,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EAC7C,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EACtC,QAAQ,EAAE;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,OAAO,EAAK;EAC9B,IAAI,WAAW,GAAG,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC;;EAExE;EACA,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,iCAAiC,mBAAU,OAAO,CAAC,GAAG,CAAC,QAAQ,yBAAsB;;EAEvH;EACA,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;EAE9D,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC,OAAO;EAE9E,IAAI,QAAQ,EAAE;IACZ,CAAC,CAAC,YAAY,CAAC,CAAC,OAAO,isBAqBtB;EACH,CAAC,MAAM;IACL,CAAC,CAAC,4BAA4B,CAAC,CAAC,OAAO,gwBAsBtC;IACD,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,+GAIrB;EACH;EACA;EACA,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;EACvC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;EAC/B,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;EACtC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;EAC1C,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;;EAEvC;EACA,IAAI,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;EAC/C;EACA;EACA,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;IACrD,IAAK,OAAO,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,IAC5C,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAE,EAAE;MACpD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd,CAAC,CAAC;EACF,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,OAAO,kCAA2B,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,SAAS,QAAK;;EAEnG;EACA,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;EACjD,IAAI,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC;EAC3D,IAAI,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;EACvD,KAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,WAAW,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE;IAC3C,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,sDAEX,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,gBAAgB,CAAC,EAAC,CAAC,+EACjC,WAAW,CAAC,EAAC,CAAC,oDACb,cAAc,CAAC,EAAC,CAAC,2BAE1C;EACH;;EAEA;EACA,IAAI,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;EACxC,KAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE;IACvC,IAAI,QAAQ,GAAG,SAAS,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACtC,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;IACrC,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,yDAEW,KAAK,8BAAiB,GAAG,yBAE3D;EACL;;EAEA;EACA,IAAI,eAAe,GAAG,EAAE;EACxB,IAAI,mBAAmB,GAAG,CAAC,CAAC;EAC5B,IAAI,iBAAiB,GAAG,EAAE;EAC1B,IAAI,sBAAsB,GAAG,CAAC;EAC9B,IAAI,iBAAiB,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;EACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IAChD,IAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAC;MACrD,mBAAmB,EAAE;MACrB,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,MAAK,IAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAC;MAC7D,IAAG,OAAO,iBAAiB,CAAC,mBAAmB,CAAE,IAAI,WAAW,EAAC;QAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;MAAE;MAC/F,IAAG,mBAAmB,GAAG,CAAC,EAAE,mBAAmB,GAAG,CAAC;MACnD,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,MAAK,IAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAC;MACnE,IAAG,OAAO,iBAAiB,CAAC,mBAAmB,CAAE,IAAI,WAAW,EAAC;QAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;MAAE;MAC/F,IAAG,mBAAmB,GAAG,CAAC,EAAE,mBAAmB,GAAG,CAAC;MACnD,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;MACjE,sBAAsB,GAAG,CAAC;IAC5B,CAAC,MAAK,IAAG,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAC;MACjE,IAAG,OAAO,iBAAiB,CAAC,mBAAmB,CAAE,IAAI,WAAW,EAAC;QAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;MAAE;MAC/F,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;MACjE,sBAAsB,GAAG,CAAC;IAC5B,CAAC,MAAK,IAAG,sBAAsB,IAAI,CAAC,EAAC;MACnC,IAAG,OAAO,iBAAiB,CAAC,mBAAmB,CAAE,IAAI,WAAW,EAAC;QAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;MAAE;MAC/F,iBAAiB,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACnE;EACF;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;IAC9C,IAAG,eAAe,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAE,IAAI,EAAC;MAC7C,IAAI,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;MAAE,eAAe,CAAC,SAAS,GAAG,kBAAkB;MACnG,IAAI,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;MAAE,sBAAsB,CAAC,SAAS,GAAG,0BAA0B;MACzH,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,EAAC,eAAe,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC;MACjG,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MAC/C,eAAe,CAAC,WAAW,CAAC,sBAAsB,CAAC;MACnD,IAAG,OAAO,iBAAiB,CAAC,CAAC,CAAE,IAAI,WAAW,EAAC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAC;UACnD,sBAAsB,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D;MACF;IACF;EACF;;EAEA;EACA,KAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC1C,eAAe,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAW;MACtD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAsB,CAAC;MAC7C,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7C,CAAC,CAAC;EACN;AACF,CAAC;;AAED;AACA;AACA;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAS;EACnB,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE;EAC5B,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;EAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;EACvB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,cAAc;;;AC1N/B,YAAY;;AAEZ;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAc;EACtB,IAAI,CAAC,IAAI,GAAG,UAAU;EAEtB,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;;EAE1C;EACA,MAAM,CAAC,IAAI,CAAC;IACR,GAAG,YAAK,MAAM,CAAC,uBAAuB,2BAAiB,WAAW,CAAE;IACpE,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAE;MACpB,gBAAgB,CAAC,IAAI,CAAC;MACtB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;IACvB,CAAC;IACD,KAAK,EAAE,iBAAW;MACd,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,+FAA+F,CAAC;MAC1H,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;IACvB;EACJ,CAAC,CAAC;;EAEF;EACA,MAAM,CAAC,IAAI,CAAC;IACR,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,cAAW;IACvC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAE;MACpB,iBAAiB,CAAC,IAAI,CAAC;IAC3B;EACJ,CAAC,CAAC;;EAEF;EACA,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;EAEnC;EACA,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAS,CAAC,EAAE;IAC1C,OAAO,CAAC,CAAC,GAAG,IAAI,OAAO;EAC3B,CAAC,CAAC;AACN,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAI,IAAI,EAAK;EAAA,6BACmB;IAC5C;IACA,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/C;IACA;IACA,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;MACnD,IAAK,OAAO,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,IAC1C,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAE,EAAE;QACpD,OAAO,IAAI;MACf;MACA,OAAO,KAAK;IAChB,CAAC,CAAC;IACF,IAAI,UAAU,GAAG,EAAE;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC7C,IAAI,CAAC,KAAK,CAAC,EAAE;QACT,UAAU,GAAG,UAAU,CAAC,MAAM,aAAK,eAAe,CAAC,CAAC,CAAC,QAAI;MAC7D,CAAC,MAAM;QACH,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MACtD;IACJ;;IAEA;IACA,IAAI,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;;IAE9D;IACA,IAAI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACxC,IAAI,IAAI,GAAG,EAAE;IACb,KAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,SAAS,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE;MACvC,IAAI,QAAQ,GAAG,SAAS,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;MACtC,IAAI,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;MACrC,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;MACxD,IAAI,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;MACnC,IAAI,4CAAoC,KAAK,8BAAiB,GAAG,SAAM;IAC3E;IAEA,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,4JAG0C,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,qDACjD,MAAM,CAAC,gCAAgC,SAAG,SAAS,gCAAmB,UAAU,oHAGhE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,yEACtB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,wFAEP,WAAW,yGAEf,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,gEACtB,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,wGAGvC,IAAI,iDAGjB;EACL,CAAC;EAvDD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;IAAA;EAAA;AAwDlD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,CAAI,IAAI,EAAK;EAC9B;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAClC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,wFAEqB,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAU,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,2DACxD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,cAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,kCAE/C;EACL;;EAEA;EACA,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,6FAIvB;;EAED;EACA;EACA,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAW;IAChC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;EAChD,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ;;;ACtIzB,YAAY;;AAEZ,IAAI,SAAS,GAAG,OAAO,CAAC,wBAAwB,CAAC;AACjD,IAAI,SAAS,GAAG,IAAI,SAAS,EAAE;;AAE/B;AACA,IAAI,eAAe,GAAG,SAAlB,eAAe,GAAc;EAC/B,IAAI,CAAC,IAAI,GAAG,kBAAkB;EAE9B,IAAI,sBAAsB,GAAG,kBAAkB;EAE/C,SAAS,CAAC,eAAe,CACvB,sBAAsB,EACtB,kCAAkC,EAClC,gCAAgC,CACjC;AACH,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAI,EAAE;EAChD,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;IAC1B,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrB,QAAQ,EAAE;EACZ,CAAC,MACI;IACH,gCAAgC,EAAE;EACpC;AACF;AAEA,SAAS,gCAAgC,GAAG;EAC1C,SAAS,EAAE;AACb;AAEA,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAS;EACpB,CAAC,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,+FAA+F,CAAC;EACxI,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EACnC,QAAQ,EAAE;AACZ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,OAAO,EAAK;EAC9B,IAAI,WAAW,GAAG,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC;;EAExE;EACA,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,iCAAiC,mBAAW,OAAO,CAAC,GAAG,CAAC,QAAQ,yBAAsB;;EAExH;EACA,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;EACxC,CAAC,CAAC,qDAAqD,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;;EAE5E;EACA,IAAI,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;EAC/C;EACA;EACA,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;IACrD,IAAK,OAAO,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,IAC5C,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAE,EAAE;MACpD,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd,CAAC,CAAC;EACF,IAAI,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC;EAC1B;EACA,IAAI,SAAS,EAAE;IACb,OAAO,CAAC,IAAI,CAAC,OAAO,kCAA2B,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,SAAS,QAAK;EACtF,CAAC,MACI;IACH,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EAChC;AACF,CAAC;;AAED;AACA;AACA;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAS;EACnB,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE;EAC7B,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,eAAe;;;AClFhC,YAAY;;AAEZ;AACA,IAAI,WAAW,GAAG,SAAd,WAAW,GAAc;EAC3B,IAAI,CAAC,IAAI,GAAG,cAAc;EAE1B,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;EAC1C,IAAM,SAAS,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC;EAClD,IAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;;EAElC;EACA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE;IAC3B,MAAM,CAAC,IAAI,CAAC;MACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,eAAe,8BAA2B;MAC9D,IAAI,EAAE,KAAK;MACX,OAAO,EAAE,iBAAS,SAAS,EAAE;QAC3B,iBAAiB,CAAC,SAAS,CAAC;QAC5B,YAAY,CAAC,MAAM,CAAC;QACpB,QAAQ,EAAE;MACZ,CAAC;MACD,KAAK,EAAE,iBAAW;QAChB,SAAS,EAAE;QACX,QAAQ,EAAE;MACZ;IACF,CAAC,CAAC;EACJ,CAAC,MACI;IACH,YAAY,CAAC,MAAM,CAAC;IACpB,QAAQ,EAAE;EACZ;EAEA,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,6BAAmB,MAAM,CAAE;IACvD,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAE;MACtB,IAAI,mBAAmB,GAAG,EAAE;MAC5B,IAAK,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAC7B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB,KAAK,WAAY,EAAE;QACzD,mBAAmB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,mBAAmB;MACnD;MACA,iBAAiB,CAAC,mBAAmB,CAAC;IACxC,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,SAAS,EAAE;MACX,QAAQ,EAAE;IACZ;EACF,CAAC,CAAC;AACJ,CAAC;AAED,IAAI,SAAS,GAAE,SAAX,SAAS,GAAQ;EACnB,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,+FAA+F,CAAC;EACjH,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EAC1C,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EACtC,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;EAC1C,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;AACxC,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG,SAAd,WAAW,CAAI,EAAE,EAAK;EACxB,IAAI,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;EACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACpC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE;MACvB,OAAO,IAAI,CAAC,CAAC,CAAC;IAChB;EACF;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,CAAI,IAAI,EAAK;EACjC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,CAAI,GAAG,EAAK;EAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,MAAM,EAAK;EAC7B,IAAI,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC;EAC9B,IAAI,SAAS,GAAG,IAAI;EAEpB,IAAI,CAAC,IAAI,EAAE;IACT,SAAS,EAAE;IACX,QAAQ,EAAE;IACV;EACF;;EAEA;EACA,IAAI,IAAI,CAAC,YAAY,EAAE;IACrB,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;IACzC,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,GAAC,GAAG,IAAE,OAAO,CAAC,QAAQ,EAAE,GAAC,CAAC,CAAC,GAAC,GAAG,GAAC,OAAO,CAAC,WAAW,EAAE;EACpF;EACA;EACA,IAAI,CAAC,OAAO,IACV,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EACtE,QAAQ,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,KACnE,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;EACzE,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;EACxI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;EACxI,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,EAAE,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;EACvK,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS,mDAA4C,IAAI,CAAC,WAAW,SAAM,GAAE,EAAE;EACrI,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,SAAS,mDAA4C,SAAS,SAAM,GAAE,EAAE;EAC/H,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,SAAS,0CAAmC,IAAI,CAAC,WAAW,SAAM,GAAE,EAAE;EAC5H,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,EAAE;EACpG,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,SAAS,6BAAsB,IAAI,CAAC,eAAe,eAAK,IAAI,CAAC,eAAe,SAAM,GAAG,EAAE;EACzJ,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,GAAG,EAAE;;EAE1G;EACA,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ;EAC9B,IAAI,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;EACxC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;;EAEzE;EACD,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,4IAC0G,UAAU,yGAGzI;AACF,CAAC;AAED,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,CAAI,mBAAmB,EAAK;EAC/C;EACA,IAAI,aAAa,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC;IAAA,OAAI,CAAC,KAAK,EAAE;EAAA,EAAC;EACzE,IAAI,QAAQ,GAAG,wBAAwB;EAEvC,CAAC,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAC5B,yCACI,aAAa,CAAC,MAAM,GAAG,CAAC,gPASJ,CAAC,CAC1B;EAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC7C,IAAI,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;IACtD,IAAI,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE;IACvD,IAAI,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE;IAElE,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,MAAM,EAAE;MACvD,QAAQ,GAAG,wBAAwB;IACrC,CAAC,MAAM,IAAI,aAAa,KAAK,KAAK,EAAE;MAClC,QAAQ,GAAG,sBAAsB;IACnC,CAAC,MAAM,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,MAAM,EAAE;MACzF,QAAQ,GAAG,mBAAmB;IAChC;IAEA,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,sEAEM,QAAQ,iDACb,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,QAAQ,sEAAuD,KAAK,2BAEtH;EACH;AACF,CAAC;;AAED;AACA;AACA;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAS;EACnB,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,EAAE;EACnC,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;EAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;EACvB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,WAAW;;;AC7L5B,YAAY;;AAEZ;AACA,IAAI,cAAc,GAAG,SAAjB,cAAc,GAAe;EAC7B,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,YAAY;IACpC,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAClD,CAAC,CAAC,yBAAyB,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC;EACtE,CAAC,CAAC;EAEF,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;IAC3B,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,EAAE;MAAE;MACtB,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;MAClD,CAAC,CAAC,yBAAyB,CAAC,CAAC,WAAW,CAAC,wBAAwB,CAAC;IAEtE;EACJ,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,cAAc;;;AClB/B,YAAY;;AAEZ;AACA,IAAI,WAAW,GAAG,SAAd,WAAW,GAAe;EAC1B,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,wDAAwD,EAAE,YAAY;IACxF,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;MAC/F;MACA,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IACtD,CAAC,MAAM;MACH,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;MAClC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;MACtE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;MAC7F,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;MAChD,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;MACpC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE;IAE9E;EACJ,CAAC,CAAC;AAIN,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,WAAW;;;ACvB5B,YAAY;;AAEZ;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAc;EAExB,SAAS,gBAAgB,GAAI;IAC3B;IACA,CAAC,CAAC,iCAAiC,CAAC,CAAC,IAAI,CAAC,YAAW;MACnD,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC;MACnB,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,gCAAgC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC,CAAC;EACJ;;EAEA;EACA,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;IAC7B,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,UAAU,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAG;MACxD,gBAAgB,EAAE;IACpB,CAAC,CAAC;IACF,QAAQ,CAAC,eAAe,GAAG,IAAI;EACjC;;EAEA;EACA,gBAAgB,EAAE;AACpB,CAAC;AACD;AACA,QAAQ,CAAC,eAAe,GAAG,KAAK;AAEhC,MAAM,CAAC,OAAO,GAAG,QAAQ;;;AC3BzB,YAAY;;AAEZ;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,GAAc;EAC5B,IAAI,CAAC,IAAI,GAAG,eAAe;EAE3B,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,WAAQ;IACpC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACrB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC;MAClE,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;MAC3C,CAAC,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC;IAC9C;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,OAAO,EAAK;EAC9B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,YAAY;;;AC7B7B,YAAY;;AAEZ;AACA,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAc;EACzB,IAAI,CAAC,IAAI,GAAG,YAAY;EAExB,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,eAAY;IACxC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACrB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC;MACrE,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC;MACzC,CAAC,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChD;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,OAAO,EAAK;EAC9B,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,SAAS;;;AC7B1B,YAAY;;AAEZ;AACA,IAAI,MAAM,GAAG,SAAT,MAAM,GAAe,CACzB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,MAAM;;;ACNvB,YAAY;;AAEZ;AACA,IAAI,KAAK,GAAG,SAAR,KAAK,GAAe;EACpB,CAAC,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,UAAU,MAAM,EAAE;IAC7C,MAAM,CAAC,cAAc,EAAE;IACvB,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAClD,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAEzC,CAAC,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAChD,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IACpC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;EACtC,CAAC,CAAC;EAEF,CAAC,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,UAAU,MAAM,EAAE;IACvC,MAAM,CAAC,cAAc,EAAE;IACvB,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC;EACtD,CAAC,CAAC;EAEF,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,UAAU,MAAM,EAAE;IACtC,MAAM,CAAC,cAAc,EAAE;IACvB,IAAI,CAAC,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAE,EAAE;MAC7E,IAAI,CAAC,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE;QAC9C,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,eAAe;MAC1C,CAAC,MAAM,IAAI,CAAC,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE;QACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,eAAe;MAC1C,CAAC,MAAM,IAAI,CAAC,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,EAAE;QACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,gDAAgD;MAC3E,CAAC,MAAM;QACH,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QACtC,UAAU,CAAC,YAAY;UACnB,CAAC,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;QAE7C,CAAC,EAAE,IAAI,CAAC;MACZ;IAEJ,CAAC,MAAM;MACH,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;MACtC,UAAU,CAAC,YAAY;QACnB,CAAC,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC;MAE7C,CAAC,EAAE,IAAI,CAAC;IACZ;EAGJ,CAAC,CAAC;AACN,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,KAAK;;;AChDtB,YAAY;;AAEZ;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAc;EACxB;EACA;EACA;AAAA,CACD;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ;;;ACTzB,YAAY;;AAEZ;AACA,IAAI,KAAK,GAAG,SAAR,KAAK,GAAc;EACrB,IAAI,CAAC,IAAI,GAAG,iBAAiB;;EAE7B;EACA,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,oBAAiB;IAC7C,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACnB,CAAC,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjD,CAAC;IACD,KAAK,EAAE,iBAAW;MACd,CAAC,CAAC,uBAAuB,CAAC,CAAC,MAAM,CAAC,6EAA6E,CAAC;IACpH;EACF,CAAC,CAAC;EAEF,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,eAAY;IACxC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACnB,IAAI,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC;MAC9C,YAAY,CAAC,WAAW,CAAC;MACzB,cAAc,CAAC,WAAW,CAAC;MAC3B,QAAQ,EAAE;IACd,CAAC;IACD,KAAK,EAAE,iBAAW;MACd,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,+FAA+F,CAAC;MAC1H,QAAQ,EAAE;IACd;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,sBAAsB,GAAG,SAAzB,sBAAsB,CAAI,IAAI,EAAK;EACnC,IAAI,aAAa,GAAG,CAAC,CAAC;EACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAClC,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IACpB,IAAI,MAAM,CAAC,QAAQ,IAAI,aAAa,EAAE;MAClC,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IAC/C,CAAC,MAAM;MACH,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;IAC7C;EACJ;EACA,OAAO,aAAa;AACxB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,IAAI,EAAK;EAC3B,KAAK,IAAI,QAAQ,IAAI,IAAI,EAAE;IACzB,IAAI,WAAW,KAAK;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC5C,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;MAC9B,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,CAAC;MAC1E,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;MAChE,IAAI,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;MACrE,IAAI,SAAS,GAAG,EAAE;MAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,IAAI,CAAC,KAAK,CAAC,EAAE;UACT,SAAS,GAAG,SAAS,CAAC,MAAM,aAAK,UAAU,CAAC,CAAC,CAAC,QAAI;QACtD,CAAC,MAAM;UACH,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/C;MACJ;MACA,WAAW,0EAEoB,MAAM,CAAC,EAAE,+DACP,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,QAAQ,eAAK,SAAS,8EAEhE,MAAM,CAAC,IAAI,uCACZ,MAAM,CAAC,QAAQ,sFAEX,MAAM,CAAC,iBAAiB,0CACxB,MAAM,CAAC,QAAQ,+EAI/B;IACL;IAEA,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,yDAEX,QAAQ,sEAER,WAAW,2CAGtB;EACL;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG,SAAjB,cAAc,CAAI,IAAI,EAAK;EAC3B,IAAI,IAAI,GAAG,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC;EAElD,IAAI,GAAG,GAAG,CAAC;EACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAClC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,gBAAS,GAAG,EAAG;IACpC,GAAG,IAAI,CAAC;EACZ;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAClC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE;MACzB,CAAC,iBAAU,CAAC,EAAG,CAAC,KAAK,CAAC;QAClB,SAAS,EAAE,kDAAkD;QAC7D,SAAS,EAAE,kDAAkD;QAC7D,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;QACjB,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,aAAa;QACvB,KAAK,EAAE;MACX,CAAC,CAAC;IACN,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE;MAChC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACnC,CAAC,iBAAU,CAAC,EAAG,CAAC,KAAK,CAAC;UAClB,SAAS,EAAE,kDAAkD;UAC7D,SAAS,EAAE,kDAAkD;UAC7D,YAAY,EAAE,CAAC;UACf,cAAc,EAAE,CAAC;UACjB,IAAI,EAAE,CAAC;UACP,MAAM,EAAE,IAAI;UACZ,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE,aAAa;UACvB,KAAK,EAAE;QACX,CAAC,CAAC;MACN;IACJ,CAAC,MAAM;MACH,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QACnC,CAAC,iBAAU,CAAC,EAAG,CAAC,KAAK,CAAC;UAClB,SAAS,EAAE,kDAAkD;UAC7D,SAAS,EAAE,kDAAkD;UAC7D,YAAY,EAAE,CAAC;UACf,cAAc,EAAE,CAAC;UACjB,IAAI,EAAE,CAAC;UACP,MAAM,EAAE,IAAI;UACZ,QAAQ,EAAE,IAAI;UACd,QAAQ,EAAE,aAAa;UACvB,KAAK,EAAE;QACX,CAAC,CAAC;MACN,CAAC,MACI;QACD,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;MACxC;IACJ;EAEJ;AACJ,CAAC;;AAED;AACA;AACA;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAS;EACjB,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;EACpB,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;EAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;EACvB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB,CAAC;AAEH,MAAM,CAAC,OAAO,GAAG,KAAK;;;AC9KtB,YAAY;;AAEZ;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,GAAc;EAC7B,IAAI,CAAC,IAAI,GAAG,eAAe;;EAE3B;EACA,MAAM,CAAC,IAAI,CAAC;IACX,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,eAAe,6BAA0B;IAC7D,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAE;MACvB,iBAAiB,CAAC,IAAI,CAAC;MACvB,QAAQ,GAAG,IAAI;MACf,eAAe,EAAE;MACjB,aAAa,EAAE;MACf,uBAAuB,CAAC,OAAO,CAAC;MAChC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;IACpB,CAAC;IACD,KAAK,EAAE,iBAAW;MACjB,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,4EAA4E,CAAC;MACrG,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;IACpB;EACD,CAAC,CAAC;EACF,MAAM,CAAC,IAAI,CAAC;IACX,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,eAAY;IACxC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACtB,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B;EACD,CAAC,CAAC;;EAEF;EACA,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;EAEnC;EACA,CAAC,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,YAAU;IAC1C,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;EAC9B,CAAC,CAAC;;EAEF;EACA,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAW;IAC1C,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;IACpC,IAAI,OAAO,EAAE;MACZ,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,YAAU;QACtC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAC,IAAI,CAAC;MAC7B,CAAC,CAAC;IACH,CAAC,MACI;MACJ,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,YAAU;QACtC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAC,KAAK,CAAC;MAC9B,CAAC,CAAC;IACH;EACD,CAAC,CAAC;EAEF,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAW;IACtC,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;IACpC,IAAI,OAAO,EAAE;MACZ,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,YAAU;QAClC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAC,IAAI,CAAC;MAC7B,CAAC,CAAC;IACH,CAAC,MACI;MACJ,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,YAAU;QAClC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,EAAC,KAAK,CAAC;MAC9B,CAAC,CAAC;IACH;EACD,CAAC,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,CAAI,IAAI,EAAK;EACjC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,CAAI,GAAG,EAAK;EAChC,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC/C,CAAC;;AAED;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG,SAAhB,aAAa,GAAS;EACzB;EACA,IAAI,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;EACpC,IAAI,aAAa,GAAG,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC;EAC5D,IAAI,SAAS,GAAG,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC;;EAExD;EACG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;IAClD,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,iCACE,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,iEACL,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,iDAC9B,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,sFAEZ,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,eAAK,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,wDAC/C,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,0DAI5C;EACC;;EAEH;EACA,KAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,aAAa,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE;IAC9C,IAAI,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,cAAc,EAAE;MACrD,aAAa,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;IACxC;IACA,IAAI,CAAC,IAAI,CAAC,EAAC,CAAC,CAAC,WAAW,EAAE;MACzB,SAAS,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;IACpC;EACD;AACD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,kBAAkB,GAAG,SAArB,kBAAkB,CAAI,OAAO,EAAK;EACrC,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;EACzC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AACxC,CAAC;;AAED;AACA;AACA;AACA;AACA,IAAI,eAAe,GAAG,SAAlB,eAAe,GAAS;EAC3B;EACA,IAAI,IAAI,GAAG,iBAAiB,CAAC,MAAM,CAAC;EACpC,IAAI,SAAS,GAAG,EAAE;;EAElB;EACA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACrC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE;MACtE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;MACpC,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,qGAE4B,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,wBAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,uFAC7F,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,gBAAK,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,8BAE5D;IACF;EACC;EACF;EACA,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,+GAI5B;;EAED;EACA,IAAI,gBAAgB,GAAG,EAAE;EACzB,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;IACrC,IAAI,OAAO,GAAG,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;IACpE,IAAI,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;MACnD,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;MAC9B,CAAC,CAAC,sBAAsB,CAAC,CAAC,MAAM,iGAEqB,OAAO,wBAAY,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,mFAC3E,OAAO,gBAAK,IAAI,CAAC,GAAC,CAAC,CAAC,WAAW,8BAE9C;IACF;EACD;;EAEA;EACA,CAAC,CAAC,sBAAsB,CAAC,CAAC,MAAM,+GAI/B;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,YAAY;;;ACxL7B,YAAY;;AAEZ,IAAI,SAAS,GAAG,OAAO,CAAC,wBAAwB,CAAC;AACjD,IAAI,SAAS,GAAG,IAAI,SAAS,EAAE;;AAE/B;AACA,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAc;EACzB,IAAI,CAAC,IAAI,GAAG,WAAW;;EAEvB;EACA,IAAM,uBAAuB,GAAG,SAAS,CAAC,gDAAgD,EAAE;EAC5F,IAAI,gBAAgB,GAAG;IACrB;IACA,SAAS,EAAE,sBAAsB;IACjC,UAAU,EAAE,uBAAuB;IACnC,MAAM,EAAE;EACV,CAAC;;EAED;EACA,IAAI,iBAAiB,GAAG,IAAI;EAC5B,IAAI,kBAAkB,GAAG,KAAK;EAC9B;EACA;EACA,IAAI,iBAAiB,GAAG,SAAS,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,EAAE;IACpF,IAAI,cAAc,GAAG,IAAI;IACzB,IAAI,cAAc,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE;MACrE,MAAM,CAAC,QAAQ,CAAC,IAAI,cAAO,cAAc,mBAAS,iBAAiB,CAAC,IAAI,CAAE;MAC1E,kBAAkB,GAAG,IAAI;IAC3B;EACF;EACA,IAAI,CAAC,kBAAkB,EAAE;IACvB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;EACrB;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,SAAS;;;ACnC1B,YAAY;;AAEZ;AACA,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,GAAc;EAChC,IAAI,CAAC,IAAI,GAAG,mBAAmB;EAE/B,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,qBAAkB;IAC9C,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACrB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,CAAC,CAAC,gCAAgC,CAAC,CAAC,MAAM,CAAC,4EAA4E,CAAC;MACxH,QAAQ,EAAE;IACZ;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,IAAI,EAAK;EAC3B,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC;EAChE,CAAC,CAAC,gCAAgC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC;EAE5E,IAAI,4BAA4B,GAAG,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,IAAI,CAAC;EAC/E,IAAI,kCAAkC,GAAG,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,KAAK,CAAC;EAC5F,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC,OAAO;;EAE9E;EACA,IAAI,SAAS,GAAG,kCAAkC,CAAC,kCAAkC,CAAC,MAAM,GAAG,CAAC,CAAC;EACjG,IAAI,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;IACtD,kCAAkC,CAAC,kCAAkC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;EAC5G;;EAEA;EACA,KAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,4BAA4B,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE;IAC7D,IAAI,8BAA8B,GAAI,EAAC,IAAE,CAAC,GAAE,UAAU,GAAC,EAAE;IACtD,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,yCACH,EAAC,GAAC,CAAC,oCAAuB,8BAA8B,OACvF;EACL;EAEA,IAAI,QAAQ,EAAE;IACZ,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,qCAAmC;IACtE,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,4BAA4B,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;MAC5D,IAAI,uCAAuC,GAAG,kCAAkC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,mBAAU,OAAO,CAAC,GAAG,CAAC,QAAQ,yBAAsB,CAAC,CAAC;;MAEnL,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC;MAAE,aAAa,CAAC,SAAS,GAAG,iBAAiB;MAAE,aAAa,CAAC,WAAW,GAAG,4BAA4B,CAAC,GAAC,CAAC;MAC1J,IAAI,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;MAAE,eAAe,CAAC,SAAS,GAAG,kBAAkB;MACnG,IAAI,sBAAsB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;MAAE,sBAAsB,CAAC,SAAS,GAAG,0BAA0B;MACzH,IAAI,mBAAmB,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;MAAE,mBAAmB,CAAC,SAAS,GAAG,mBAAmB;MAAE,mBAAmB,CAAC,SAAS,GAAG,uCAAuC;MAEnL,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC;MAC9C,eAAe,CAAC,WAAW,CAAC,aAAa,CAAC;MAC1C,eAAe,CAAC,WAAW,CAAC,sBAAsB,CAAC;MACnD,sBAAsB,CAAC,WAAW,CAAC,mBAAmB,CAAC;IACzD;EACF,CAAC,MAAM;IACL,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,mEAA+D;IAClG,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,0EAAsE;IACzG,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,4BAA4B,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;MAC5D,IAAI,iCAAiC,GAAG,4BAA4B,CAAC,GAAC,CAAC;MACvE,IAAI,wCAAuC,GAAG,kCAAkC,CAAC,GAAC,CAAC,CAAC,OAAO,CAAC,iCAAiC,mBAAU,OAAO,CAAC,GAAG,CAAC,QAAQ,yBAAsB,CAAC,CAAC;MACnL,CAAC,CAAC,8BAA8B,CAAC,CAAC,MAAM,qCACZ,iCAAiC,4CACxC,GAAC,GAAC,CAAC,oDACV,iCAAiC,iDAEtC;MACT,CAAC,CAAC,oCAAoC,CAAC,CAAC,MAAM,iCAExC,wCAAuC,0BAC/B;IAChB;EACF;;EAEA;EACA,IAAI,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC;EACpE,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,2CAAyC;EAC5E,CAAC,CAAC,6BAA6B,CAAC,CAAC,IAAI,EAAE;EACvC,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;IACtD,CAAC,CAAC,6BAA6B,CAAC,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAC,CAAC,CAAC;IAClE,IAAI,UAAU,GAAG,CAAC,CAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE;IAC1E,IAAI,QAAQ,GAAG,CAAC,CAAC,6BAA6B,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;IAC9E,CAAC,CAAC,yBAAyB,CAAC,CAAC,MAAM,0DAAgD,QAAQ,0FAA2E,UAAU,+BAA4B;EAC9M;;EAEA;EACA,IAAI,eAAe,GAAG,QAAQ,CAAC,sBAAsB,CAAC,iBAAiB,CAAC;EAExE,KAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IAC1C,eAAe,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,YAAW;MACtD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,sBAAsB,CAAC;MAC7C,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC7C,CAAC,CAAC;EACN;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,gBAAgB;;;ACtGjC,YAAY;;AAEZ;AACA,IAAI,cAAc,GAAG,SAAjB,cAAc,GAAc;EAC9B,CAAC,CAAC,iDAAiD,CAAC,CAAC,WAAW,EAAE;EAElE,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,qBAAkB;IAC9C,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACnB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,mFAAmF,CAAC;MAC3G,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;MACpC,QAAQ,EAAE;IACZ;EACF,CAAC,CAAC;EACF,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,iBAAc;IAC1C,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACnB,uBAAuB,CAAC,IAAI,CAAC;MAC7B,cAAc,EAAE;MAChB,QAAQ,EAAE;IACd,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,mFAAmF,CAAC;MAC3G,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC;MACpC,QAAQ,EAAE;IACZ;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA,IAAI,cAAc,GAAG,SAAjB,cAAc,GAAS;EACzB,UAAU,CAAC,YAAU;IACnB,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAC,gBAAgB,CAAC;IAEvD,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC;MAC3B,IAAI,EAAE,IAAI;MACV,QAAQ,EAAE,IAAI;MACd,KAAK,EAAE,GAAG;MACV,QAAQ,EAAE,KAAK;MACf,MAAM,EAAE,IAAI;MACZ,YAAY,EAAE,CAAC;MACf,cAAc,EAAE,CAAC;MACjB,IAAI,EAAE,CAAC;MACP,QAAQ,EAAE,aAAa;MACvB,SAAS,EAAE,YAAY;MACvB,SAAS,EAAE,kDAAkD;MAC7D,SAAS,EAAE,kDAAkD;MAC7D,UAAU,EAAE,CACR;QACI,UAAU,EAAE,GAAG;QACf,QAAQ,EAAE;UACN,YAAY,EAAE;QAClB;MACJ,CAAC;IAEP,CAAC,CAAC;EACJ,CAAC,EAAE,CAAC,CAAC;EACL,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY;IAC/B,CAAC,CAAC,yDAAyD,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;EAChF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,GAAG,SAA1B,uBAAuB,CAAI,IAAI,EAAK;EACtC,IAAI,YAAY,GAAG,CAAC;EACpB,IAAI,CAAC,GAAG,CAAC;EAAC,6BAEkC;IAC1C,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/C;IACA;IACA,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;MACrD,IAAK,OAAO,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,IAC5C,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAE,EAAE;QACpD,OAAO,IAAI;MACb;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IACF,IAAI,UAAU,GAAG,EAAE;IACnB,IAAI,KAAK,GAAG,mBAAmB,GAAG,CAAC,CAAC,GAAC,CAAC,EAAE,QAAQ,EAAE;IAElD,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC/C,IAAI,CAAC,KAAK,CAAC,EAAE;QACT,UAAU,GAAG,UAAU,CAAC,MAAM,aAAK,eAAe,CAAC,CAAC,CAAC,QAAI;MAC7D,CAAC,MAAM;QACH,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MACtD;IACF;IAEA,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC,OAAO;IAE9E,IAAI,QAAQ,EAAE;MACZ,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,8CACwB,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,oJAG7B,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,SAAS,4OAKxC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,yFAMxB;IAEH,CAAC,MAAM;MACL,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,yMAK6B,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,oCAAuB,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,qDAE/E,eAAe,kCACf,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,sIAGc,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,2CAChC,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,SAAS,gFAInD;IACH;IAEA,CAAC,EAAE;EACL,CAAC;EAjED,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,YAAY;IAAA;EAAA;AAkE5C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,OAAO,EAAK;EAC9B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;EACpC,CAAC,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;EAClC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;EAC3C,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;AACzD,CAAC;;AAED;AACA;AACA;AACC,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAS;EACpB,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE;EAC5B,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE;EAChC,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE;EAC5B,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;EACrB,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;EAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;EACvB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,cAAc;;;AC5K/B,YAAY;;AAEZ;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,GAAc;EAC5B,IAAI,CAAC,IAAI,GAAG,iBAAiB;EAE7B,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,qBAAkB;IAC9C,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACrB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,4EAA4E,CAAC;MAC3G,QAAQ,EAAE;IACZ;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,IAAI,EAAK;EAC3B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;EACtC,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;EAElD,IAAI,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;EAC/C,IAAI,cAAc,GAAG,IAAI,CAAC,iBAAiB;EAE3C,IAAI,CAAC,GAAG,CAAC;EAAC,6BACyB;IAEjC,IAAI,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;IACpD;IACA;IACA,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;MAC5E,IAAK,OAAO,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,IAC5C,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAE,EAAE;QACpD,OAAO,IAAI;MACb;MACA,OAAO,KAAK;IACd,CAAC,CAAC;IACF,IAAI,UAAU,GAAG,EAAE;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC7C,IAAI,CAAC,KAAK,CAAC,EAAE;QACT,UAAU,GAAG,UAAU,CAAC,MAAM,aAAK,eAAe,CAAC,CAAC,CAAC,QAAI;MAC7D,CAAC,MAAM;QACH,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MACtD;IACJ;IAEA,IAAI,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IAErC,CAAC,CAAC,YAAY,CAAC,CAAC,MAAM,iFAGF,SAAS,gBAAK,UAAU,8CAEjC,OAAO,uBAEjB;IACH,CAAC,EAAE;EACH,CAAC;EAjCD,OAAO,CAAC,GAAG,eAAe,CAAC,MAAM;IAAA;EAAA;;EAmCjC;EACA,IAAI,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;EACrD,IAAI,qBAAqB,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;EAEjE,CAAC,GAAG,CAAC;EACL,OAAO,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE;IACjC,IAAI,SAAS,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IACzC,IAAI,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;IAErD,CAAC,CAAC,qBAAqB,CAAC,CAAC,MAAM,4FAGE,SAAS,6HAGV,eAAe,wBAE9C;IACD,CAAC,EAAE;EACL;EAEA,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,6DAA6D,CAAC,CAAC,OAAO;EACvG,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC,OAAO;EAC9E,IAAI,YAAY,GAAG,MAAM;EACzB,IAAI,UAAU,GAAG,OAAO;EAExB,IAAI,QAAQ,EAAE;IACV,YAAY,GAAG,MAAM;IACrB,UAAU,GAAG,OAAO;EACxB;EACA,IAAI,QAAQ,EAAE;IACV,YAAY,GAAG,MAAM;IACrB,UAAU,GAAG,OAAO;EACxB;EAEA,IAAI,MAAM,GAAG,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC;EAE1D,IAAI,eAAe,GAAG,SAAlB,eAAe,GAAS;IAC1B,KAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MACjC,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;MACnC,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE;QACnC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY;QACrC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;MAClC,CAAC,MAAM;QACH,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU;QACnC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;MACnC;IACJ;EACF,CAAC;EAED,KAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACjC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,CAAC;EAC/D;AACF,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,YAAY;;;AC1H7B,YAAY;;AAEZ;AACA,IAAI,iBAAiB,GAAG,SAApB,iBAAiB,GAAe;EAChC,CAAC,CAAC,yBAAyB,CAAC,CAAC,WAAW,EAAE;EAE1C,MAAM,CAAC,IAAI,CAAC;IACR,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,iBAAc;IAC1C,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACnB,gBAAgB,CAAC,IAAI,CAAC;MACtB,QAAQ,EAAE;MACV,cAAc,EAAE;IACpB,CAAC;IACD,KAAK,EAAE,iBAAW;MACd,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,2GAA2G,CAAC;MAC9H,QAAQ,EAAE;IACd;EACJ,CAAC,CAAC;AACN,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,gBAAgB,GAAG,SAAnB,gBAAgB,CAAI,IAAI,EAAK;EAC7B,IAAI,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,6DAA6D,CAAC,CAAC,OAAO;EAE7G,IAAI,YAAY,GAAG,CAAC;EACpB,IAAI,cAAc,EAAE;IAChB,YAAY,GAAG,CAAC;EACpB;EAEA,IAAI,CAAC,GAAG,CAAC;;EAET;EAAA,6BAC4C;IACxC;IACA,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAC/C;IACA;IACA,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE;MACnD,IAAK,OAAO,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,WAAW,IAC1C,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAE,EAAE;QACpD,OAAO,IAAI;MACf;MACA,OAAO,KAAK;IAChB,CAAC,CAAC;IACF,IAAI,UAAU,GAAG,EAAE;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC7C,IAAI,CAAC,KAAK,CAAC,EAAE;QACT,UAAU,GAAG,UAAU,CAAC,MAAM,aAAK,eAAe,CAAC,CAAC,CAAC,QAAI;MAC7D,CAAC,MAAM;QACH,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;MACtD;IACJ;;IAEA;IACA,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC;;IAEpE;IACA,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;IACjD,IAAI,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC;IAClC,IAAI,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;IAEjC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,oEAE2B,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,wHAE1B,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,SAAS,gCAAmB,UAAU,mFAEzD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,iHAEF,YAAY,iEACnB,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,mEACpB,YAAY,sEACT,SAAS,iFAIjD;IACD,CAAC,EAAE;EACP,CAAC;EA9CD,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,YAAY;IAAA;EAAA;AA+C9C,CAAC;;AAED;AACA;AACA;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAS;EACjB,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE;AACpC,CAAC;;AAED;AACA;AACA;AACA,IAAI,cAAc,GAAG,SAAjB,cAAc,GAAS;EACvB,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC,OAAO;;EAE9E;EACA,IAAI,CAAC,QAAQ,EAAE;IACX,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ;IACA,CAAC,CAAC,gCAAgC,CAAC,CAAC,IAAI,CAAC,YAAW;MAChD,IAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE;MAC7B,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG;IACrC,CAAC,CAAC;IACF;IACA,CAAC,CAAC,gCAAgC,CAAC,CAAC,IAAI,CAAC,YAAW;MAChD,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;IACvB,CAAC,CAAC;EACN;AACJ,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,iBAAiB;;;AClHlC,YAAY;;AAEZ;AACA,IAAI,OAAO,GAAG,SAAV,OAAO,GAAc;EACvB,IAAI,CAAC,IAAI,GAAG,UAAU;EAEtB,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,aAAU;IACtC,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACrB,YAAY,CAAC,IAAI,CAAC;MAClB,UAAU,CAAC,YAAW;QACpB,QAAQ,EAAE;QACV,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE;UACxB,aAAa,EAAE;QACjB;MACF,CAAC,EAAE,GAAG,CAAC;IACT,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,oGAAoG,CAAC;IAChI;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA,IAAI,aAAa,GAAG,SAAhB,aAAa,GAAS;EACxB,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI;EAClC,IAAI,OAAO,GAAG,QAAQ,CAAC,aAAa,WAAI,OAAO,EAAG;EAClD,IAAI,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC;EAC9C,IAAI,OAAO,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAC,IAAK;EAClG,IAAI,SAAS,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO;EAC3C,MAAM,CAAC,QAAQ,CAAC;IAAC,QAAQ,EAAE,QAAQ;IAAE,GAAG,EAAE;EAAS,CAAC,CAAC;AACvD,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,IAAI,EAAK;EAC3B,IAAI,CAAC,GAAG,CAAC;EACT;EACA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,EAAE;IAChC;IACA,IAAI,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7C,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;IAChC,IAAI,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;IACrE,IAAI,SAAS,GAAG,EAAE;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC7C,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,SAAS,GAAG,SAAS,CAAC,MAAM,aAAK,aAAa,CAAC,CAAC,CAAC,QAAI;MACvD,CAAC,MAAM;QACL,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;MAChD;IACF;IAEA,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,mEAEO,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,2DACR,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,QAAQ,eAAK,SAAS,0GAGlE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,iCACb,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,wEAEd,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,kCACzB,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,kEAK5B;IACD,CAAC,EAAE;EACL;AACF,CAAC;;AAED;AACA;AACA;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAS;EACnB,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE;EAC5B,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,EAAE;EAChC,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE;EAC5B,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;EACrB,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;EAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;EACvB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,OAAO;;;AC5FxB,YAAY;;AAEZ;AACA,IAAI,eAAe,GAAG,SAAlB,eAAe,GAAc;EAC/B,IAAI,CAAC,IAAI,GAAG,mBAAmB;EAE/B,MAAM,CAAC,IAAI,CAAC;IACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,sBAAmB;IAC/C,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,iBAAS,IAAI,EAAC;MACrB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;MACrB,QAAQ,EAAE;IACZ,CAAC;IACD,KAAK,EAAE,iBAAW;MAChB,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,+FAA+F,CAAC;MAC1H,QAAQ,EAAE;IACZ;EACF,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,SAAf,YAAY,CAAI,IAAI,EAAK;EAC3B,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;EAClC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AACpC,CAAC;;AAED;AACA;AACA;AACA,IAAI,QAAQ,GAAG,SAAX,QAAQ,GAAS;EACnB,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE;EAC9B,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;EAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;EACvB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,eAAe;;;ACxChC,YAAY;;AAEZ,IAAI,SAAS,GAAG,OAAO,CAAC,wBAAwB,CAAC;AACjD,IAAI,SAAS,GAAG,IAAI,SAAS,EAAE;;AAE/B;AACA,IAAI,aAAa,GAAG,SAAhB,aAAa,GAAc;EAC7B,IAAI,CAAC,IAAI,GAAG,gBAAgB;EAE5B,IAAI,sBAAsB,GAAG,aAAa;EAE1C,SAAS,CAAC,eAAe,CACvB,sBAAsB,EACtB,kCAAkC,EAClC,gCAAgC,CACjC;AACH,CAAC;AAED,SAAS,kCAAkC,CAAC,IAAI,EAAE;EAChD,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;EACrB,QAAQ,EAAE;AACZ;AAEA,SAAS,gCAAgC,GAAG;EAC1C;AAAA;;AAIF;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,OAAO,EAAE;EAC7B;EACA,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,kCACS,OAAO,CAAC,IAAI,iDACX,OAAO,CAAC,QAAQ,0DACP,OAAO,CAAC,iBAAiB,yCAC1C,OAAO,CAAC,IAAI,sDACE,OAAO,CAAC,UAAU,4DACb,OAAO,CAAC,gBAAgB,gBAE7D;;EAED;EACA,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,+NAGsE,OAAO,CAAC,QAAQ,4GAItG;;EAED;EACA,IAAI,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oCAAoC,CAAC,CAAC,OAAO;EAE9E,IAAI,QAAQ,EAAE;IACZ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,mDAA+C;EACnE,CAAC,MACI;IACH,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,mDAA+C;EACnE;;EAEA;EACA,IAAI,YAAY,GAAG,OAAO,CAAC,KAAK;EAChC,IAAI,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;EAErE,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,OAAO,kCAA2B,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,QAAQ,QAAK;;EAE9F;EACA,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;EACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACxC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,0CAEH,QAAQ,CAAC,CAAC,CAAC,uBAE/B;EACH;;EAEA;EACA,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE;IAChE,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,oCAAoC,CAAC;EAC7D,CAAC,MAAM;IACL,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;EACvB;EAEA,IAAI,OAAO,CAAC,KAAK,EAAE;IACjB,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,4BACA,OAAO,CAAC,KAAK,gFAGjC;EACH;EAEA,IAAI,OAAO,CAAC,WAAW,EAAE;IACvB,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,mDACY,OAAO,CAAC,WAAW,kGAEjB,OAAO,CAAC,WAAW,6BAErD;EACH;EAEA,IAAI,OAAO,CAAC,YAAY,EAAE;IACxB,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,6BACR,OAAO,CAAC,YAAY,mFAGhC;EACH;AACF;AAEA,SAAS,QAAQ,GAAG;EAClB,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE;EAC3B,CAAC,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE;EAC1B,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE;EACvB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB;AAEA,MAAM,CAAC,OAAO,GAAG,aAAa;;;ACzH9B,YAAY;;AAEZ;AACA,IAAI,OAAO,GAAG,SAAV,OAAO,GAAc;EACvB,IAAI,CAAC,IAAI,GAAG,UAAU;EAEtB,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;AACrB,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,OAAO;;;ACTxB,YAAY;;AAEZ;AACA,IAAI,SAAS,GAAG,SAAZ,SAAS,GAAe;EAAA;EAC1B,IAAI,CAAC,IAAI,GAAG,WAAW;EAEvB,IAAI,CAAC,6BAA6B,GAAG,sBAAsB;EAE3D,IAAI,CAAC,eAAe,GAAG,UAAC,sBAAsB,EAAE,sBAAsB,EAAE,oBAAoB,EAAK;IAC/F,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;IAC1C,IAAM,SAAS,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC;IAClD;IACA,IAAI,iBAAiB,GAAG,IAAI;IAC5B,IAAI,YAAY,GAAG,IAAI;IACvB;IACA,IAAI,iBAAiB,GAAG,KAAI,CAAC,uCAAuC,EAAE,EAAE;MACtE,YAAY,GAAG,iBAAiB,CAAC,EAAE;IACrC;IACA,IAAI,CAAC,YAAY,EAAE;MACjB,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IACpC;;IAEA;IACA,MAAM,CAAC,IAAI,CAAC;MACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,sBAAsB,iBAAO,YAAY,CAAE;MAC1E,IAAI,EAAE,KAAK;MACX,OAAO,EAAE,iBAAU,IAAI,EAAE;QACvB,sBAAsB,CAAC,IAAI,CAAC;MAE9B,CAAC;MACD,KAAK,EAAE,iBAAY;QACjB,oBAAoB,EAAE;MACxB;IACF,CAAC,CAAC;EACJ,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,IAAI,CAAC,uCAAuC,GAAG,YAAM;IACnD,IAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM;IAC1C,IAAM,SAAS,GAAG,IAAI,eAAe,CAAC,WAAW,CAAC;IAClD,OAAO,KAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAC9D,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,IAAI,CAAC,yBAAyB,GAAG,UAAC,cAAc,EAAK;IACnD,IAAI,iBAAiB,GAAG,IAAI;IAE5B,MAAM,CAAC,IAAI,CAAC;MACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,SAAG,KAAI,CAAC,6BAA6B,CAAE;MACnE,IAAI,EAAE,KAAK;MACX,OAAO,EAAE,iBAAU,OAAO,EAAE;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;UACvC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE;YACtC,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;YAC9B;UACF;QACF;MACF,CAAC;MACD,KAAK,EAAE,iBAAY,CACnB,CAAC;MACD,KAAK,EAAE;IACT,CAAC,CAAC;IACF,OAAO,iBAAiB;EAC1B,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,IAAI,CAAC,gDAAgD,GAAG,YAAM;IAC5D;IACA;IACA,IAAI,uBAAuB,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnE,MAAM,CAAC,IAAI,CAAC;MACV,GAAG,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,cAAW;MACvC,IAAI,EAAE,KAAK;MACX,OAAO,EAAE,iBAAU,OAAO,EAAE;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;UACvC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,uBAAuB,EAAE;YACpD,uBAAuB,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO;YAC5C;UACF;QACF;MACF,CAAC;MACD,KAAK,EAAE,iBAAY,CACnB,CAAC;MACD,KAAK,EAAE;IACT,CAAC,CAAC;IACF,OAAO,uBAAuB;EAChC,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,IAAI,CAAC,kBAAkB,GAAG,UAAC,IAAI,EAAK;IAClC,IAAI,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IAC3C,OAAO,CAAC,SAAS,GAAG,IAAI;IAExB,IAAI,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC;IAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;MAC/C,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;QAC7B,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,yBAAsB;MACzI;IACF;;IAEA;IACA,IAAI,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC;IAChD,KAAK,IAAI,EAAC,GAAG,CAAC,EAAE,EAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAC,EAAE,EAAE;MACtC,IAAI,WAAW,GAAG,MAAM,CAAC,EAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;MAC1C,IAAI,UAAU,GAAG,EAAE;MACnB,WAAW,CAAC,CAAC,CAAC,aAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAE;MACnD,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;MAC5C,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,GAAG,GAAG,WAAW;;MAExD;MACA,IAAI,MAAM,CAAC,EAAC,CAAC,CAAC,MAAM,EAAE;QACpB,MAAM,CAAC,EAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,EAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,YAAK,OAAO,CAAC,GAAG,CAAC,QAAQ,yBAAsB;MACvH;;MAEA;MACA,IAAI,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,QAAQ,EAAE;QAC3F;QACA,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,aAAa,CAAC,SAAS;QAC3E,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;UACtC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,IAAK,yEAA0E;QACnJ,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;UAC5C,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,IAAK,yEAA0E;QACnJ,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;UAC9C,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,IAAK,+BAAgC;QACzG;QACA,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,IAAK,qBAAsB;MAC/F,CAAC,MAAM;QACL;QACA,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,SAAS;QAC7D,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;UACtC,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAK,yEAA0E;QACrI,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;UAC5C,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAK,yEAA0E;QACrI,CAAC,MAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;UAC9C,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,KAAK,CAAC,OAAO,IAAK,+BAAgC;QAC3F;MACF;IACF;IACA,OAAO,OAAO,CAAC,SAAS;EAC1B,CAAC;AACH,CAAC;AAGD,MAAM,CAAC,OAAO,GAAG,SAAS;;;ACjK1B;AACA;;AAEA,YAAY;;AACZ,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC;;AAE/B,MAAM,CAAC,uBAAuB,aAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE;AAC1D,MAAM,CAAC,gCAAgC,aAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAE;AAC5E,MAAM,CAAC,uBAAuB,aAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAE;;AAE1D;AACA;AACA;AACA;AACA,IAAI,WAAW,GAAG,OAAO,CAAC,gDAAgD,CAAC;AAC3E,IAAI,cAAc,GAAG,OAAO,CAAC,oDAAoD,CAAC;;AAElF;;AAEA,IAAI,QAAQ,GAAG,OAAO,CAAC,sCAAsC,CAAC;AAC9D,IAAI,cAAc,GAAG,OAAO,CAAC,sDAAsD,CAAC;AACpF,IAAI,YAAY,GAAG,OAAO,CAAC,sDAAsD,CAAC;AAClF,IAAI,gBAAgB,GAAG,OAAO,CAAC,0DAA0D,CAAC;AAC1F,IAAI,iBAAiB,GAAG,OAAO,CAAC,8DAA8D,CAAC;AAC/F,IAAI,OAAO,GAAG,OAAO,CAAC,wCAAwC,CAAC;AAC/D,IAAI,KAAK,GAAG,OAAO,CAAC,gCAAgC,CAAC;AACrD,IAAI,WAAW,GAAG,OAAO,CAAC,uCAAuC,CAAC;AAClE,IAAI,YAAY,GAAG,OAAO,CAAC,uDAAuD,CAAC;AACnF,IAAI,SAAS,GAAG,OAAO,CAAC,iDAAiD,CAAC;AAC1E,IAAI,QAAQ,GAAG,OAAO,CAAC,+BAA+B,CAAC;AACvD,IAAI,cAAc,GAAG,OAAO,CAAC,6CAA6C,CAAC;AAC3E,IAAI,eAAe,GAAG,OAAO,CAAC,+CAA+C,CAAC;AAC9E,IAAI,YAAY,GAAG,OAAO,CAAC,yCAAyC,CAAC;AACrE,IAAI,aAAa,GAAG,OAAO,CAAC,2CAA2C,CAAC;AACxE,IAAI,aAAa,GAAG,OAAO,CAAC,6CAA6C,CAAC;AAC1E,IAAI,eAAe,GAAG,OAAO,CAAC,qCAAqC,CAAC;AACpE,IAAI,MAAM,GAAG,OAAO,CAAC,kCAAkC,CAAC;AACxD,IAAI,OAAO,GAAG,OAAO,CAAC,+BAA+B,CAAC;AACtD,IAAI,QAAQ,GAAG,OAAO,CAAC,wCAAwC,CAAC;AAChE,IAAI,KAAK,GAAG,OAAO,CAAC,yBAAyB,CAAC;AAE9C,CAAC,CAAC,YAAY;EACV;EACA,IAAI,QAAQ,EAAE;;EAEd;EACA,IAAI,QAAQ,EAAE,CAAC,CAAC;EAChB,IAAI,KAAK,EAAE;EACX,IAAI,WAAW,EAAE;EACjB,IAAI,cAAc,EAAE;EACpB,IAAI,SAAS,EAAE;EACf,IAAI,YAAY,EAAE;EAClB,IAAI,MAAM,EAAE;EAEZ,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3B,IAAI,cAAc,EAAE;IACpB,IAAI,YAAY,EAAE;IAClB,IAAI,gBAAgB,EAAE;IACtB,IAAI,iBAAiB,EAAE;IACvB,IAAI,OAAO,EAAE;EACjB,CAAC,MAAM,IAAI,CAAC,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACzC,IAAI,iBAAiB,EAAE;IACvB,IAAI,cAAc,EAAE;EACxB,CAAC,MAAM,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACvC,IAAI,QAAQ,EAAE;EAClB,CAAC,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACjC,IAAI,aAAa,EAAE;EACvB,CAAC,MAAM,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACvC,IAAI,YAAY,EAAE;EACtB,CAAC,MAAM,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACtC,IAAI,WAAW,EAAE;EACrB,CAAC,MAAM,IAAI,CAAC,CAAC,oCAAoC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3D,IAAI,eAAe,EAAE;EACzB,CAAC,MAAM,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3C,IAAI,eAAe,EAAE;EACzB,CAAC,MAAM,IAAI,CAAC,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACxC,IAAI,aAAa,EAAE;IACnB,IAAI,OAAO,EAAE;EACjB,CAAC,MAAM,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IAClC,IAAI,OAAO,EAAE;EACjB,CAAC,MAAM,IAAI,CAAC,CAAC,8BAA8B,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;IACrD,IAAI,KAAK,EAAE;EACf;EACA;EACA,IAAI,QAAQ,EAAE;AAClB,CAAC,CAAC","file":"main.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()","'use strict';\n\nvar Utilities = require('../utilities/utilities');\nvar utilities = new Utilities();\n\n// Constructor\nvar ArticleDetails = function() {\n this.name = 'article.details';\n\n let contentTypeLoadApiPath = 'article-details';\n\n utilities.loadPageContent(\n contentTypeLoadApiPath,\n loadPageContentAjaxSuccessCallback,\n loadPageContentAjaxErrorCallback\n );\n}\n\nfunction loadPageContentAjaxSuccessCallback(data) {\n if (data.hasOwnProperty(0)) {\n populateData(data[0]);\n showData();\n }\n else {\n loadPageContentAjaxErrorCallback();\n }\n}\n\nfunction loadPageContentAjaxErrorCallback() {\n showError();\n}\n\nfunction showError() {\n $(\"#article-body\").append(\"<p style='text-align:center; font-size: 1.25em'>Unable to load content. Please try again.</p>\");\n $(\".banner-with-text\").css(\"display\", \"none\");\n $(\".sideblock\").css(\"display\", \"none\");\n showData();\n}\n\n/**\n * This function renders the data object on to the page\n *\n * @param {Object} dataObj A data object retrieved from the backend API\n */\nvar populateData = (dataObj) => {\n let bodyContent = utilities.handleInlineImages(dataObj.body_description);\n\n // process video URL in the body content\n bodyContent = bodyContent.replace(/ src=\\\"\\/sites\\/default\\/files/g,` src=\"${process.env.ROOT_URL}sites/default/files`);\n\n // extract text from html strings\n let subtitle = dataObj.body_title.replace(/(<([^>]+)>)/gi, \"\");\n\n let isMobile = window.matchMedia(\"only screen and (max-width: 767px)\").matches;\n\n if (isMobile) {\n $(\".sideblock\").prepend(\n `<div class=\"authors\" id=\"author-section\">\n <span class=\"title\">Authors</span>\n </div>\n <hr class=\"separator\">\n <div class=\"reading-time\"></div>\n <div class=\"date\"></div>\n <hr class=\"separator\">\n <ul id=\"tag-section\" class=\"tags\"></ul>\n <div class=\"share\">\n <a onclick=\"copyLink()\">\n <img src=\"/images/link.svg\">\n </a>\n <a onclick=\"showShareOptions()\">\n <img src=\"/images/share.svg\">\n </a>\n <a onclick=\"window.print()\">\n <img src=\"/images/print.svg\">\n </a>\n <hr class=\"separator\">\n </div>`\n );\n } else {\n $(\".container-article-details\").prepend(\n `<div class=\"article-info\">\n <hr class=\"separator\">\n <div class=\"horizontal\">\n <i class=\"icon-calendar\"></i>\n <div class=\"date\"></div>\n <img class=\"clock-icon\" src=\"/images/clock.svg\">\n <div class=\"reading-time\"></div>\n <div class=\"share\">\n <a onclick=\"copyLink()\">\n <img src=\"/images/link.svg\">\n </a>\n <a onclick=\"showShareOptions()\">\n <img src=\"/images/share.svg\">\n </a>\n <a onclick=\"window.print()\">\n <img src=\"/images/print.svg\">\n </a>\n </div>\n </div>\n <hr class=\"separator\">\n </div>`\n );\n $(\".sideblock\").append(\n `<div class=\"authors\" id=\"author-section\">\n <span class=\"title\">Authors</span>\n </div>`\n );\n }\n // render content on the page\n $(\"#article-title\").html(dataObj.title);\n $(\"#subtitle\").append(subtitle);\n $(\"#article-body\").append(bodyContent);\n $(\".reading-time\").html(dataObj.read_time);\n $(\".date\").html(dataObj.published_date);\n\n // set banner background image\n let image_raw_array = dataObj.image.split(\"\\\"\");\n // Since 'lazy' in the dom, find url attr dynamically as find it and then\n // returning after it.\n let image_src = image_raw_array.find(function (val, i) {\n if ((typeof image_raw_array[i - 1] !== 'undefined')\n && (image_raw_array[i - 1].indexOf('src=') !== -1)) {\n return true;\n }\n return false;\n });\n $(\".banner-with-text\").attr(\"style\", `background-image:url('${process.env.ROOT_URL}${image_src}')`);\n\n // populating authors\n let authorArray = dataObj.author_name.split(\", \");\n let authorPosArray = dataObj.author_designation.split(\", \");\n let authorImageArray = dataObj.author_image.split(\", \");\n for (let i = 0; i < authorArray.length; i++) {\n $(\"#author-section\").append(\n `<div class=\"author\">\n <img src=\"${process.env.ROOT_URL}${authorImageArray[i]}\" class=\"avatar\" alt=\"Avatar\">\n <span class=\"name\">${authorArray[i]}</span>\n <span class=\"creds\">${authorPosArray[i]}</span>\n </div>`\n );\n }\n\n // populating tags\n let tagsArray = dataObj.tags.split(\", \");\n for (let j = 0; j < tagsArray.length; j++) {\n let tag_data = tagsArray[j].split(\">\");\n let tag_href = tag_data[0].split(\"/\");\n let tagId = tag_href[tag_href.length - 1].split(\"\\\"\")[0];\n let tag = tag_data[1].split(\"<\")[0];\n $(\"#tag-section\").append(\n `<li>\n <a href=\"/articles.html?tags=${tagId}\" class=\"tag\">${tag}</a>\n </li>`\n );\n }\n\n // process accordion title and content in rich text\n var accordionTitles = [];\n var accordionTitleIndex = -1;\n var accordionContents = [];\n var accordionContentStatus = 0;\n var articleParagraphs = $(\"#article-body\").children();\n for( var i = 0; i < articleParagraphs.length; i++){\n if($(articleParagraphs[i]).hasClass(\"accordion-title\")){\n accordionTitleIndex++;\n accordionTitles.push(articleParagraphs[i]);\n }else if($(articleParagraphs[i]).hasClass(\"accordion-content\")){\n if(typeof(accordionContents[accordionTitleIndex]) == 'undefined'){ accordionContents.push([]); }\n if(accordionTitleIndex < 0) accordionTitleIndex = 0;\n accordionContents[accordionTitleIndex].push(articleParagraphs[i]);\n }else if($(articleParagraphs[i]).hasClass(\"accordion-content-start\")){\n if(typeof(accordionContents[accordionTitleIndex]) == 'undefined'){ accordionContents.push([]); }\n if(accordionTitleIndex < 0) accordionTitleIndex = 0;\n accordionContents[accordionTitleIndex].push(articleParagraphs[i]);\n accordionContentStatus = 1;\n }else if($(articleParagraphs[i]).hasClass(\"accordion-content-end\")){\n if(typeof(accordionContents[accordionTitleIndex]) == 'undefined'){ accordionContents.push([]); }\n accordionContents[accordionTitleIndex].push(articleParagraphs[i]);\n accordionContentStatus = 0;\n }else if(accordionContentStatus == 1){\n if(typeof(accordionContents[accordionTitleIndex]) == 'undefined'){ accordionContents.push([]); }\n accordionContents[accordionTitleIndex].push(articleParagraphs[i]);\n }\n }\n for( var i = 0; i < accordionTitles.length; i++){\n if(accordionTitles[i].nextElementSibling!=null){\n var accordionHolder = document.createElement(\"div\"); accordionHolder.className = \"accordion-holder\";\n var accordionContentHolder = document.createElement(\"div\"); accordionContentHolder.className = \"accordion-content-holder\";\n accordionTitles[i].parentNode.insertBefore(accordionHolder,accordionTitles[i].nextElementSibling);\n accordionHolder.appendChild(accordionTitles[i]);\n accordionHolder.appendChild(accordionContentHolder);\n if(typeof(accordionContents[i]) != 'undefined'){\n for( var j = 0; j < accordionContents[i].length; j++){\n accordionContentHolder.appendChild(accordionContents[i][j]);\n }\n }\n }\n }\n\n // add logic of open and collapse accordions\n for ( i = 0; i < accordionTitles.length; i++) {\n accordionTitles[i].addEventListener('click', function() {\n this.classList.toggle('accordion-title-open');\n this.nextSibling.classList.toggle('active');\n });\n }\n}\n\n/**\n * Once the data has been rendered, this function removes the loading icon and shows the content on the page.\n */\nvar showData = () => {\n $('.article-details').show();\n $('.footer-bottom').show();\n $('.footer-top').show();\n $('.loader').hide();\n}\n\nmodule.exports = ArticleDetails;\n","'use strict';\n\n// Constructor\nvar Articles = function() {\n this.name = 'articles';\n\n const queryString = window.location.search;\n\n // get article data\n jQuery.ajax({\n url: `${window.insolvency_cms_root_api}article-search${queryString}`,\n type: \"get\",\n success: function(data) {\n populateArticles(data);\n $('.loader').hide();\n },\n error: function() {\n $(\"#article-list\").append(\"<p style='text-align:center; font-size: 1.25em'>Unable to load content. Please try again.</p>\");\n $('.loader').hide();\n }\n });\n\n // get all tags for filter\n jQuery.ajax({\n url: `${process.env.ROOT_API}tags-list`,\n type: \"get\",\n success: function(data) {\n populateTagFilter(data);\n }\n });\n\n // set initial page number to 1\n $(\"#current-page-number\").html(\"1\");\n\n // disable submitting form when users hit enter key\n $(document).on(\"keydown\", \"form\", function(e) {\n return e.key != \"Enter\";\n });\n}\n\n/**\n * This function renders 10 articles on to the page.\n *\n * @param {Array} data An array of articles objects retrieved from the Drupal API\n */\nvar populateArticles = (data) => {\n for (let i = 0; i < data.length && i < 10; i++) {\n // extract source path for image\n let image_raw_array = data[i].image.split(\"\\\"\");\n // Since 'lazy' in the dom, find url attr dynamically as find it and then\n // returning after it.\n let image_src = image_raw_array.find(function (val, i) {\n if ((typeof image_raw_array[i - 1] !== 'undefined')\n && (image_raw_array[i - 1].indexOf('src=') !== -1)) {\n return true;\n }\n return false;\n });\n let image_attr = \"\";\n for (let j = 2; j < image_raw_array.length; j++) {\n if (j === 7) {\n image_attr = image_attr.concat(`\"${image_raw_array[j]}\"`);\n } else {\n image_attr = image_attr.concat(image_raw_array[j]);\n }\n }\n\n // remove HTML tags from description before displaying\n let description = data[i].body_title.replace(/<[^>]*>?/gm, '');\n\n // get tags\n let tagsArray = data[i].tags.split(\", \");\n let tags = \"\";\n for (let j = 0; j < tagsArray.length; j++) {\n let tag_data = tagsArray[j].split(\">\");\n let tag_href = tag_data[0].split(\"/\");\n let tagId = tag_href[tag_href.length - 1].split(\"\\\"\")[0];\n let tag = tag_data[1].split(\"<\")[0];\n tags += `<a href=\"/articles.html?tags=${tagId}\" class=\"tag\">${tag}</a>`;\n }\n\n $(\"#article-list\").append(\n `<li class=\"items\">\n <div class=\"img-container\">\n <a class=\"image-link\" href=\"/article.details.html?id=${data[i].id}\">\n <img src=\"${window.insolvency_cms_root_url_no_slash}${image_src}\" class=\"image\" ${image_attr}\n </a>\n </div>\n <a href=\"/article.details.html?id=${data[i].id}\" class=\"link\">\n <h4 class=\"title\">${data[i].title}</h4>\n </a>\n <div class=\"description\"><p>${description}</p></div>\n <div class=\"info\">\n <span class=\"info1\">${data[i].published_date}</span>\n <span class=\"info2\">${data[i].author_name}</span>\n </div>\n <div class=\"tags\">\n ${tags}\n </div>\n </li>`\n );\n }\n}\n\n/**\n * This function renders the tag filters on to the page\n *\n * @param {Array} data An array of tag objects retrieved from the Drupal API\n */\nvar populateTagFilter = (data) => {\n // add tags\n for (let i = 0; i < data.length; i++) {\n $(\"#tags-filter\").append(\n `<div class=\"item\">\n <input type=\"radio\" name=\"tags\" id=${data[i].tid} value=${data[i].tid} class=\"radio\">\n <label for=${data[i].tid}>${data[i].name}</label>\n </div>`\n );\n }\n\n // add apply button\n $(\"#tags-filter\").append(\n `<div class=\"item\">\n <input type=\"submit\" value=\"Apply\">\n </div>`\n );\n\n // grouping radio buttons that do not have the same name\n // i.e. only one of the radio buttons can be selected at a given time\n $(\".radio\").on(\"change\", function() {\n $(\".radio\").not(this).prop(\"checked\", false);\n });\n}\n\nmodule.exports = Articles;\n","'use strict';\n\nvar Utilities = require('../utilities/utilities');\nvar utilities = new Utilities();\n\n// Constructor\nvar CampaignDetails = function() {\n this.name = 'campaign.details';\n\n let contentTypeLoadApiPath = 'campaign-details';\n\n utilities.loadPageContent(\n contentTypeLoadApiPath,\n loadPageContentAjaxSuccessCallback,\n loadPageContentAjaxErrorCallback\n );\n}\n\nfunction loadPageContentAjaxSuccessCallback(data) {\n if (data.hasOwnProperty(0)) {\n populateData(data[0]);\n showData();\n }\n else {\n loadPageContentAjaxErrorCallback();\n }\n}\n\nfunction loadPageContentAjaxErrorCallback() {\n showError();\n}\n\nvar showError = () => {\n $(\".container-campaign-details\").append(\"<p style='text-align:center; font-size: 1.25em'>Unable to load content. Please try again.</p>\");\n $(\".banner\").css(\"display\", \"none\");\n showData();\n}\n\n/**\n * This function renders the data object on to the page\n *\n * @param {Object} dataObj A data object retrieved from the backend API\n */\nvar populateData = (dataObj) => {\n let bodyContent = utilities.handleInlineImages(dataObj.body_description);\n\n // process video URL in the body content\n bodyContent = bodyContent.replace(/ src=\\\"\\/sites\\/default\\/files/g, ` src=\"${process.env.ROOT_URL}sites/default/files`);\n\n // render content on the page\n $(\"#campaign-title\").html(dataObj.title);\n $(\".layout-container.campaign-details .rendered-entity\").append(bodyContent);\n\n // set banner background image\n let image_raw_array = dataObj.image.split(\"\\\"\");\n // Since 'lazy' in the dom, find url attr dynamically as find it and then\n // returning after it.\n let image_src = image_raw_array.find(function (val, i) {\n if ((typeof image_raw_array[i - 1] !== 'undefined')\n && (image_raw_array[i - 1].indexOf('src=') !== -1)) {\n return true;\n }\n return false;\n });\n let $banner = $(\".banner\");\n // Banner is optional.\n if (image_src) {\n $banner.attr(\"style\", `background-image:url('${process.env.ROOT_URL}${image_src}')`);\n }\n else {\n $banner.css(\"display\", \"none\");\n }\n}\n\n/**\n * Once the data has been rendered, this function removes the loading icon and shows the content on the page.\n */\nvar showData = () => {\n $('.campaign-details').show();\n $('.loader').hide();\n}\n\nmodule.exports = CampaignDetails;\n","'use strict';\n\n// Constructor\nvar CaseDetails = function() {\n this.name = 'case.details';\n\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n const caseId = urlParams.get('id');\n\n // if session storage is empty, get data from API and save in session storage\n if (!sessionStorage['data']) {\n jQuery.ajax({\n url: `${process.env.ROOT_INSOL6_API}PublicJobsForPractice/ey/`,\n type: \"get\",\n success: function(casesData) {\n setSessionStorage(casesData);\n populateData(caseId);\n showData();\n },\n error: function() {\n showError();\n showData();\n }\n });\n }\n else {\n populateData(caseId);\n showData();\n }\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}case-details?id=${caseId}`,\n type: \"get\",\n success: function(data) {\n let field_case_document = '';\n if ((typeof data[0] !== \"undefined\")\n && (typeof data[0].field_case_document !== \"undefined\")) {\n field_case_document = data[0].field_case_document;\n }\n populateDocuments(field_case_document);\n },\n error: function() {\n showError();\n showData();\n }\n });\n}\n\nvar showError= () => {\n $(\"#abn\").append(\"<p style='text-align:center; font-size: 1.25em'>Unable to load content. Please try again.</p>\");\n $(\"#company-title\").css(\"display\", \"none\");\n $(\"#abn-title\").css(\"display\", \"none\");\n $(\"#bg-info-title\").css(\"display\", \"none\");\n $(\".sideblock\").css(\"display\", \"none\");\n}\n\n/**\n * This function gets a case object by its id.\n *\n * @param {String} id The id of the case\n * @returns A case object\n */\nvar getCaseById = (id) => {\n let data = getSessionStorage(\"data\");\n for (let i = 0; i < data.length; i++) {\n if (data[i].jobId == id) {\n return data[i];\n }\n }\n}\n\n/**\n * This function stores the data object (previously retrieved from Insol6 API) into session storage.\n *\n * @param {Object} data The data object being stored in session storage.\n */\nvar setSessionStorage = (data) => {\n\tsessionStorage.setItem(\"data\", JSON.stringify(data));\n}\n\n/**\n * This function gets the data stored in session storage and parses it as a JSON object\n *\n * @param {String} key Corresponds with the value (data) that is being retrieved\n */\nvar getSessionStorage = (key) => {\n return JSON.parse(sessionStorage.getItem(key));\n}\n\n/**\n * This function renders the case data on to the page.\n *\n * @param {String} caseId The id of the case that is being shown on the page\n */\nvar populateData = (caseId) => {\n let data = getCaseById(caseId);\n let startDate = null;\n\n if (!data) {\n showError();\n showData();\n return;\n }\n\n // format the date\n if (data.jobStartDate) {\n let rawDate = new Date(data.jobStartDate);\n startDate = rawDate.getDate()+'/'+(rawDate.getMonth()+1)+'/'+rawDate.getFullYear();\n }\n // if data exists, display it on the page\n data.jobname ? (\n document.getElementsByClassName(\"jobname\")[0].innerHTML = data.jobname,\n document.getElementsByClassName(\"jobname\")[1].innerHTML = data.jobname\n ) : (\"\", document.getElementById(\"company-title\").style.display = \"none\");\n data.jobABN ? document.getElementById(\"abn\").innerHTML = data.jobABN : (\"\", document.getElementById(\"abn-title\").style.display = \"none\");\n data.jobACN ? document.getElementById(\"acn\").innerHTML = data.jobACN : (\"\", document.getElementById(\"acn-title\").style.display = \"none\");\n data.backgroundInfo ? document.getElementById(\"backgroundinfo\").innerHTML = data.backgroundInfo : (\"\", document.getElementById(\"bg-info-title\").style.display = \"none\");\n data.addressFull ? document.getElementById(\"jobtype\").innerHTML = `<p><strong>Appointment Type: </strong>${data.jobTypeText}</p>`: \"\";\n startDate ? document.getElementById(\"appointmentdate\").innerHTML = `<p><strong>Appointment Date: </strong>${startDate}</p>`: \"\";\n data.addressFull ? document.getElementById(\"address\").innerHTML = `<p><strong>Address: </strong>${data.addressFull}</p>`: \"\";\n data.jobContactName ? document.getElementById(\"jobcontactname\").innerHTML = data.jobContactName : \"\";\n data.jobContactEmail ? document.getElementById(\"jobcontactemail\").innerHTML = `<a href='mailto:${data.jobContactEmail}'>${data.jobContactEmail}</a>` : \"\";\n data.jobContactNumber ? document.getElementById(\"jobcontactnumber\").innerHTML = data.jobContactNumber : \"\";\n\n // add ey prefix to URL\n let insol6Link = data.callback;\n let index = insol6Link.indexOf(\"//\") + 2;\n insol6Link = insol6Link.slice(0, index) + \"ey.\" + insol6Link.slice(index);\n\n // populate button with link to Insol6 case details\n\t$(\".textblock\").append(\n `<button class=\"button more-info-cta creditor-login cta\" type=\"button\" style=\"text-decoration: none\" onclick=\"window.open('${insol6Link}', '_blank')\">\n <span><strong>View details in Creditor Portal</strong></span>\n </button>`\n\t);\n}\n\nvar populateDocuments = (field_case_document) => {\n // Split and remove empty array elements created by split.\n let documentArray = field_case_document.split(\", \").filter(r => r !== '');\n let fileIcon = \"/images/file-text2.svg\";\n\n $(\"#documents-section\").append(\n `<h5><strong>Documents</strong></h5>`\n + ((documentArray.length > 0) ?\n `<div class=\"search-list\">\n <div class=\"list\">\n <div class=\"inner\">\n <ul id=\"documents-list\" style=\"list-style: none\"></ul>\n </div>\n </div>\n </div>`\n :\n `<p>No documents.</p>`)\n );\n\n for (let i = 0; i < documentArray.length; i++) {\n let title = documentArray[i].split(';').shift().trim();\n let filePath = documentArray[i].split(';').pop().trim();\n let fileExtension = filePath.split('.').pop().toLowerCase().trim();\n\n if (fileExtension === 'doc' || fileExtension === 'docx') {\n fileIcon = \"/images/file-text2.svg\";\n } else if (fileExtension === 'pdf') {\n fileIcon = \"/images/file-pdf.svg\";\n } else if (fileExtension === 'csv' || fileExtension === 'xls' || fileExtension === 'xlsx') {\n fileIcon = \"/images/table.svg\";\n }\n\n $(\"#documents-list\").append(\n `<li class=\"items\">\n <img class=\"file-icon\" src=${fileIcon}>\n <a class=\"link\" href=\"${process.env.ROOT_URL}${filePath}\" target=\"_blank\" download><p class=\"documentTitle\">${title}</p></a>\n </li>`\n )\n }\n}\n\n/**\n * Once the data has been rendered, this function removes the loading icon and shows the content on the page.\n */\nvar showData = () => {\n $('.container-case-details').show();\n $('.footer-bottom').show();\n $('.footer-top').show();\n $('.loader').hide();\n}\n\nmodule.exports = CaseDetails;\n","'use strict';\n\n// Constructor\nvar ContentOverlay = function () {\n $('.content-overlay').click(function () {\n $('.overlay-active').removeClass('overlay-active');\n $('.overlay-active-filters').removeClass('overlay-active-filters');\n })\n\n $(document).keyup(function (e) {\n if (e.key === \"Escape\") { // escape key maps to keycode `27`\n $('.overlay-active').removeClass('overlay-active');\n $('.overlay-active-filters').removeClass('overlay-active-filters'); \n\n }\n });\n};\n\nmodule.exports = ContentOverlay;\n","'use strict';\n\n// Constructor\nvar DropDownBox = function () {\n $('body').on('click', '.drop-down-box-toggle, .drop-down-box-container .close', function () {\n if ($(this).closest('.drop-down-box-container').find('.drop-down-box').hasClass('overlay-active')) {\n // $(this).removeClass('overlay-active');\n $('.overlay-active').removeClass('overlay-active');\n } else {\n $(this).addClass('overlay-active');\n $(this).closest('.drop-down-box-container').addClass('overlay-active');\n $(this).closest('.drop-down-box-container').find('.drop-down-box').addClass('overlay-active');\n $('.content-overlay').addClass('overlay-active');\n $('body').addClass('overlay-active');\n $(this).closest('.drop-down-box-container').find('.focus-on-open').focus();\n\n }\n })\n\n\n\n};\n\nmodule.exports = DropDownBox;\n","'use strict';\n\n// Constructor.\nvar FixLinks = function() {\n\n function FixLinksFunction () {\n // Turn these links in to CMS absolute links.\n $(\"a[href^='/sites/default/files']\").each(function (){ \n var $this = $(this);\n $this.attr('href', window.insolvency_cms_root_url_no_slash + $this.attr('href'));\n });\n }\n\n // React to Ajax events.\n if (!FixLinks.has_already_run) {\n $(document).ajaxComplete(function( event, xhr, settings ) {\n FixLinksFunction();\n });\n FixLinks.has_already_run = true;\n }\n \n // First time run.\n FixLinksFunction();\n};\n// Initialise static variable.\nFixLinks.has_already_run = false;\n\nmodule.exports = FixLinks;\n","'use strict';\n\n// Constructor\nvar FooterBottom = function() {\n this.name = 'footer-bottom';\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}footer`,\n type: \"get\",\n success: function(data){\n populateData(data[0]);\n },\n error: function() {\n $(\"#footerbody\").html(\"Unable to load content. Please try again.\");\n $(\"#footerbody\").css(\"font-size\", \"1.25em\");\n $(\"#footerbody\").css(\"text-align\", \"center\");\n }\n });\n};\n\n/**\n * This function renders the footer data on to the page\n * \n * @param dataObj The footer object to be rendered\n */\nvar populateData = (dataObj) => {\n $(\"#footerbody\").html(dataObj.body);\n}\n\nmodule.exports = FooterBottom;\n","'use strict';\n\n// Constructor\nvar FooterTop = function() {\n this.name = 'footer-top';\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}contact-us`,\n type: \"get\",\n success: function(data){\n populateData(data[0]);\n },\n error: function() {\n $(\"#contactusbody\").html(\"Unable to load content. Please try again.\");\n $(\"#contactusbody\").css(\"color\", \"white\");\n $(\"#contactusbody\").css(\"font-size\", \"1.25em\");\n }\n });\n};\n\n/**\n * This function renders the footer data on to the page\n * \n * @param dataObj The footer object to be rendered\n */\nvar populateData = (dataObj) => {\n $(\"#contactusbody\").html(dataObj.body);\n}\n\nmodule.exports = FooterTop;\n","'use strict';\n\n// Constructor\nvar Loader = function () {\n};\n\nmodule.exports = Loader;\n","'use strict';\n\n// Constructor\nvar Login = function () {\n $('.creditor-login-cta').click(function ($event) {\n $event.preventDefault();\n $('.overlay-active').removeClass('overlay-active');\n $('.login').toggleClass('overlay-active');\n\n $('.content-overlay').addClass('overlay-active');\n $('body').addClass('overlay-active');\n $(this).addClass('overlay-active');\n })\n\n $('.login .close').click(function ($event) {\n $event.preventDefault();\n $('.overlay-active').removeClass('overlay-active');\n })\n\n $('.login form').submit(function ($event) {\n $event.preventDefault();\n if ($('.login form input.email').val() && $('.login form input.password').val()) {\n if ($('.login form input.email').val() === 'ato') {\n window.location.href = '/secured/ato/'\n } else if ($('.login form input.email').val() === 'feg') {\n window.location.href = '/secured/feg/'\n } else if ($('.login form input.email').val() === 'any') {\n window.location.href = 'https://ey.creditors.accountants/Account/Login'\n } else {\n $('.login .error').addClass('display');\n setTimeout(function () {\n $('.login .error').removeClass('display');\n\n }, 5000)\n }\n\n } else {\n $('.login .error').addClass('display');\n setTimeout(function () {\n $('.login .error').removeClass('display');\n\n }, 5000)\n }\n\n\n })\n};\n\nmodule.exports = Login;\n","'use strict';\n\n// Constructor\nvar Redirect = function() {\n // if($('.redirect-to-public').length > 0) {\n // window.location.href = '/portal/'\n // }\n};\n\nmodule.exports = Redirect;\n","'use strict';\n\n// Constructor\nvar Teams = function() {\n this.name = 'connect.with.us';\n\n // get connect-with-us body text from API\n jQuery.ajax({\n url: `${process.env.ROOT_API}connect-with-us`,\n type: \"get\",\n success: function(data){\n $(\"#connect-with-us-body\").html(data[0].body);\n },\n error: function() {\n $(\"#connect-with-us-body\").append(\"<p style='text-align:center;'>Unable to load content. Please try again.</p>\");\n }\n }); \n\n jQuery.ajax({\n url: `${process.env.ROOT_API}connect-us`,\n type: \"get\",\n success: function(data){\n let cleanedData = organiseDataByLocation(data);\n populateData(cleanedData);\n renderCarousel(cleanedData);\n showData();\n },\n error: function() {\n $(\"#team-listing\").append(\"<p style='text-align:center; font-size: 1.25em'>Unable to load content. Please try again.</p>\");\n showData();\n }\n }); \n};\n\n/**\n * This method re-organises the people data into a dictionary where\n * the key is the location.\n * \n * @param {Array} data \n * @returns A Dictionary where the keys are the locations and the item\n * is an array of people based at that location.\n */\nvar organiseDataByLocation = (data) => {\n let organisedData = {};\n for (let i = 0; i < data.length; i++) {\n let person = data[i];\n if (person.location in organisedData) {\n organisedData[person.location].push(person);\n } else {\n organisedData[person.location] = [person];\n }\n }\n return organisedData;\n}\n\n/**\n * This function renders the Team data on to the page.\n * \n * @param {Array} data The array of team member objects to be rendered containing all team members and their locations.\n */\nvar populateData = (data) => {\n for (let location in data) {\n let teamMembers = ``;\n for (let i = 0; i < data[location].length; i++) {\n let person = data[location][i];\n let imageArray = data[location][i].field_professional_headshot.split(\"\\\"\");\n let imageElement = data[location][i].field_professional_headshot;\n let imageSrc = imageElement.replace(/.*src=\"([^\"]*)\".*/, '$1').trim();\n let imageAttr = \"\";\n for (let j = 2; j < imageArray.length; j++) {\n if (j === 7) {\n imageAttr = imageAttr.concat(`\"${imageArray[j]}\"`);\n } else {\n imageAttr = imageAttr.concat(imageArray[j]);\n }\n }\n teamMembers += \n `<div class=\"item\">\n <a href=\"/people.html?id=${person.id}\"></a>\n <img class=\"portrait\" src='${process.env.ROOT_URL}${imageSrc}' ${imageAttr}\n <div class=\"item__overlay\">\n <h3>${person.name}</h3>\n <p>${person.position}</p>\n <div class=\"item__body\">\n <p>${person.short_description}</p>\n <p>${person.location}</p>\n </div>\n </div>\n </div>\n `;\n }\n\n $(\"#team-listing\").append(\n `<div class=\"team-section\">\n <h2>${location}</h2>\n <div class=\"grid\">\n ${teamMembers}\n </div>\n </div>`\n )\n }\n}\n\n/**\n * This function renders the carousels for each location.\n * \n */\nvar renderCarousel = (data) => {\n let elem = document.getElementsByClassName(\"grid\");\n\n let num = 0;\n for (let i = 0; i < elem.length; i++) {\n elem[i].classList.add(`grid-${num}`);\n num += 1;\n }\n for (let j = 0; j < elem.length; j++) { \n if ($(window).width() < 500) {\n $(`.grid-${j}`).slick({\n prevArrow: '<button class=\"slide-arrow prev-arrow\"></button>',\n nextArrow: '<button class=\"slide-arrow next-arrow\"></button>',\n slidesToShow: 1,\n slidesToScroll: 1,\n rows: 1,\n arrows: true,\n infinite: true,\n lazyLoad: 'progressive',\n speed: 700,\n });\n } else if ($(window).width() < 700) {\n if (Object.values(data)[j].length > 1) {\n $(`.grid-${j}`).slick({\n prevArrow: '<button class=\"slide-arrow prev-arrow\"></button>',\n nextArrow: '<button class=\"slide-arrow next-arrow\"></button>',\n slidesToShow: 2,\n slidesToScroll: 1,\n rows: 1,\n arrows: true,\n infinite: true,\n lazyLoad: 'progressive',\n speed: 700,\n });\n }\n } else {\n if (Object.values(data)[j].length > 2) {\n $(`.grid-${j}`).slick({\n prevArrow: '<button class=\"slide-arrow prev-arrow\"></button>',\n nextArrow: '<button class=\"slide-arrow next-arrow\"></button>',\n slidesToShow: 3,\n slidesToScroll: 1,\n rows: 1,\n arrows: true,\n infinite: true,\n lazyLoad: 'progressive',\n speed: 700,\n });\n }\n else {\n elem[j].classList.add('no-carousel');\n }\n } \n \n }\n}\n\n/**\n * Once the data has been rendered, this function removes the loading icon and shows the content on the page.\n */\nvar showData = () => {\n $('.connect').show();\n $('.footer-bottom').show();\n $('.footer-top').show();\n $('.loader').hide();\n }\n\nmodule.exports = Teams;\n","'use strict';\n\n// Constructor\nvar CurrentCases = function() {\n\tthis.name = 'current.cases';\n\n\t// get current cases data\n\tjQuery.ajax({\n\t\turl: `${process.env.ROOT_INSOL6_API}PublicJobsForPractice/ey`,\n\t\ttype: \"get\",\n\t\tsuccess: function(data) {\n\t\t\tsetSessionStorage(data);\n\t\t\tcaseData = data;\n\t\t\tpopulateFilters();\n\t\t\tpopulateCases();\n\t\t\tsetPageButtonVisibility('cases');\n\t\t\t$('.loader').hide();\n\t\t},\n\t\terror: function() {\n\t\t\t$(\"#cases-list\").append(\"<p style='text-align:center'>Unable to load content. Please try again.</p>\");\n\t\t\t$('.loader').hide();\n\t\t}\n\t});\n\tjQuery.ajax({\n\t\turl: `${process.env.ROOT_API}disclaimer`,\n\t\ttype: \"get\",\n\t\tsuccess: function(data){\n\t\t\tpopulateDisclaimer(data[0]);\n\t\t}\n\t});\n\n\t// set initial page number to 1\n\t$(\"#current-page-number\").html(\"1\");\n\n\t// initialise all checkboxes as checked\n\t$(\"input[type='checkbox']\").each(function(){\n\t\t$(this).prop(\"checked\", true);\n\t});\n\n\t// check/uncheck all checkboxes when Select All option is checked\n\t$(\"#alllocations\").on(\"change\", function() {\n\t\tvar checked = $(this).is(':checked');\n\t\tif (checked) {\n\t\t\t$(\".location-checkbox\").each(function(){\n\t\t\t\t$(this).prop(\"checked\",true);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t$(\".location-checkbox\").each(function(){\n\t\t\t\t$(this).prop(\"checked\",false);\n\t\t\t});\n\t\t}\n\t});\n\n\t$(\"#alltypes\").on(\"change\", function() {\n\t\tvar checked = $(this).is(':checked');\n\t\tif (checked) {\n\t\t\t$(\".type-checkbox\").each(function(){\n\t\t\t\t$(this).prop(\"checked\",true);\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\t$(\".type-checkbox\").each(function(){\n\t\t\t\t$(this).prop(\"checked\",false);\n\t\t\t});\n\t\t}\n\t});\n};\n\n/**\n * This function stores the data object (previously retrieved from Insol6 API) into session storage.\n * \n * @param {Object} data The data object being stored in session storage.\n */\nvar setSessionStorage = (data) => {\n\tsessionStorage.setItem(\"data\", JSON.stringify(data));\n}\n\n/**\n * This function gets the data stored in session storage and parses it as a JSON object\n * \n * @param {String} key Corresponds with the value (data) that is being retrieved\n */\nvar getSessionStorage = (key) => {\n\treturn JSON.parse(sessionStorage.getItem(key));\n}\n\n/**\n * This function renders 10 cases on to the page.\n * \n */\nvar populateCases = () => {\n\t// get data from session storage\n\tlet data = getSessionStorage(\"data\");\n\tlet locationArray = document.getElementsByClassName(\"info1\");\n\tlet typeArray = document.getElementsByClassName(\"info2\");\n\n\t// display a page of cases\n for (let i = 0; i < data.length && i < 10; i++) {\n\t\t$(\"#cases-list\").append(\n\t\t\t`<li class=\"items all ${data[i].addressState}\">\n\t\t\t\t<a class=\"link\" onclick=\"disclaimer(${data[i].jobId})\">\n\t\t\t\t\t<h4 class=\"title\">${data[i].jobname}</h4>\n\t\t\t\t\t<div class=\"info\">\n\t\t\t\t\t\t<span class=\"info1\">${data[i].addressState}, ${data[i].addressCountry}</span>\n\t\t\t\t\t\t<span class=\"info2\">${data[i].jobTypeText}</span>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t</li>`\n\t\t);\n }\n\n\t// prevent null values from being displayed\n\tfor (let i = 0; i < locationArray.length; i++) {\n\t\tif (!data[i].addressState || !data[i].addressCountry) {\n\t\t\tlocationArray[i].style.display = \"none\";\n\t\t}\n\t\tif (!data[i].jobTypeText) {\n\t\t\ttypeArray[i].style.display = \"none\";\n\t\t}\n\t}\n}\n\n/**\n * This function renders the disclaimer popup.\n * \n * @param {Object} dataObj The disclaimer object to be rendered.\n */\nvar populateDisclaimer = (dataObj) => {\n\t$(\"#disclaimertitle\").html(dataObj.title);\n\t$(\"#disclaimerbody\").html(dataObj.body);\n}\n\n/**\n * This function renders the category filters (location and appointment type)\n * \n */\nvar populateFilters = () => {\n\t// add location filters\n\tlet data = getSessionStorage(\"data\");\n\tlet locations = [];\n\n\t// add each location checkbox\n\tfor (let i = 0; i < data.length; i++) {\n\t\tif (data[i].addressState && !locations.includes(data[i].addressState)) {\n\t\t\tlocations.push(data[i].addressState);\n\t\t\t$(\"#location-filters\").append(\n\t\t\t\t`<div class=\"item\">\n\t\t\t\t\t<input type=\"checkbox\" class=\"location-checkbox\" id=\"${data[i].addressState}\" value=\"${data[i].addressState}\" onchange=\"checkUncheck('location')\" checked>\n\t\t\t\t\t<label for=\"${data[i].addressState}\">${data[i].addressState}</label>\n\t\t\t\t</div>`\n\t\t\t);\n\t\t}\t\t\n \t}\n\t// add the apply button\n\t$(\"#location-filters\").append(\n\t\t`<div class=\"item\">\n\t\t\t<input type=\"submit\" onclick=\"hideFilterBox()\" value=\"Apply\">\n\t\t</div>`\n\t);\n\t\n\t// add appointment type filters\n\tlet appointmentTypes = [];\n\tfor (let i = 0; i < data.length; i++) {\n\t\tlet jobType = data[i].jobTypeText.replace(/\\s+/g, '-').toLowerCase();\n\t\tif (jobType && !appointmentTypes.includes(jobType)) {\n\t\t\tappointmentTypes.push(jobType);\n\t\t\t$(\"#appointment-filters\").append(\n\t\t\t\t`<div class=\"item\">\n\t\t\t\t\t<input type=\"checkbox\" class=\"type-checkbox\" id=\"${jobType}\" value=\"${data[i].jobTypeText}\" onchange=\"checkUncheck('type')\" checked>\n\t\t\t\t\t<label for=\"${jobType}\">${data[i].jobTypeText}</label>\n\t\t\t\t</div>`\n\t\t\t);\n\t\t}\n\t}\n\n\t// add the apply button\n\t$(\"#appointment-filters\").append(\n\t\t`<div class=\"item\">\n\t\t\t<input type=\"submit\" onclick=\"hideFilterBox()\" value=\"Apply\">\n\t\t</div>`\n\t);\n}\n\nmodule.exports = CurrentCases;\n","'use strict';\n\nvar Utilities = require('../utilities/utilities');\nvar utilities = new Utilities();\n\n// Constructor\nvar ErrorPage = function() {\n this.name = '404 error';\n\n // See if there is redirect in place first.\n const current_or_matched_path = utilities.get_page_path_from_maybe_current_redirected_path();\n let template_mapping = {\n // Drupal content type to html file.\n 'article': 'article.details.html',\n 'campaign': 'campaign.details.html',\n 'page': 'people.details.html'\n };\n\n // Get Drupal page by Id and redirect the handling template.\n var drupalMatchRecord = null;\n var is_page_redirected = false;\n // Pass the \"aged-care\" path without forward slash prefix for example in\n // site.com/aged-care.\n if (drupalMatchRecord = utilities.get_page_metadata_by_path(current_or_matched_path)) {\n let html_page_file = null;\n if (html_page_file = template_mapping[drupalMatchRecord.content_type]) {\n window.location.href = `/${html_page_file}?path=${drupalMatchRecord.path}`;\n is_page_redirected = true;\n }\n }\n if (!is_page_redirected) {\n $('.loader').hide();\n }\n};\n\nmodule.exports = ErrorPage;\n","'use strict';\n\n// Constructor\nvar FormalInsolvency = function() {\n this.name = 'formal-insolvency';\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}homepage-content`,\n type: \"get\",\n success: function(data){\n populateData(data[0]);\n },\n error: function() {\n $(\"#formal-insolvency-description\").append(\"<p style='text-align:center'>Unable to load content. Please try again.</p>\");\n showData();\n }\n });\n};\n\n/**\n * This function renders the 'Formal insolvency' content on to the page.\n * \n * @param {Array} data The 'Formal insolvency' array to be rendered.\n */\nvar populateData = (data) => {\n $(\"#formal-insolvency-title\").html(data.formal_insolvency_title);\n $(\"#formal-insolvency-description\").html(data.formal_insolvency_description);\n\n let formal_insolvency_tab_titles = data.formal_insolvency_tab_title.split(\";;\");\n let formal_insolvency_tab_descriptions = data.formal_insolvency_tab_description.split(\";;,\");\n let isMobile = window.matchMedia(\"only screen and (max-width: 920px)\").matches;\n\n // Remove trailing ;; from last element in array\n let last_elem = formal_insolvency_tab_descriptions[formal_insolvency_tab_descriptions.length - 1];\n if (last_elem.substring(last_elem.length - 2) === \";;\") {\n formal_insolvency_tab_descriptions[formal_insolvency_tab_descriptions.length - 1] = last_elem.slice(0, -2);\n }\n\n // Render content\n for (let i = 0; i < formal_insolvency_tab_titles.length; i++) {\n \tlet formal_insolvency_tabs_checked = (i==0)?\" checked\":\"\";\n $(\"#formal-insolvency-tabs\").append(\n \t\t`<input type=\"radio\" id=\"tab${i+1}\" name=\"tab-control\"${formal_insolvency_tabs_checked}>`\n );\n }\n \n if (isMobile) {\n $(\"#formal-insolvency-tabs\").append(`<ul id=\"mobile-accordion\"></ul>`);\n for (let i = 0; i < formal_insolvency_tab_titles.length; i++) {\n let formal_insolvency_tab_description_value = formal_insolvency_tab_descriptions[i].replace(/ src=\\\"\\/sites\\/default\\/files/g,` src=\"${process.env.ROOT_URL}sites/default/files`); // replace all embedded image to absolute URL\n \n let tab_title_obj = document.createElement(\"h3\"); tab_title_obj.className = \"accordion-title\"; tab_title_obj.textContent = formal_insolvency_tab_titles[i];\n let accordionHolder = document.createElement(\"div\"); accordionHolder.className = \"accordion-holder\";\n let accordionContentHolder = document.createElement(\"div\"); accordionContentHolder.className = \"accordion-content-holder\";\n let tab_description_obj = document.createElement(\"p\"); tab_description_obj.className = \"accordion-content\"; tab_description_obj.innerHTML = formal_insolvency_tab_description_value;\n \n $(\"#mobile-accordion\").append(accordionHolder);\n accordionHolder.appendChild(tab_title_obj);\n accordionHolder.appendChild(accordionContentHolder);\n accordionContentHolder.appendChild(tab_description_obj);\n }\n } else {\n $(\"#formal-insolvency-tabs\").append(`<ul id=\"formal-insolvency-tab-title\" class=\"tab-list\"></ul>`);\n $(\"#formal-insolvency-tabs\").append(`<div id=\"formal-insolvency-tab-description\" class=\"content\"></div>`);\n for (let i = 0; i < formal_insolvency_tab_titles.length; i++) {\n let formal_insolvency_tab_title_value = formal_insolvency_tab_titles[i];\n let formal_insolvency_tab_description_value = formal_insolvency_tab_descriptions[i].replace(/ src=\\\"\\/sites\\/default\\/files/g,` src=\"${process.env.ROOT_URL}sites/default/files`); // replace all embedded image to absolute URL\n $(\"#formal-insolvency-tab-title\").append(\n `<li class=\"tab\" title=\"${formal_insolvency_tab_title_value}\">\n <label for=\"tab${i+1}\" role=\"button\">\n <span>${formal_insolvency_tab_title_value}</span>\n </label> \n </li>`);\n $(\"#formal-insolvency-tab-description\").append(\n `<section> \n ${formal_insolvency_tab_description_value}\n </section>`);\n }\n }\n\n // Add link buttons\n let formal_insolvency_link = data.formal_insolvency_link.split(\";;\");\n $(\"#formal-insolvency-link\").append(`<div id=\"formal-insolvency-link-tmp\">`);\n $(\"#formal-insolvency-link-tmp\").hide();\n for (let i = 0; i < formal_insolvency_link.length; i++) {\n $(\"#formal-insolvency-link-tmp\").append(formal_insolvency_link[i]);\n let link_title = $(\"#formal-insolvency-link-tmp\").children().last().text();\n let link_url = $(\"#formal-insolvency-link-tmp\").children().last().prop(\"href\");\n $(\"#formal-insolvency-link\").append(`<button type=\"button\" onclick=\"window.open('${link_url}', '_blank')\" class=\"button insol6-btn\"><span class=\"btn-label\"><strong>${link_title}</strong></span></button>`);\n }\n\n // add logic of open and collapse accordions\n let accordionTitles = document.getElementsByClassName('accordion-title');\n\n for ( i = 0; i < accordionTitles.length; i++) {\n accordionTitles[i].addEventListener('click', function() {\n this.classList.toggle('accordion-title-open');\n this.nextSibling.classList.toggle('active');\n });\n }\n}\n\nmodule.exports = FormalInsolvency;","'use strict';\n\n// Constructor\nvar HomepageBanner = function() {\n $('.homepage-banner .left, .homepage-banner .right').matchHeight();\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}homepage-content`,\n type: \"get\",\n success: function(data){\n populateData(data[0]);\n },\n error: function() {\n $(\"#home-body\").append(\"<p style='text-align:center'>Unable to load banner content. Please try again.</p>\");\n $(\".wrapper\").css(\"display\", \"none\");\n showData();\n }\n });\n jQuery.ajax({\n url: `${process.env.ROOT_API}article-list`,\n type: \"get\",\n success: function(data){\n populateFeatureArticles(data);\n renderCarousel();\n showData();\n },\n error: function() {\n $(\"#home-body\").append(\"<p style='text-align:center'>Unable to load banner content. Please try again.</p>\");\n $(\".wrapper\").css(\"display\", \"none\");\n showData();\n }\n });\n}\n\n/**\n * This function renders the featured articles carousel.\n *\n */\nvar renderCarousel = () => {\n setTimeout(function(){\n $('.carousel-container').attr(\"style\",\"display: block\");\n\n $('.article-carousel').slick({\n dots: true,\n infinite: true,\n speed: 700,\n autoplay: false,\n arrows: true,\n slidesToShow: 1,\n slidesToScroll: 1,\n rows: 1,\n lazyLoad: 'progressive',\n dotsClass: 'slick-dots',\n prevArrow: '<button class=\"slide-arrow prev-arrow\"></button>',\n nextArrow: '<button class=\"slide-arrow next-arrow\"></button>',\n responsive: [\n {\n breakpoint: 600,\n settings: {\n initialSlide: 1,\n }\n }\n ]\n });\n }, 0);\n $(window).on('resize', function () {\n $('.homepage .homepage-banner .container-outer .wrapper ul').slick('resize');\n });\n}\n\n/**\n * This function renders the featured articles in the carousel\n *\n * @param {Object} data The featured articles data to be rendered.\n */\nvar populateFeatureArticles = (data) => {\n let max_articles = 3;\n let i = 0;\n\n while (i < data.length && i < max_articles) {\n let image_raw_array = data[i].image.split(\"\\\"\");\n // Since 'lazy' in the dom, find url attr dynamically as find it and then\n // returning after it.\n let image_src = image_raw_array.find(function (val, i) {\n if ((typeof image_raw_array[i - 1] !== 'undefined')\n && (image_raw_array[i - 1].indexOf('src=') !== -1)) {\n return true;\n }\n return false;\n });\n let image_attr = \"\";\n let slide = \"#featured-article\" + (i+1).toString();\n\n let articleSubtitle = data[i].body_title.replace(/<[^>]+>/g, '');\n\n for (let j = 2; j < image_raw_array.length; j++) {\n if (j === 7) {\n image_attr = image_attr.concat(`\"${image_raw_array[j]}\"`);\n } else {\n image_attr = image_attr.concat(image_raw_array[j]);\n }\n }\n\n let isMobile = window.matchMedia(\"only screen and (max-width: 800px)\").matches;\n\n if (isMobile) {\n $(slide).append(\n `<a href=\"/article.details.html?id=${data[i].id}\" class=\"mobileLink\">\n <div class=\"mobile-card\">\n <div class=\"mobile-card-img\">\n <img src=\"${process.env.ROOT_URL}${image_src}\" class=\"mobile-image\">\n </div>\n <div class=\"mobile-card-info\">\n <h4 class=\"mobile-article-type\">Case Study</h4>\n <h4 class=\"mobile-card-title\">\n ${data[i].title}\n </h4>\n </div>\n </div>\n </a>\n `\n );\n\n } else {\n $(slide).append(\n `<div class=\"left\">\n <h4 class=\"featured-type\">Case Study</h4>\n </br>\n <h4 class=\"featured-title\">\n <a href=\"/article.details.html?id=${data[i].id}\" class=\"titleLink\">${data[i].title}</a>\n </h4>\n <p>${articleSubtitle}</p>\n <p>${data[i].read_time}</p>\n </div>\n <div class=\"carousel-img-container\">\n <a href=\"/article.details.html?id=${data[i].id}\">\n <img src=\"${process.env.ROOT_URL}${image_src}\" class=\"carousel-image\">\n </a>\n </div>\n `\n );\n }\n\n i++;\n }\n}\n\n/**\n * This function renders the homepage banner content on to the page.\n *\n * @param {Object} dataObj The homepage banner data object to be rendered.\n */\nvar populateData = (dataObj) => {\n $(\"#home-title\").html(dataObj.title);\n $(\"#home-body\").html(dataObj.body);\n $(\"#banner-text\").html(dataObj.banner_text);\n $(\"#banner-small-text\").html(dataObj.banner_small_text);\n}\n\n/**\n * Once the data has been rendered, this function removes the loading icon and shows the content on the page.\n */\n var showData = () => {\n $('.homepage-banner').show();\n $('.our-latest-thinking').show();\n $('.how-can-we-help').show();\n $('.the-team').show();\n $('.footer-bottom').show();\n $('.footer-top').show();\n $('.loader').hide();\n}\n\nmodule.exports = HomepageBanner;\n","'use strict';\n\n// Constructor\nvar HowCanWeHelp = function() {\n this.name = 'how-can-we-help';\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}homepage-content`,\n type: \"get\",\n success: function(data){\n populateData(data[0]);\n },\n error: function() {\n $(\"#help-description\").append(\"<p style='text-align:center'>Unable to load content. Please try again.</p>\");\n showData();\n }\n });\n};\n\n/**\n * This function renders the 'How Can We Help' content on to the page.\n *\n * @param {Array} data The 'How Can We Help' array to be rendered.\n */\nvar populateData = (data) => {\n $(\"#help-title\").html(data.help_title);\n $(\"#help-description\").html(data.help_description);\n\n let image_raw_array = data.help_icon.split(\",\");\n let details_string = data.help_icon_details;\n\n let i = 0;\n while (i < image_raw_array.length) {\n\n let image_src_array = image_raw_array[i].split(\"\\\"\");\n // Since 'lazy' in the dom, find url attr dynamically as find it and then\n // returning after it.\n let image_src = process.env.ROOT_URL + image_src_array.find(function (val, i) {\n if ((typeof image_src_array[i - 1] !== 'undefined')\n && (image_src_array[i - 1].indexOf('src=') !== -1)) {\n return true;\n }\n return false;\n });\n let image_attr = \"\";\n for (let j = 2; j < image_src_array.length; j++) {\n if (j === 3) {\n image_attr = image_attr.concat(`\"${image_src_array[j]}\"`);\n } else {\n image_attr = image_attr.concat(image_src_array[j]);\n }\n }\n\n let details_array = details_string.split(\"\\r\\n,\")\n let details = details_array[i].trim();\n\n $(\"#help-list\").append(\n `<li>\n <div class=\"img-container\">\n <img src=\"${image_src}\" ${image_attr}\n </div>\n <p>${details}</p>\n </li>`\n );\n i++;\n }\n\n // Add tags to the \"How EY can help\" section\n let tag_title_array = data.help_tag_title.split(\";;\");\n let tag_description_array = data.help_tag_description.split(\";;\");\n\n i = 0;\n while (i < tag_title_array.length) {\n let tag_title = tag_title_array[i].trim();\n let tag_description = tag_description_array[i].trim();\n\n $(\"#info-panel-section\").append(\n `<div class=\"info-panel\">\n <span>\n <h2 class=\"info-heading\">${tag_title}</h2>\n <strong class=\"plus-icon\">+ </strong>\n </span>\n <p class=\"info-paragraph\">${tag_description}</p>\n </div>`\n );\n i++;\n }\n\n let isTablet = window.matchMedia(\"only screen and ((min-width: 546px) and (max-width: 760px))\").matches;\n let isMobile = window.matchMedia(\"only screen and (max-width: 545px)\").matches;\n let closedHeight = \"60px\";\n let openHeight = \"180px\";\n\n if (isTablet) {\n closedHeight = \"45px\";\n openHeight = \"140px\";\n }\n if (isMobile) {\n closedHeight = \"40px\";\n openHeight = \"120px\";\n }\n\n var panels = document.getElementsByClassName(\"info-panel\");\n\n var openClosePanels = () => {\n for ( i = 0; i < panels.length; i++) {\n var content = panels[i].children[1];\n if (content.style.display === \"block\") {\n panels[i].style.height = closedHeight;\n content.style.display = \"none\";\n } else {\n panels[i].style.height = openHeight;\n content.style.display = \"block\"\n }\n }\n };\n\n for ( i = 0; i < panels.length; i++) {\n panels[i].addEventListener('click', openClosePanels, false);\n }\n}\n\nmodule.exports = HowCanWeHelp;\n","'use strict';\n\n// Constructor\nvar OurLatestThinking = function () {\n $('.our-latest-thinking li').matchHeight();\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}article-list`,\n type: \"get\",\n success: function(data){\n populateArticles(data);\n showData();\n setTileHeights();\n },\n error: function() {\n $(\"#list\").append(\"<br><p style='text-align:center; font-size: 1.25em'>Unable to load article content. Please try again.</p>\");\n showData();\n }\n });\n};\n\n/**\n * This function renders articles on to the page.\n *\n * @param {Array} data The array of articles objects to be rendered.\n */\nvar populateArticles = (data) => {\n let isMediumScreen = window.matchMedia(\"only screen and (min-width: 1025px) and (max-width: 1404px)\").matches;\n\n let max_articles = 4;\n if (isMediumScreen) {\n max_articles = 3;\n }\n\n let i = 0;\n\n // limit number of articles shown to 8 (4 on mobile)\n while (i < data.length && i < max_articles) {\n // extract image src\n let image_raw_array = data[i].image.split(\"\\\"\");\n // Since 'lazy' in the dom, find url attr dynamically as find it and then\n // returning after it.\n let image_src = image_raw_array.find(function (val, i) {\n if ((typeof image_raw_array[i - 1] !== 'undefined')\n && (image_raw_array[i - 1].indexOf('src=') !== -1)) {\n return true;\n }\n return false;\n });\n let image_attr = \"\";\n for (let j = 2; j < image_raw_array.length; j++) {\n if (j === 7) {\n image_attr = image_attr.concat(`\"${image_raw_array[j]}\"`);\n } else {\n image_attr = image_attr.concat(image_raw_array[j]);\n }\n }\n\n // remove HTML tags from article description\n let article_desc = data[i].body_title.replace(/<\\/?[^>]+(>|$)/g, \"\");\n\n // only display the first author\n let author_array = data[i].author_name.split(\",\");\n let first_author = author_array[0];\n let read_time = data[i].read_time;\n\n $(\"#list\").append(\n `<li>\n <a href=\"/article.details.html?id=${data[i].id}\" class=\"inner\">\n <div class=\"img-container\">\n <img src=\"${process.env.ROOT_URL}${image_src}\" class=\"image\" ${image_attr}\n </div>\n <h5 class=\"title\">${data[i].title}</h5>\n <div class=\"info\">\n <div class=\"description\">${article_desc}</div>\n <div class=\"date\">${data[i].published_date}</div>\n <div class=\"author\">${first_author}</div>\n <div class=\"read-time\">${read_time}</div>\n </div>\n </a>\n </li>`\n );\n i++;\n }\n}\n\n/**\n * Once the data has been rendered, this function removes the loading icon and shows the content on the page.\n */\nvar showData = () => {\n $('.our-latest-thinking').show();\n}\n\n/**\n * This function gets the maximum height out of the tiles onscreen and sets all tiles to this height.\n */\nvar setTileHeights = () => {\n let isMobile = window.matchMedia(\"only screen and (max-width: 760px)\").matches;\n\n // only resize height of tiles if not on mobile\n if (!isMobile) {\n let max = -1;\n // find max tile height\n $(\".our-latest-thinking .tiles li\").each(function() {\n let height = $(this).height();\n max = height > max ? height : max;\n });\n // set height of all tiles to match\n $(\".our-latest-thinking .tiles li\").each(function() {\n $(this).height(max);\n });\n }\n}\n\nmodule.exports = OurLatestThinking;\n","'use strict';\n\n// Constructor\nvar TheTeam = function() {\n this.name = 'the-team';\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}bio-list`,\n type: \"get\",\n success: function(data){\n populateData(data);\n setTimeout(function() {\n showData();\n if (window.location.hash) {\n linkToSection();\n }\n }, 500);\n },\n error: function() {\n $(\"#people-list\").append(\"<p style='text-align:center; font-size: 1.25em'>Unable to load team content. Please try again.</p>\");\n }\n }); \n};\n\n/**\n * If there is a '#' in the URL, this function will scroll to the specified section on the page.\n * \n */\nvar linkToSection = () => {\n let section = window.location.hash;\n let element = document.querySelector(`${section}`);\n let header = document.querySelector('#header');\n let padding = header.getBoundingClientRect().bottom + (header.getBoundingClientRect().bottom*0.15);\n let yPosition = element.offsetTop - padding; \n window.scrollTo({behavior: 'smooth', top: yPosition});\n}\n\n/**\n * This function renders team data on to the page.\n * \n * @param {Array} data The array of team member objects to be rendered.\n */\nvar populateData = (data) => {\n let i = 0;\n // limit number of tiles shown to 20\n while (i < data.length && i < 20) {\n // extract image src\n let imageRawArray = data[i].image.split(\"\\\"\");\n let imageElement = data[i].image;\n let imageSrc = imageElement.replace(/.*src=\"([^\"]*)\".*/, '$1').trim();\n let imageAttr = \"\";\n for (let j = 2; j < imageRawArray.length; j++) {\n if (j === 7) {\n imageAttr = imageAttr.concat(`\"${imageRawArray[j]}\"`);\n } else {\n imageAttr = imageAttr.concat(imageRawArray[j]);\n }\n }\n\n $(\"#people-list\").append(\n `<div class=\"item\">\n <a href=\"/people.html?id=${data[i].id}\"></a>\n <img class=\"portrait\" src='${process.env.ROOT_URL}${imageSrc}' ${imageAttr}>\n <div class=\"block\"></div>\n <div class=\"item__overlay\">\n <h3>${data[i].name}</h3>\n <p>${data[i].position}</p>\n <div class=\"item__body\">\n <p>${data[i].short_description}</p>\n <p>${data[i].location}</p>\n </div>\n </div>\n </div>\n `\n );\n i++;\n }\n}\n\n/**\n * Once the data has been rendered, this function removes the loading icon and shows the content on the page.\n */\nvar showData = () => {\n $('.homepage-banner').show();\n $('.our-latest-thinking').show();\n $('.how-can-we-help').show();\n $('.the-team').show();\n $('.footer-bottom').show();\n $('.footer-top').show();\n $('.loader').hide();\n}\n\nmodule.exports = TheTeam;\n","'use strict';\n\n// Constructor\nvar LegalAndPrivacy = function() {\n this.name = 'legal-and-privacy';\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}legal-and-privacy`,\n type: \"get\",\n success: function(data){\n populateData(data[0]);\n showData();\n },\n error: function() {\n $(\"#text-section\").append(\"<p style='text-align:center; font-size: 1.25em'>Unable to load content. Please try again.</p>\");\n showData();\n }\n }); \n};\n\n/**\n * This function renders the legal and privacy data on to the page\n * \n * @param {Object} data The legal and privacy object to be rendered.\n */\nvar populateData = (data) => {\n $(\"#legal-title\").html(data.title);\n $(\"#text-section\").html(data.body);\n}\n\n/**\n * Once the data has been rendered, this function removes the loading icon and shows the content on the page.\n */\nvar showData = () => {\n $('.legal-and-privacy').show();\n $('.footer-bottom').show();\n $('.footer-top').show();\n $('.loader').hide();\n}\n\nmodule.exports = LegalAndPrivacy;","'use strict';\n\nvar Utilities = require('../utilities/utilities');\nvar utilities = new Utilities();\n\n// Constructor\nvar PeopleDetails = function() {\n this.name = 'people.details';\n\n let contentTypeLoadApiPath = 'bio-details';\n\n utilities.loadPageContent(\n contentTypeLoadApiPath,\n loadPageContentAjaxSuccessCallback,\n loadPageContentAjaxErrorCallback\n );\n}\n\nfunction loadPageContentAjaxSuccessCallback(data) {\n populateData(data[0]);\n showData();\n}\n\nfunction loadPageContentAjaxErrorCallback() {\n // Noop, not sure why.\n}\n\n\n/**\n * This function renders person bio data on to the page\n *\n * @param {Object} data The team member object to be rendered.\n */\nfunction populateData(dataObj) {\n // add main content\n $(\"#text\").append(\n `<h1 id=\"person-name\">${dataObj.name}</h1>\n <h4 class=\"position\">${dataObj.position}</h4>\n <h4 class=\"short-description\">${dataObj.short_description}</h4>\n <p id=\"body\">${dataObj.body}</p>\n <h3 id=\"people-help-title\">${dataObj.help_title}</h3>\n <p id=\"people-help-description\">${dataObj.help_description}</p>\n `\n );\n\n // add sideblock content\n $(\"#side\").append(\n `<ul id=\"tag-section\" class=\"tags\"><span class=\"title\">Area of focus</span></ul>\n <hr class=\"seperator\">\n <div class=\"address\"><span class=\"title\">Office</span><span id=\"person-location\">${dataObj.location}</span></div>\n <div id=\"contacts\" class=\"share\"></div>\n <hr class=\"separator\">\n `\n );\n\n // position the profile image in either main textblock or sideblock depending on screen size\n let isMobile = window.matchMedia(\"only screen and (max-width: 767px)\").matches;\n\n if (isMobile) {\n $(\"#text\").prepend(`<div id=\"person-image\" class=\"image\"></div>`);\n }\n else {\n $(\"#side\").prepend(`<div id=\"person-image\" class=\"image\"></div>`);\n }\n\n // set image\n let imageElement = dataObj.image;\n let imageSrc = imageElement.replace(/.*src=\"([^\"]*)\".*/, '$1').trim();\n\n $(\"#person-image\").attr(\"style\", `background-image:url('${process.env.ROOT_URL}${imageSrc}')`);\n\n // populating tags\n let tagArray = dataObj.tags.split(\", \");\n for (let i = 0; i < tagArray.length; i++) {\n $('#tag-section').append(\n `<li>\n <a class=\"tag\">${tagArray[i]}</a>\n </li>`\n );\n }\n\n // add contact details\n if (dataObj.linkedin_url || dataObj.email || dataObj.field_phone) {\n $(\"#contacts\").append('<span class=\"title\">Contact</span>');\n } else {\n $(\"#contacts\").hide();\n }\n\n if (dataObj.email) {\n $(\"#contacts\").append(\n `<a href=\"mailto:${dataObj.email}\" target=\"_blank\">\n <img src=\"/images/email.svg\">\n </a>`\n );\n }\n\n if (dataObj.field_phone) {\n $(\"#contacts\").append(`\n <a class=\"tooltip\" href=\"tel:${dataObj.field_phone}\">\n <img src=\"/images/phone.svg\">\n <span class=\"tooltiptext\"><p>${dataObj.field_phone}</p></span>\n </a>`\n );\n }\n\n if (dataObj.linkedin_url) {\n $(\"#contacts\").append(`\n <a href=\"${dataObj.linkedin_url}\" target=\"_blank\">\n <img src=\"/images/linkedin.svg\">\n </a>`\n );\n }\n}\n\nfunction showData() {\n $('.people-details').show();\n $('.footer-bottom').show();\n $('.footer-top').show();\n $('.loader').hide();\n}\n\nmodule.exports = PeopleDetails;\n","'use strict';\n\n// Constructor\nvar SiteMap = function() {\n this.name = 'site-map';\n \n $('.loader').hide();\n};\n\nmodule.exports = SiteMap;","'use strict';\n\n// Constructor\nvar Utilities = function () {\n this.name = 'utilities';\n\n this.api_path_get_node_ids_by_path = 'get-node-ids-by-path';\n\n this.loadPageContent = (contentTypeLoadApiPath, ajaxSuccessCallbackNew, ajaxErrorCallbackNew) => {\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n // Get Drupal node ID from URL.\n var drupalMatchRecord = null;\n var drupalNodeId = null;\n // Prefer path, if it's there.\n if (drupalMatchRecord = this.get_page_metadata_by_current_path_param()) {\n drupalNodeId = drupalMatchRecord.id;\n }\n if (!drupalNodeId) {\n drupalNodeId = urlParams.get('id');\n }\n\n // Retrieve content from backend API and render onto the page.\n jQuery.ajax({\n url: `${process.env.ROOT_API}${contentTypeLoadApiPath}?id=${drupalNodeId}`,\n type: \"get\",\n success: function (data) {\n ajaxSuccessCallbackNew(data);\n\n },\n error: function () {\n ajaxErrorCallbackNew();\n }\n });\n }\n\n /**\n * Get the page metadat record form the current path parameter.\n *\n * @returns null|array the record of NULL.\n */\n this.get_page_metadata_by_current_path_param = () => {\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n return this.get_page_metadata_by_path(urlParams.get('path'));\n }\n\n /**\n * Get the page metadat record form the current path parameter.\n *\n * @returns null|array the record of NULL.\n */\n this.get_page_metadata_by_path = (drupalNodePath) => {\n var drupalMatchRecord = null;\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}${this.api_path_get_node_ids_by_path}`,\n type: \"get\",\n success: function (records) {\n for (let i = 0; i < records.length; i++) {\n if (records[i].path === drupalNodePath) {\n drupalMatchRecord = records[i];\n break;\n }\n }\n },\n error: function () {\n },\n async: false\n });\n return drupalMatchRecord;\n }\n\n /**\n * Get redirected page path or the current one if not redirected.\n *\n * @returns string\n * The page path, for example \"aged-care\".\n */\n this.get_page_path_from_maybe_current_redirected_path = () => {\n // Get the \"aged-care\" path without forward slash prefix for example in\n // site.com/aged-care.\n let current_or_matched_path = window.location.pathname.substring(1);\n\n jQuery.ajax({\n url: `${process.env.ROOT_API}redirects`,\n type: \"get\",\n success: function (records) {\n for (let i = 0; i < records.length; i++) {\n if (records[i].from_path === current_or_matched_path) {\n current_or_matched_path = records[i].to_path;\n break;\n }\n }\n },\n error: function () {\n },\n async: false\n });\n return current_or_matched_path;\n }\n\n /**\n * This function handles the HTML structure and CSS styling of images in the DOM\n *\n * @param {Object} dataObj A data object retrieved from the backend API\n */\n this.handleInlineImages = (html) => {\n let tempDiv = document.createElement(\"div\");\n tempDiv.innerHTML = html;\n\n let source_elements = tempDiv.getElementsByTagName('source');\n for (let i = 0; i < source_elements.length; i++) {\n if (source_elements[i].srcset) {\n source_elements[i].srcset = source_elements[i].srcset.replace(/\\/sites\\/default\\/files/g, `${process.env.ROOT_URL}sites/default/files`);\n }\n }\n\n // Change the src URL of all inline images\n let images = tempDiv.getElementsByTagName('img');\n for (let i = 0; i < images.length; i++) {\n let inlineImage = images[i].src.split('/');\n let imageClass = \"\";\n inlineImage[2] = `${process.env.ROOT_URL_NO_SLASH}`;\n inlineImage = inlineImage.slice(2).join('/');\n tempDiv.getElementsByTagName('img')[i].src = inlineImage;\n\n // Responsive images.\n if (images[i].srcset) {\n images[i].srcset = images[i].srcset.replace(/\\/sites\\/default\\/files/g, `${process.env.ROOT_URL}sites/default/files`);\n }\n\n // add CSS styling to match the styling in the CMS\n if (tempDiv.getElementsByTagName('img')[i].parentElement.tagName.toLowerCase() === \"figure\") {\n // Handle images WITH captions\n imageClass = tempDiv.getElementsByTagName('img')[i].parentElement.className;\n if (imageClass.includes(\"align-right\")) {\n tempDiv.getElementsByTagName('img')[i].parentElement.style.cssText += (\"float: right; margin-left: 40px; margin-top: 15px; margin-bottom: 15px;\");\n } else if (imageClass.includes(\"align-left\")) {\n tempDiv.getElementsByTagName('img')[i].parentElement.style.cssText += (\"float: left; margin-right: 40px; margin-top: 15px; margin-bottom: 15px;\");\n } else if (imageClass.includes(\"align-center\")) {\n tempDiv.getElementsByTagName('img')[i].parentElement.style.cssText += (\"margin: auto; display: block;\")\n }\n tempDiv.getElementsByTagName('img')[i].parentElement.style.cssText += (\"text-align: center;\")\n } else {\n // Handle images WITHOUT captions\n imageClass = tempDiv.getElementsByTagName('img')[i].className;\n if (imageClass.includes(\"align-right\")) {\n tempDiv.getElementsByTagName('img')[i].style.cssText += (\"float: right; margin-left: 40px; margin-top: 15px; margin-bottom: 15px;\");\n } else if (imageClass.includes(\"align-left\")) {\n tempDiv.getElementsByTagName('img')[i].style.cssText += (\"float: left; margin-right: 40px; margin-top: 15px; margin-bottom: 15px;\");\n } else if (imageClass.includes(\"align-center\")) {\n tempDiv.getElementsByTagName('img')[i].style.cssText += (\"margin: auto; display: block;\")\n }\n }\n }\n return tempDiv.innerHTML;\n }\n}\n\n\nmodule.exports = Utilities;\n","// Main javascript entry point\n// Should handle bootstrapping/starting application\n\n'use strict';\nwindow.charts_collection = {}; // Contains all the the chart objects\n\nwindow.insolvency_cms_root_url = `${process.env.ROOT_URL}`;\nwindow.insolvency_cms_root_url_no_slash = `${process.env.ROOT_URL_NO_SLASH}`;\nwindow.insolvency_cms_root_api = `${process.env.ROOT_API}`;\n\n// var $ = require('jquery');\n// including module from the dashboard portal\n// TODO: Move these common modules outside the project in\n// a common folder\nvar DropDownBox = require('../_modules/common/drop-down-box/drop-down-box');\nvar ContentOverlay = require('../_modules/common/content-overlay/content-overlay');\n\n//--\n\nvar Redirect = require('../_modules/common/redirect/redirect');\nvar HomepageBanner = require('../_modules/homepage/homepage-banner/homepage-banner');\nvar HowCanWeHelp = require('../_modules/homepage/how-can-we-help/how-can-we-help');\nvar FormalInsolvency = require('../_modules/homepage/formal-insolvency/formal-insolvency');\nvar OurLatestThinking = require('../_modules/homepage/our-latest-thinking/our-latest-thinking');\nvar TheTeam = require('../_modules/homepage/the-team/the-team');\nvar Login = require('../_modules/common/login/login');\nvar CaseDetails = require('../_modules/case.details/case.details');\nvar FooterBottom = require('../_modules/common/footer/footer-bottom/footer-bottom');\nvar FooterTop = require('../_modules/common/footer/footer-top/footer-top');\nvar Articles = require('../_modules/articles/articles');\nvar ArticleDetails = require('../_modules/article.details/article.details');\nvar CampaignDetails = require('../_modules/campaign.details/campaign.details');\nvar CurrentCases = require('../_modules/current.cases/current.cases');\nvar PeopleDetails = require('../_modules/people.details/people.details');\nvar ConnectWithUs = require('../_modules/connect.with.us/connect.with.us');\nvar LegalAndPrivacy = require('../_modules/legal/legal-and-privacy');\nvar Loader = require('../_modules/common/loader/loader');\nvar SiteMap = require('../_modules/site.map/site.map');\nvar FixLinks = require('../_modules/common/fix-links/fix-links');\nvar Error = require('../_modules/error/error');\n\n$(function () {\n // Add to Ajax complete.\n new FixLinks();\n\n // Modules shared across all pages\n new Redirect(); // Load the public website\n new Login();\n new DropDownBox();\n new ContentOverlay();\n new FooterTop();\n new FooterBottom();\n new Loader();\n\n if ($('.homepage').length > 0) {\n new HomepageBanner();\n new HowCanWeHelp();\n new FormalInsolvency();\n new OurLatestThinking();\n new TheTeam();\n } else if ($('.article-details').length > 0) {\n new OurLatestThinking();\n new ArticleDetails();\n } else if ($('#articles-page').length > 0) {\n new Articles();\n } else if ($('.connect').length > 0) {\n new ConnectWithUs();\n } else if ($('.current-cases').length > 0) {\n new CurrentCases();\n } else if ($('.case-details').length > 0) {\n new CaseDetails();\n } else if ($('.layout-container.campaign-details').length > 0) {\n new CampaignDetails();\n } else if ($('.legal-and-privacy').length > 0) {\n new LegalAndPrivacy();\n } else if ($('.people-details').length > 0) {\n new PeopleDetails();\n new TheTeam();\n } else if ($('.site-map').length > 0) {\n new SiteMap();\n } else if ($('.layout-container.error-page').length > 0) {\n new Error();\n }\n // Run again to catch any links missed.\n new FixLinks();\n});\n"],"preExistingComment":"//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvX21vZHVsZXMvYXJ0aWNsZS5kZXRhaWxzL2FydGljbGUuZGV0YWlscy5qcyIsInNyYy9fbW9kdWxlcy9hcnRpY2xlcy9hcnRpY2xlcy5qcyIsInNyYy9fbW9kdWxlcy9jYW1wYWlnbi5kZXRhaWxzL2NhbXBhaWduLmRldGFpbHMuanMiLCJzcmMvX21vZHVsZXMvY2FzZS5kZXRhaWxzL2Nhc2UuZGV0YWlscy5qcyIsInNyYy9fbW9kdWxlcy9jb21tb24vY29udGVudC1vdmVybGF5L2NvbnRlbnQtb3ZlcmxheS5qcyIsInNyYy9fbW9kdWxlcy9jb21tb24vZHJvcC1kb3duLWJveC9kcm9wLWRvd24tYm94LmpzIiwic3JjL19tb2R1bGVzL2NvbW1vbi9maXgtbGlua3MvZml4LWxpbmtzLmpzIiwic3JjL19tb2R1bGVzL2NvbW1vbi9mb290ZXIvZm9vdGVyLWJvdHRvbS9mb290ZXItYm90dG9tLmpzIiwic3JjL19tb2R1bGVzL2NvbW1vbi9mb290ZXIvZm9vdGVyLXRvcC9mb290ZXItdG9wLmpzIiwic3JjL19tb2R1bGVzL2NvbW1vbi9sb2FkZXIvbG9hZGVyLmpzIiwic3JjL19tb2R1bGVzL2NvbW1vbi9sb2dpbi9sb2dpbi5qcyIsInNyYy9fbW9kdWxlcy9jb21tb24vcmVkaXJlY3QvcmVkaXJlY3QuanMiLCJzcmMvX21vZHVsZXMvY29ubmVjdC53aXRoLnVzL2Nvbm5lY3Qud2l0aC51cy5qcyIsInNyYy9fbW9kdWxlcy9jdXJyZW50LmNhc2VzL2N1cnJlbnQuY2FzZXMuanMiLCJzcmMvX21vZHVsZXMvZXJyb3IvZXJyb3IuanMiLCJzcmMvX21vZHVsZXMvaG9tZXBhZ2UvZm9ybWFsLWluc29sdmVuY3kvZm9ybWFsLWluc29sdmVuY3kuanMiLCJzcmMvX21vZHVsZXMvaG9tZXBhZ2UvaG9tZXBhZ2UtYmFubmVyL2hvbWVwYWdlLWJhbm5lci5qcyIsInNyYy9fbW9kdWxlcy9ob21lcGFnZS9ob3ctY2FuLXdlLWhlbHAvaG93LWNhbi13ZS1oZWxwLmpzIiwic3JjL19tb2R1bGVzL2hvbWVwYWdlL291ci1sYXRlc3QtdGhpbmtpbmcvb3VyLWxhdGVzdC10aGlua2luZy5qcyIsInNyYy9fbW9kdWxlcy9ob21lcGFnZS90aGUtdGVhbS90aGUtdGVhbS5qcyIsInNyYy9fbW9kdWxlcy9sZWdhbC9sZWdhbC1hbmQtcHJpdmFjeS5qcyIsInNyYy9fbW9kdWxlcy9wZW9wbGUuZGV0YWlscy9wZW9wbGUuZGV0YWlscy5qcyIsInNyYy9fbW9kdWxlcy9zaXRlLm1hcC9zaXRlLm1hcC5qcyIsInNyYy9fbW9kdWxlcy91dGlsaXRpZXMvdXRpbGl0aWVzLmpzIiwic3JjL19zY3JpcHRzL21haW4uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUNBQSxZQUFZOztBQUVaLElBQUksU0FBUyxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztBQUNqRCxJQUFJLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRTs7QUFFL0I7QUFDQSxJQUFJLGNBQWMsR0FBRyxTQUFqQixjQUFjLEdBQWM7RUFDOUIsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBaUI7RUFFN0IsSUFBSSxzQkFBc0IsR0FBRyxpQkFBaUI7RUFFOUMsU0FBUyxDQUFDLGVBQWUsQ0FDdkIsc0JBQXNCLEVBQ3RCLGtDQUFrQyxFQUNsQyxnQ0FBZ0MsQ0FDakM7QUFDSCxDQUFDO0FBRUQsU0FBUyxrQ0FBa0MsQ0FBQyxJQUFJLEVBQUU7RUFDaEQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQzFCLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsUUFBUSxFQUFFO0VBQ1osQ0FBQyxNQUNJO0lBQ0gsZ0NBQWdDLEVBQUU7RUFDcEM7QUFDRjtBQUVBLFNBQVMsZ0NBQWdDLEdBQUc7RUFDMUMsU0FBUyxFQUFFO0FBQ2I7QUFFQSxTQUFTLFNBQVMsR0FBRztFQUNuQixDQUFDLENBQUMsZUFB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LENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDeEMsSUFBSSxhQUFhLEVBQUU7SUFDbkIsSUFBSSxPQUFPLEVBQUU7RUFDakIsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDbEMsSUFBSSxPQUFPLEVBQUU7RUFDakIsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUNyRCxJQUFJLEtBQUssRUFBRTtFQUNmO0VBQ0E7RUFDQSxJQUFJLFFBQVEsRUFBRTtBQUNsQixDQUFDLENBQUMiLCJmaWxlIjoiZ2VuZXJhdGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIndXNlIHN0cmljdCc7XG5cbnZhciBVdGlsaXRpZXMgPSByZXF1aXJlKCcuLi91dGlsaXRpZXMvdXRpbGl0aWVzJyk7XG52YXIgdXRpbGl0aWVzID0gbmV3IFV0aWxpdGllcygpO1xuXG4vLyBDb25zdHJ1Y3RvclxudmFyIEFydGljbGVEZXRhaWxzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9ICdhcnRpY2xlLmRldGFpbHMnO1xuXG4gIGxldCBjb250ZW50VHlwZUxvYWRBcGlQYXRoID0gJ2FydGljbGUtZGV0YWlscyc7XG5cbiAgdXRpbGl0aWVzLmxvYWRQYWdlQ29udGVudChcbiAgICBjb250ZW50VHlwZUxvYWRBcGlQYXRoLFxuICAgIGxvYWRQYWdlQ29udGVudEFqYXhTdWNjZXNzQ2FsbGJhY2ssXG4gICAgbG9hZFBhZ2VDb250ZW50QWpheEVycm9yQ2FsbGJhY2tcbiAgKTtcbn1cblxuZnVuY3Rpb24gbG9hZFBhZ2VDb250ZW50QWpheFN1Y2Nlc3NDYWxsYmFjayhkYXRhKSB7XG4gIGlmIChkYXRhLmhhc093blByb3BlcnR5KDApKSB7XG4gICAgcG9wdWxhdGVEYXRhKGRhdGFbMF0pO1xuICAgIHNob3dEYXRhKCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgbG9hZFBhZ2VDb250ZW50QWpheEVycm9yQ2FsbGJhY2soKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkUGFnZUNvbnRlbnRBamF4RXJyb3JDYWxsYmFjaygpIHtcbiAgc2hvd0Vycm9yKCk7XG59XG5cbmZ1bmN0aW9uIHNob3dFcnJvcigpIHtcbiAgJChcIiNhcnRpY2xlLWJvZHlcIikuYXBwZW5kKFwiPHAgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6IDEuMjVlbSc+VW5hYmxlIHRvIGxvYWQgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi48L3A+XCIpO1xuICAkKFwiLmJhbm5lci13aXRoLXRleHRcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG4gICQoXCIuc2lkZWJsb2NrXCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xuICBzaG93RGF0YSgpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyB0aGUgZGF0YSBvYmplY3Qgb24gdG8gdGhlIHBhZ2VcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YU9iaiBBIGRhdGEgb2JqZWN0IHJldHJpZXZlZCBmcm9tIHRoZSBiYWNrZW5kIEFQSVxuICovXG52YXIgcG9wdWxhdGVEYXRhID0gKGRhdGFPYmopID0+IHtcbiAgbGV0IGJvZHlDb250ZW50ID0gdXRpbGl0aWVzLmhhbmRsZUlubGluZUltYWdlcyhkYXRhT2JqLmJvZHlfZGVzY3JpcHRpb24pO1xuXG4gIC8vIHByb2Nlc3MgdmlkZW8gVVJMIGluIHRoZSBib2R5IGNvbnRlbnRcbiAgYm9keUNvbnRlbnQgPSBib2R5Q29udGVudC5yZXBsYWNlKC8gc3JjPVxcXCJcXC9zaXRlc1xcL2RlZmF1bHRcXC9maWxlcy9nLGAgc3JjPVwiJHtwcm9jZXNzLmVudi5ST09UX1VSTH1zaXRlcy9kZWZhdWx0L2ZpbGVzYCk7XG5cbiAgLy8gZXh0cmFjdCB0ZXh0IGZyb20gaHRtbCBzdHJpbmdzXG4gIGxldCBzdWJ0aXRsZSA9IGRhdGFPYmouYm9keV90aXRsZS5yZXBsYWNlKC8oPChbXj5dKyk+KS9naSwgXCJcIik7XG5cbiAgbGV0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpXCIpLm1hdGNoZXM7XG5cbiAgaWYgKGlzTW9iaWxlKSB7XG4gICAgJChcIi5zaWRlYmxvY2tcIikucHJlcGVuZChcbiAgICAgIGA8ZGl2IGNsYXNzPVwiYXV0aG9yc1wiIGlkPVwiYXV0aG9yLXNlY3Rpb25cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+QXV0aG9yczwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxociBjbGFzcz1cInNlcGFyYXRvclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVhZGluZy10aW1lXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlXCI+PC9kaXY+XG4gICAgICAgIDxociBjbGFzcz1cInNlcGFyYXRvclwiPlxuICAgICAgICA8dWwgaWQ9XCJ0YWctc2VjdGlvblwiIGNsYXNzPVwidGFnc1wiPjwvdWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGFyZVwiPlxuICAgICAgICAgIDxhIG9uY2xpY2s9XCJjb3B5TGluaygpXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cIi9pbWFnZXMvbGluay5zdmdcIj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGEgb25jbGljaz1cInNob3dTaGFyZU9wdGlvbnMoKVwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCIvaW1hZ2VzL3NoYXJlLnN2Z1wiPlxuICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8YSBvbmNsaWNrPVwid2luZG93LnByaW50KClcIj5cbiAgICAgICAgICAgIDxpbWcgc3JjPVwiL2ltYWdlcy9wcmludC5zdmdcIj5cbiAgICAgICAgICA8L2E+XG4gICAgICAgICAgPGhyIGNsYXNzPVwic2VwYXJhdG9yXCI+XG4gICAgICAgIDwvZGl2PmBcbiAgICApO1xuICB9IGVsc2Uge1xuICAgICQoXCIuY29udGFpbmVyLWFydGljbGUtZGV0YWlsc1wiKS5wcmVwZW5kKFxuICAgICAgYDxkaXYgY2xhc3M9XCJhcnRpY2xlLWluZm9cIj5cbiAgICAgICAgPGhyIGNsYXNzPVwic2VwYXJhdG9yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhvcml6b250YWxcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbi1jYWxlbmRhclwiPjwvaT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlXCI+PC9kaXY+XG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiY2xvY2staWNvblwiIHNyYz1cIi9pbWFnZXMvY2xvY2suc3ZnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVhZGluZy10aW1lXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hhcmVcIj5cbiAgICAgICAgICAgICAgPGEgb25jbGljaz1cImNvcHlMaW5rKClcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9pbWFnZXMvbGluay5zdmdcIj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8YSBvbmNsaWNrPVwic2hvd1NoYXJlT3B0aW9ucygpXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvaW1hZ2VzL3NoYXJlLnN2Z1wiPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxhIG9uY2xpY2s9XCJ3aW5kb3cucHJpbnQoKVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2ltYWdlcy9wcmludC5zdmdcIj5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDxociBjbGFzcz1cInNlcGFyYXRvclwiPlxuICAgICAgPC9kaXY+YFxuICAgICk7XG4gICAgJChcIi5zaWRlYmxvY2tcIikuYXBwZW5kKFxuICAgICAgYDxkaXYgY2xhc3M9XCJhdXRob3JzXCIgaWQ9XCJhdXRob3Itc2VjdGlvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj5BdXRob3JzPC9zcGFuPlxuICAgICAgPC9kaXY+YFxuICAgICk7XG4gIH1cbiAgLy8gcmVuZGVyIGNvbnRlbnQgb24gdGhlIHBhZ2VcbiAgJChcIiNhcnRpY2xlLXRpdGxlXCIpLmh0bWwoZGF0YU9iai50aXRsZSk7XG4gICQoXCIjc3VidGl0bGVcIikuYXBwZW5kKHN1YnRpdGxlKTtcbiAgJChcIiNhcnRpY2xlLWJvZHlcIikuYXBwZW5kKGJvZHlDb250ZW50KTtcbiAgJChcIi5yZWFkaW5nLXRpbWVcIikuaHRtbChkYXRhT2JqLnJlYWRfdGltZSk7XG4gICQoXCIuZGF0ZVwiKS5odG1sKGRhdGFPYmoucHVibGlzaGVkX2RhdGUpO1xuXG4gIC8vIHNldCBiYW5uZXIgYmFja2dyb3VuZCBpbWFnZVxuICBsZXQgaW1hZ2VfcmF3X2FycmF5ID0gZGF0YU9iai5pbWFnZS5zcGxpdChcIlxcXCJcIik7XG4gIC8vIFNpbmNlICdsYXp5JyBpbiB0aGUgZG9tLCBmaW5kIHVybCBhdHRyIGR5bmFtaWNhbGx5IGFzIGZpbmQgaXQgYW5kIHRoZW5cbiAgLy8gcmV0dXJuaW5nIGFmdGVyIGl0LlxuICBsZXQgaW1hZ2Vfc3JjID0gaW1hZ2VfcmF3X2FycmF5LmZpbmQoZnVuY3Rpb24gKHZhbCwgaSkge1xuICAgIGlmICgodHlwZW9mIGltYWdlX3Jhd19hcnJheVtpIC0gMV0gIT09ICd1bmRlZmluZWQnKVxuICAgICAgJiYgKGltYWdlX3Jhd19hcnJheVtpIC0gMV0uaW5kZXhPZignc3JjPScpICE9PSAtMSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0pO1xuICAkKFwiLmJhbm5lci13aXRoLXRleHRcIikuYXR0cihcInN0eWxlXCIsIGBiYWNrZ3JvdW5kLWltYWdlOnVybCgnJHtwcm9jZXNzLmVudi5ST09UX1VSTH0ke2ltYWdlX3NyY30nKWApO1xuXG4gIC8vIHBvcHVsYXRpbmcgYXV0aG9yc1xuICBsZXQgYXV0aG9yQXJyYXkgPSBkYXRhT2JqLmF1dGhvcl9uYW1lLnNwbGl0KFwiLCBcIik7XG4gIGxldCBhdXRob3JQb3NBcnJheSA9IGRhdGFPYmouYXV0aG9yX2Rlc2lnbmF0aW9uLnNwbGl0KFwiLCBcIik7XG4gIGxldCBhdXRob3JJbWFnZUFycmF5ID0gZGF0YU9iai5hdXRob3JfaW1hZ2Uuc3BsaXQoXCIsIFwiKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdXRob3JBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICQoXCIjYXV0aG9yLXNlY3Rpb25cIikuYXBwZW5kKFxuICAgICAgYDxkaXYgY2xhc3M9XCJhdXRob3JcIj5cbiAgICAgICAgPGltZyBzcmM9XCIke3Byb2Nlc3MuZW52LlJPT1RfVVJMfSR7YXV0aG9ySW1hZ2VBcnJheVtpXX1cIiBjbGFzcz1cImF2YXRhclwiIGFsdD1cIkF2YXRhclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hbWVcIj4ke2F1dGhvckFycmF5W2ldfTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcmVkc1wiPiR7YXV0aG9yUG9zQXJyYXlbaV19PC9zcGFuPlxuICAgICAgPC9kaXY+YFxuICAgICk7XG4gIH1cblxuICAvLyBwb3B1bGF0aW5nIHRhZ3NcbiAgbGV0IHRhZ3NBcnJheSA9IGRhdGFPYmoudGFncy5zcGxpdChcIiwgXCIpO1xuICBmb3IgKGxldCBqID0gMDsgaiA8IHRhZ3NBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgbGV0IHRhZ19kYXRhID0gdGFnc0FycmF5W2pdLnNwbGl0KFwiPlwiKTtcbiAgICAgIGxldCB0YWdfaHJlZiA9IHRhZ19kYXRhWzBdLnNwbGl0KFwiL1wiKTtcbiAgICAgIGxldCB0YWdJZCA9IHRhZ19ocmVmW3RhZ19ocmVmLmxlbmd0aCAtIDFdLnNwbGl0KFwiXFxcIlwiKVswXTtcbiAgICAgIGxldCB0YWcgPSB0YWdfZGF0YVsxXS5zcGxpdChcIjxcIilbMF07XG4gICAgICAkKFwiI3RhZy1zZWN0aW9uXCIpLmFwcGVuZChcbiAgICAgICAgYDxsaT5cbiAgICAgICAgICA8YSBocmVmPVwiL2FydGljbGVzLmh0bWw/dGFncz0ke3RhZ0lkfVwiIGNsYXNzPVwidGFnXCI+JHt0YWd9PC9hPlxuICAgICAgICA8L2xpPmBcbiAgICAgICk7XG4gIH1cblxuICAvLyBwcm9jZXNzIGFjY29yZGlvbiB0aXRsZSBhbmQgY29udGVudCBpbiByaWNoIHRleHRcbiAgdmFyIGFjY29yZGlvblRpdGxlcyA9IFtdO1xuICB2YXIgYWNjb3JkaW9uVGl0bGVJbmRleCA9IC0xO1xuICB2YXIgYWNjb3JkaW9uQ29udGVudHMgPSBbXTtcbiAgdmFyIGFjY29yZGlvbkNvbnRlbnRTdGF0dXMgPSAwO1xuICB2YXIgYXJ0aWNsZVBhcmFncmFwaHMgPSAkKFwiI2FydGljbGUtYm9keVwiKS5jaGlsZHJlbigpO1xuICBmb3IoIHZhciBpID0gMDsgaSA8IGFydGljbGVQYXJhZ3JhcGhzLmxlbmd0aDsgaSsrKXtcbiAgICBpZigkKGFydGljbGVQYXJhZ3JhcGhzW2ldKS5oYXNDbGFzcyhcImFjY29yZGlvbi10aXRsZVwiKSl7XG4gICAgICBhY2NvcmRpb25UaXRsZUluZGV4Kys7XG4gICAgICBhY2NvcmRpb25UaXRsZXMucHVzaChhcnRpY2xlUGFyYWdyYXBoc1tpXSk7XG4gICAgfWVsc2UgaWYoJChhcnRpY2xlUGFyYWdyYXBoc1tpXSkuaGFzQ2xhc3MoXCJhY2NvcmRpb24tY29udGVudFwiKSl7XG4gICAgICBpZih0eXBlb2YoYWNjb3JkaW9uQ29udGVudHNbYWNjb3JkaW9uVGl0bGVJbmRleF0pID09ICd1bmRlZmluZWQnKXsgYWNjb3JkaW9uQ29udGVudHMucHVzaChbXSk7IH1cbiAgICAgIGlmKGFjY29yZGlvblRpdGxlSW5kZXggPCAwKSBhY2NvcmRpb25UaXRsZUluZGV4ID0gMDtcbiAgICAgIGFjY29yZGlvbkNvbnRlbnRzW2FjY29yZGlvblRpdGxlSW5kZXhdLnB1c2goYXJ0aWNsZVBhcmFncmFwaHNbaV0pO1xuICAgIH1lbHNlIGlmKCQoYXJ0aWNsZVBhcmFncmFwaHNbaV0pLmhhc0NsYXNzKFwiYWNjb3JkaW9uLWNvbnRlbnQtc3RhcnRcIikpe1xuICAgICAgaWYodHlwZW9mKGFjY29yZGlvbkNvbnRlbnRzW2FjY29yZGlvblRpdGxlSW5kZXhdKSA9PSAndW5kZWZpbmVkJyl7IGFjY29yZGlvbkNvbnRlbnRzLnB1c2goW10pOyB9XG4gICAgICBpZihhY2NvcmRpb25UaXRsZUluZGV4IDwgMCkgYWNjb3JkaW9uVGl0bGVJbmRleCA9IDA7XG4gICAgICBhY2NvcmRpb25Db250ZW50c1thY2NvcmRpb25UaXRsZUluZGV4XS5wdXNoKGFydGljbGVQYXJhZ3JhcGhzW2ldKTtcbiAgICAgIGFjY29yZGlvbkNvbnRlbnRTdGF0dXMgPSAxO1xuICAgIH1lbHNlIGlmKCQoYXJ0aWNsZVBhcmFncmFwaHNbaV0pLmhhc0NsYXNzKFwiYWNjb3JkaW9uLWNvbnRlbnQtZW5kXCIpKXtcbiAgICAgIGlmKHR5cGVvZihhY2NvcmRpb25Db250ZW50c1thY2NvcmRpb25UaXRsZUluZGV4XSkgPT0gJ3VuZGVmaW5lZCcpeyBhY2NvcmRpb25Db250ZW50cy5wdXNoKFtdKTsgfVxuICAgICAgYWNjb3JkaW9uQ29udGVudHNbYWNjb3JkaW9uVGl0bGVJbmRleF0ucHVzaChhcnRpY2xlUGFyYWdyYXBoc1tpXSk7XG4gICAgICBhY2NvcmRpb25Db250ZW50U3RhdHVzID0gMDtcbiAgICB9ZWxzZSBpZihhY2NvcmRpb25Db250ZW50U3RhdHVzID09IDEpe1xuICAgICAgaWYodHlwZW9mKGFjY29yZGlvbkNvbnRlbnRzW2FjY29yZGlvblRpdGxlSW5kZXhdKSA9PSAndW5kZWZpbmVkJyl7IGFjY29yZGlvbkNvbnRlbnRzLnB1c2goW10pOyB9XG4gICAgICBhY2NvcmRpb25Db250ZW50c1thY2NvcmRpb25UaXRsZUluZGV4XS5wdXNoKGFydGljbGVQYXJhZ3JhcGhzW2ldKTtcbiAgICB9XG4gIH1cbiAgZm9yKCB2YXIgaSA9IDA7IGkgPCBhY2NvcmRpb25UaXRsZXMubGVuZ3RoOyBpKyspe1xuICAgIGlmKGFjY29yZGlvblRpdGxlc1tpXS5uZXh0RWxlbWVudFNpYmxpbmchPW51bGwpe1xuICAgICAgdmFyIGFjY29yZGlvbkhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IGFjY29yZGlvbkhvbGRlci5jbGFzc05hbWUgPSBcImFjY29yZGlvbi1ob2xkZXJcIjtcbiAgICAgIHZhciBhY2NvcmRpb25Db250ZW50SG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTsgYWNjb3JkaW9uQ29udGVudEhvbGRlci5jbGFzc05hbWUgPSBcImFjY29yZGlvbi1jb250ZW50LWhvbGRlclwiO1xuICAgICAgYWNjb3JkaW9uVGl0bGVzW2ldLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGFjY29yZGlvbkhvbGRlcixhY2NvcmRpb25UaXRsZXNbaV0ubmV4dEVsZW1lbnRTaWJsaW5nKTtcbiAgICAgIGFjY29yZGlvbkhvbGRlci5hcHBlbmRDaGlsZChhY2NvcmRpb25UaXRsZXNbaV0pO1xuICAgICAgYWNjb3JkaW9uSG9sZGVyLmFwcGVuZENoaWxkKGFjY29yZGlvbkNvbnRlbnRIb2xkZXIpO1xuICAgICAgaWYodHlwZW9mKGFjY29yZGlvbkNvbnRlbnRzW2ldKSAhPSAndW5kZWZpbmVkJyl7XG4gICAgICAgIGZvciggdmFyIGogPSAwOyBqIDwgYWNjb3JkaW9uQ29udGVudHNbaV0ubGVuZ3RoOyBqKyspe1xuICAgICAgICAgIGFjY29yZGlvbkNvbnRlbnRIb2xkZXIuYXBwZW5kQ2hpbGQoYWNjb3JkaW9uQ29udGVudHNbaV1bal0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gYWRkIGxvZ2ljIG9mIG9wZW4gYW5kIGNvbGxhcHNlIGFjY29yZGlvbnNcbiAgZm9yICggaSA9IDA7IGkgPCBhY2NvcmRpb25UaXRsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjY29yZGlvblRpdGxlc1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoJ2FjY29yZGlvbi10aXRsZS1vcGVuJyk7XG4gICAgICAgIHRoaXMubmV4dFNpYmxpbmcuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG4gICAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIE9uY2UgdGhlIGRhdGEgaGFzIGJlZW4gcmVuZGVyZWQsIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgbG9hZGluZyBpY29uIGFuZCBzaG93cyB0aGUgY29udGVudCBvbiB0aGUgcGFnZS5cbiAqL1xudmFyIHNob3dEYXRhID0gKCkgPT4ge1xuICAkKCcuYXJ0aWNsZS1kZXRhaWxzJykuc2hvdygpO1xuICAkKCcuZm9vdGVyLWJvdHRvbScpLnNob3coKTtcbiAgJCgnLmZvb3Rlci10b3AnKS5zaG93KCk7XG4gICQoJy5sb2FkZXInKS5oaWRlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQXJ0aWNsZURldGFpbHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgQXJ0aWNsZXMgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm5hbWUgPSAnYXJ0aWNsZXMnO1xuXG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuXG4gICAgLy8gZ2V0IGFydGljbGUgZGF0YVxuICAgIGpRdWVyeS5hamF4KHtcbiAgICAgICAgdXJsOiBgJHt3aW5kb3cuaW5zb2x2ZW5jeV9jbXNfcm9vdF9hcGl9YXJ0aWNsZS1zZWFyY2gke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICAgIHR5cGU6IFwiZ2V0XCIsXG4gICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgIHBvcHVsYXRlQXJ0aWNsZXMoZGF0YSk7XG4gICAgICAgICAgICAkKCcubG9hZGVyJykuaGlkZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKFwiI2FydGljbGUtbGlzdFwiKS5hcHBlbmQoXCI8cCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7IGZvbnQtc2l6ZTogMS4yNWVtJz5VbmFibGUgdG8gbG9hZCBjb250ZW50LiBQbGVhc2UgdHJ5IGFnYWluLjwvcD5cIik7XG4gICAgICAgICAgICAkKCcubG9hZGVyJykuaGlkZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBnZXQgYWxsIHRhZ3MgZm9yIGZpbHRlclxuICAgIGpRdWVyeS5hamF4KHtcbiAgICAgICAgdXJsOiBgJHtwcm9jZXNzLmVudi5ST09UX0FQSX10YWdzLWxpc3RgLFxuICAgICAgICB0eXBlOiBcImdldFwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICBwb3B1bGF0ZVRhZ0ZpbHRlcihkYXRhKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gc2V0IGluaXRpYWwgcGFnZSBudW1iZXIgdG8gMVxuICAgICQoXCIjY3VycmVudC1wYWdlLW51bWJlclwiKS5odG1sKFwiMVwiKTtcblxuICAgIC8vIGRpc2FibGUgc3VibWl0dGluZyBmb3JtIHdoZW4gdXNlcnMgaGl0IGVudGVyIGtleVxuICAgICQoZG9jdW1lbnQpLm9uKFwia2V5ZG93blwiLCBcImZvcm1cIiwgZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5rZXkgIT0gXCJFbnRlclwiO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyAxMCBhcnRpY2xlcyBvbiB0byB0aGUgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIEFuIGFycmF5IG9mIGFydGljbGVzIG9iamVjdHMgcmV0cmlldmVkIGZyb20gdGhlIERydXBhbCBBUElcbiAqL1xudmFyIHBvcHVsYXRlQXJ0aWNsZXMgPSAoZGF0YSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggJiYgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgLy8gZXh0cmFjdCBzb3VyY2UgcGF0aCBmb3IgaW1hZ2VcbiAgICAgICAgbGV0IGltYWdlX3Jhd19hcnJheSA9IGRhdGFbaV0uaW1hZ2Uuc3BsaXQoXCJcXFwiXCIpO1xuICAgICAgICAvLyBTaW5jZSAnbGF6eScgaW4gdGhlIGRvbSwgZmluZCB1cmwgYXR0ciBkeW5hbWljYWxseSBhcyBmaW5kIGl0IGFuZCB0aGVuXG4gICAgICAgIC8vIHJldHVybmluZyBhZnRlciBpdC5cbiAgICAgICAgbGV0IGltYWdlX3NyYyA9IGltYWdlX3Jhd19hcnJheS5maW5kKGZ1bmN0aW9uICh2YWwsIGkpIHtcbiAgICAgICAgICAgIGlmICgodHlwZW9mIGltYWdlX3Jhd19hcnJheVtpIC0gMV0gIT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICYmIChpbWFnZV9yYXdfYXJyYXlbaSAtIDFdLmluZGV4T2YoJ3NyYz0nKSAhPT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgaW1hZ2VfYXR0ciA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGogPSAyOyBqIDwgaW1hZ2VfcmF3X2FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoaiA9PT0gNykge1xuICAgICAgICAgICAgICAgIGltYWdlX2F0dHIgPSBpbWFnZV9hdHRyLmNvbmNhdChgXCIke2ltYWdlX3Jhd19hcnJheVtqXX1cImApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbWFnZV9hdHRyID0gaW1hZ2VfYXR0ci5jb25jYXQoaW1hZ2VfcmF3X2FycmF5W2pdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlbW92ZSBIVE1MIHRhZ3MgZnJvbSBkZXNjcmlwdGlvbiBiZWZvcmUgZGlzcGxheWluZ1xuICAgICAgICBsZXQgZGVzY3JpcHRpb24gPSBkYXRhW2ldLmJvZHlfdGl0bGUucmVwbGFjZSgvPFtePl0qPj8vZ20sICcnKTtcblxuICAgICAgICAvLyBnZXQgdGFnc1xuICAgICAgICBsZXQgdGFnc0FycmF5ID0gZGF0YVtpXS50YWdzLnNwbGl0KFwiLCBcIik7XG4gICAgICAgIGxldCB0YWdzID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0YWdzQXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGxldCB0YWdfZGF0YSA9IHRhZ3NBcnJheVtqXS5zcGxpdChcIj5cIik7XG4gICAgICAgICAgICBsZXQgdGFnX2hyZWYgPSB0YWdfZGF0YVswXS5zcGxpdChcIi9cIik7XG4gICAgICAgICAgICBsZXQgdGFnSWQgPSB0YWdfaHJlZlt0YWdfaHJlZi5sZW5ndGggLSAxXS5zcGxpdChcIlxcXCJcIilbMF07XG4gICAgICAgICAgICBsZXQgdGFnID0gdGFnX2RhdGFbMV0uc3BsaXQoXCI8XCIpWzBdO1xuICAgICAgICAgICAgdGFncyArPSBgPGEgaHJlZj1cIi9hcnRpY2xlcy5odG1sP3RhZ3M9JHt0YWdJZH1cIiBjbGFzcz1cInRhZ1wiPiR7dGFnfTwvYT5gO1xuICAgICAgICB9XG5cbiAgICAgICAgJChcIiNhcnRpY2xlLWxpc3RcIikuYXBwZW5kKFxuICAgICAgICAgICAgYDxsaSBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltZy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpbWFnZS1saW5rXCIgaHJlZj1cIi9hcnRpY2xlLmRldGFpbHMuaHRtbD9pZD0ke2RhdGFbaV0uaWR9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIiR7d2luZG93Lmluc29sdmVuY3lfY21zX3Jvb3RfdXJsX25vX3NsYXNofSR7aW1hZ2Vfc3JjfVwiIGNsYXNzPVwiaW1hZ2VcIiAke2ltYWdlX2F0dHJ9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiL2FydGljbGUuZGV0YWlscy5odG1sP2lkPSR7ZGF0YVtpXS5pZH1cIiBjbGFzcz1cImxpbmtcIj5cbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwidGl0bGVcIj4ke2RhdGFbaV0udGl0bGV9PC9oND5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+PHA+JHtkZXNjcmlwdGlvbn08L3A+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvMVwiPiR7ZGF0YVtpXS5wdWJsaXNoZWRfZGF0ZX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5mbzJcIj4ke2RhdGFbaV0uYXV0aG9yX25hbWV9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWdzXCI+XG4gICAgICAgICAgICAgICAgICAgICR7dGFnc31cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbGk+YFxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbmRlcnMgdGhlIHRhZyBmaWx0ZXJzIG9uIHRvIHRoZSBwYWdlXG4gKlxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBBbiBhcnJheSBvZiB0YWcgb2JqZWN0cyByZXRyaWV2ZWQgZnJvbSB0aGUgRHJ1cGFsIEFQSVxuICovXG52YXIgcG9wdWxhdGVUYWdGaWx0ZXIgPSAoZGF0YSkgPT4ge1xuICAgIC8vIGFkZCB0YWdzXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICQoXCIjdGFncy1maWx0ZXJcIikuYXBwZW5kKFxuICAgICAgICAgICAgYDxkaXYgY2xhc3M9XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIG5hbWU9XCJ0YWdzXCIgaWQ9JHtkYXRhW2ldLnRpZH0gdmFsdWU9JHtkYXRhW2ldLnRpZH0gY2xhc3M9XCJyYWRpb1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9JHtkYXRhW2ldLnRpZH0+JHtkYXRhW2ldLm5hbWV9PC9sYWJlbD5cbiAgICAgICAgICAgIDwvZGl2PmBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBhZGQgYXBwbHkgYnV0dG9uXG4gICAgJChcIiN0YWdzLWZpbHRlclwiKS5hcHBlbmQoXG4gICAgICAgIGA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkFwcGx5XCI+XG4gICAgICAgIDwvZGl2PmBcbiAgICApO1xuXG4gICAgLy8gZ3JvdXBpbmcgcmFkaW8gYnV0dG9ucyB0aGF0IGRvIG5vdCBoYXZlIHRoZSBzYW1lIG5hbWVcbiAgICAvLyBpLmUuIG9ubHkgb25lIG9mIHRoZSByYWRpbyBidXR0b25zIGNhbiBiZSBzZWxlY3RlZCBhdCBhIGdpdmVuIHRpbWVcbiAgICAkKFwiLnJhZGlvXCIpLm9uKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAkKFwiLnJhZGlvXCIpLm5vdCh0aGlzKS5wcm9wKFwiY2hlY2tlZFwiLCBmYWxzZSk7XG4gICAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQXJ0aWNsZXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBVdGlsaXRpZXMgPSByZXF1aXJlKCcuLi91dGlsaXRpZXMvdXRpbGl0aWVzJyk7XG52YXIgdXRpbGl0aWVzID0gbmV3IFV0aWxpdGllcygpO1xuXG4vLyBDb25zdHJ1Y3RvclxudmFyIENhbXBhaWduRGV0YWlscyA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSAnY2FtcGFpZ24uZGV0YWlscyc7XG5cbiAgbGV0IGNvbnRlbnRUeXBlTG9hZEFwaVBhdGggPSAnY2FtcGFpZ24tZGV0YWlscyc7XG5cbiAgdXRpbGl0aWVzLmxvYWRQYWdlQ29udGVudChcbiAgICBjb250ZW50VHlwZUxvYWRBcGlQYXRoLFxuICAgIGxvYWRQYWdlQ29udGVudEFqYXhTdWNjZXNzQ2FsbGJhY2ssXG4gICAgbG9hZFBhZ2VDb250ZW50QWpheEVycm9yQ2FsbGJhY2tcbiAgKTtcbn1cblxuZnVuY3Rpb24gbG9hZFBhZ2VDb250ZW50QWpheFN1Y2Nlc3NDYWxsYmFjayhkYXRhKSB7XG4gIGlmIChkYXRhLmhhc093blByb3BlcnR5KDApKSB7XG4gICAgcG9wdWxhdGVEYXRhKGRhdGFbMF0pO1xuICAgIHNob3dEYXRhKCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgbG9hZFBhZ2VDb250ZW50QWpheEVycm9yQ2FsbGJhY2soKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsb2FkUGFnZUNvbnRlbnRBamF4RXJyb3JDYWxsYmFjaygpIHtcbiAgc2hvd0Vycm9yKCk7XG59XG5cbnZhciBzaG93RXJyb3IgPSAoKSA9PiB7XG4gICQoXCIuY29udGFpbmVyLWNhbXBhaWduLWRldGFpbHNcIikuYXBwZW5kKFwiPHAgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6IDEuMjVlbSc+VW5hYmxlIHRvIGxvYWQgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi48L3A+XCIpO1xuICAkKFwiLmJhbm5lclwiKS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgc2hvd0RhdGEoKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbmRlcnMgdGhlIGRhdGEgb2JqZWN0IG9uIHRvIHRoZSBwYWdlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFPYmogQSBkYXRhIG9iamVjdCByZXRyaWV2ZWQgZnJvbSB0aGUgYmFja2VuZCBBUElcbiAqL1xudmFyIHBvcHVsYXRlRGF0YSA9IChkYXRhT2JqKSA9PiB7XG4gIGxldCBib2R5Q29udGVudCA9IHV0aWxpdGllcy5oYW5kbGVJbmxpbmVJbWFnZXMoZGF0YU9iai5ib2R5X2Rlc2NyaXB0aW9uKTtcblxuICAvLyBwcm9jZXNzIHZpZGVvIFVSTCBpbiB0aGUgYm9keSBjb250ZW50XG4gIGJvZHlDb250ZW50ID0gYm9keUNvbnRlbnQucmVwbGFjZSgvIHNyYz1cXFwiXFwvc2l0ZXNcXC9kZWZhdWx0XFwvZmlsZXMvZywgYCBzcmM9XCIke3Byb2Nlc3MuZW52LlJPT1RfVVJMfXNpdGVzL2RlZmF1bHQvZmlsZXNgKTtcblxuICAvLyByZW5kZXIgY29udGVudCBvbiB0aGUgcGFnZVxuICAkKFwiI2NhbXBhaWduLXRpdGxlXCIpLmh0bWwoZGF0YU9iai50aXRsZSk7XG4gICQoXCIubGF5b3V0LWNvbnRhaW5lci5jYW1wYWlnbi1kZXRhaWxzIC5yZW5kZXJlZC1lbnRpdHlcIikuYXBwZW5kKGJvZHlDb250ZW50KTtcblxuICAvLyBzZXQgYmFubmVyIGJhY2tncm91bmQgaW1hZ2VcbiAgbGV0IGltYWdlX3Jhd19hcnJheSA9IGRhdGFPYmouaW1hZ2Uuc3BsaXQoXCJcXFwiXCIpO1xuICAvLyBTaW5jZSAnbGF6eScgaW4gdGhlIGRvbSwgZmluZCB1cmwgYXR0ciBkeW5hbWljYWxseSBhcyBmaW5kIGl0IGFuZCB0aGVuXG4gIC8vIHJldHVybmluZyBhZnRlciBpdC5cbiAgbGV0IGltYWdlX3NyYyA9IGltYWdlX3Jhd19hcnJheS5maW5kKGZ1bmN0aW9uICh2YWwsIGkpIHtcbiAgICBpZiAoKHR5cGVvZiBpbWFnZV9yYXdfYXJyYXlbaSAtIDFdICE9PSAndW5kZWZpbmVkJylcbiAgICAgICYmIChpbWFnZV9yYXdfYXJyYXlbaSAtIDFdLmluZGV4T2YoJ3NyYz0nKSAhPT0gLTEpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbiAgbGV0ICRiYW5uZXIgPSAkKFwiLmJhbm5lclwiKTtcbiAgLy8gQmFubmVyIGlzIG9wdGlvbmFsLlxuICBpZiAoaW1hZ2Vfc3JjKSB7XG4gICAgJGJhbm5lci5hdHRyKFwic3R5bGVcIiwgYGJhY2tncm91bmQtaW1hZ2U6dXJsKCcke3Byb2Nlc3MuZW52LlJPT1RfVVJMfSR7aW1hZ2Vfc3JjfScpYCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgJGJhbm5lci5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgfVxufVxuXG4vKipcbiAqIE9uY2UgdGhlIGRhdGEgaGFzIGJlZW4gcmVuZGVyZWQsIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgbG9hZGluZyBpY29uIGFuZCBzaG93cyB0aGUgY29udGVudCBvbiB0aGUgcGFnZS5cbiAqL1xudmFyIHNob3dEYXRhID0gKCkgPT4ge1xuICAkKCcuY2FtcGFpZ24tZGV0YWlscycpLnNob3coKTtcbiAgJCgnLmxvYWRlcicpLmhpZGUoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDYW1wYWlnbkRldGFpbHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgQ2FzZURldGFpbHMgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uYW1lID0gJ2Nhc2UuZGV0YWlscyc7XG5cbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTtcbiAgY29uc3QgY2FzZUlkID0gdXJsUGFyYW1zLmdldCgnaWQnKTtcblxuICAvLyBpZiBzZXNzaW9uIHN0b3JhZ2UgaXMgZW1wdHksIGdldCBkYXRhIGZyb20gQVBJIGFuZCBzYXZlIGluIHNlc3Npb24gc3RvcmFnZVxuICBpZiAoIXNlc3Npb25TdG9yYWdlWydkYXRhJ10pIHtcbiAgICBqUXVlcnkuYWpheCh7XG4gICAgICB1cmw6IGAke3Byb2Nlc3MuZW52LlJPT1RfSU5TT0w2X0FQSX1QdWJsaWNKb2JzRm9yUHJhY3RpY2UvZXkvYCxcbiAgICAgIHR5cGU6IFwiZ2V0XCIsXG4gICAgICBzdWNjZXNzOiBmdW5jdGlvbihjYXNlc0RhdGEpIHtcbiAgICAgICAgc2V0U2Vzc2lvblN0b3JhZ2UoY2FzZXNEYXRhKTtcbiAgICAgICAgcG9wdWxhdGVEYXRhKGNhc2VJZCk7XG4gICAgICAgIHNob3dEYXRhKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzaG93RXJyb3IoKTtcbiAgICAgICAgc2hvd0RhdGEoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBlbHNlIHtcbiAgICBwb3B1bGF0ZURhdGEoY2FzZUlkKTtcbiAgICBzaG93RGF0YSgpO1xuICB9XG5cbiAgalF1ZXJ5LmFqYXgoe1xuICAgIHVybDogYCR7cHJvY2Vzcy5lbnYuUk9PVF9BUEl9Y2FzZS1kZXRhaWxzP2lkPSR7Y2FzZUlkfWAsXG4gICAgdHlwZTogXCJnZXRcIixcbiAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICBsZXQgZmllbGRfY2FzZV9kb2N1bWVudCA9ICcnO1xuICAgICAgaWYgKCh0eXBlb2YgZGF0YVswXSAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgJiYgKHR5cGVvZiBkYXRhWzBdLmZpZWxkX2Nhc2VfZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpKSB7XG4gICAgICAgIGZpZWxkX2Nhc2VfZG9jdW1lbnQgPSBkYXRhWzBdLmZpZWxkX2Nhc2VfZG9jdW1lbnQ7XG4gICAgICB9XG4gICAgICBwb3B1bGF0ZURvY3VtZW50cyhmaWVsZF9jYXNlX2RvY3VtZW50KTtcbiAgICB9LFxuICAgIGVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgIHNob3dFcnJvcigpO1xuICAgICAgc2hvd0RhdGEoKTtcbiAgICB9XG4gIH0pO1xufVxuXG52YXIgc2hvd0Vycm9yPSAoKSA9PiB7XG4gICQoXCIjYWJuXCIpLmFwcGVuZChcIjxwIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsgZm9udC1zaXplOiAxLjI1ZW0nPlVuYWJsZSB0byBsb2FkIGNvbnRlbnQuIFBsZWFzZSB0cnkgYWdhaW4uPC9wPlwiKTtcbiAgJChcIiNjb21wYW55LXRpdGxlXCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xuICAkKFwiI2Fibi10aXRsZVwiKS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbiAgJChcIiNiZy1pbmZvLXRpdGxlXCIpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xuICAkKFwiLnNpZGVibG9ja1wiKS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgYSBjYXNlIG9iamVjdCBieSBpdHMgaWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGlkIFRoZSBpZCBvZiB0aGUgY2FzZVxuICogQHJldHVybnMgQSBjYXNlIG9iamVjdFxuICovXG52YXIgZ2V0Q2FzZUJ5SWQgPSAoaWQpID0+IHtcbiAgbGV0IGRhdGEgPSBnZXRTZXNzaW9uU3RvcmFnZShcImRhdGFcIik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkYXRhW2ldLmpvYklkID09IGlkKSB7XG4gICAgICByZXR1cm4gZGF0YVtpXTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHN0b3JlcyB0aGUgZGF0YSBvYmplY3QgKHByZXZpb3VzbHkgcmV0cmlldmVkIGZyb20gSW5zb2w2IEFQSSkgaW50byBzZXNzaW9uIHN0b3JhZ2UuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGEgVGhlIGRhdGEgb2JqZWN0IGJlaW5nIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UuXG4gKi9cbnZhciBzZXRTZXNzaW9uU3RvcmFnZSA9IChkYXRhKSA9PiB7XG5cdHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oXCJkYXRhXCIsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGRhdGEgc3RvcmVkIGluIHNlc3Npb24gc3RvcmFnZSBhbmQgcGFyc2VzIGl0IGFzIGEgSlNPTiBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IENvcnJlc3BvbmRzIHdpdGggdGhlIHZhbHVlIChkYXRhKSB0aGF0IGlzIGJlaW5nIHJldHJpZXZlZFxuICovXG52YXIgZ2V0U2Vzc2lvblN0b3JhZ2UgPSAoa2V5KSA9PiB7XG4gIHJldHVybiBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZW5kZXJzIHRoZSBjYXNlIGRhdGEgb24gdG8gdGhlIHBhZ2UuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGNhc2VJZCBUaGUgaWQgb2YgdGhlIGNhc2UgdGhhdCBpcyBiZWluZyBzaG93biBvbiB0aGUgcGFnZVxuICovXG52YXIgcG9wdWxhdGVEYXRhID0gKGNhc2VJZCkgPT4ge1xuICBsZXQgZGF0YSA9IGdldENhc2VCeUlkKGNhc2VJZCk7XG4gIGxldCBzdGFydERhdGUgPSBudWxsO1xuXG4gIGlmICghZGF0YSkge1xuICAgIHNob3dFcnJvcigpO1xuICAgIHNob3dEYXRhKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZm9ybWF0IHRoZSBkYXRlXG4gIGlmIChkYXRhLmpvYlN0YXJ0RGF0ZSkge1xuICAgIGxldCByYXdEYXRlID0gbmV3IERhdGUoZGF0YS5qb2JTdGFydERhdGUpO1xuICAgIHN0YXJ0RGF0ZSA9IHJhd0RhdGUuZ2V0RGF0ZSgpKycvJysocmF3RGF0ZS5nZXRNb250aCgpKzEpKycvJytyYXdEYXRlLmdldEZ1bGxZZWFyKCk7XG4gIH1cbiAgLy8gaWYgZGF0YSBleGlzdHMsIGRpc3BsYXkgaXQgb24gdGhlIHBhZ2VcbiAgZGF0YS5qb2JuYW1lID8gKFxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJqb2JuYW1lXCIpWzBdLmlubmVySFRNTCA9IGRhdGEuam9ibmFtZSxcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiam9ibmFtZVwiKVsxXS5pbm5lckhUTUwgPSBkYXRhLmpvYm5hbWVcbiAgKSA6IChcIlwiLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbXBhbnktdGl0bGVcIikuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiKTtcbiAgZGF0YS5qb2JBQk4gPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFiblwiKS5pbm5lckhUTUwgPSBkYXRhLmpvYkFCTiA6IChcIlwiLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibi10aXRsZVwiKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCIpO1xuICBkYXRhLmpvYkFDTiA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNuXCIpLmlubmVySFRNTCA9IGRhdGEuam9iQUNOIDogKFwiXCIsIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNuLXRpdGxlXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIik7XG4gIGRhdGEuYmFja2dyb3VuZEluZm8gPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJhY2tncm91bmRpbmZvXCIpLmlubmVySFRNTCA9IGRhdGEuYmFja2dyb3VuZEluZm8gOiAoXCJcIiwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZy1pbmZvLXRpdGxlXCIpLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIik7XG4gIGRhdGEuYWRkcmVzc0Z1bGwgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpvYnR5cGVcIikuaW5uZXJIVE1MID0gYDxwPjxzdHJvbmc+QXBwb2ludG1lbnQgVHlwZTogPC9zdHJvbmc+JHtkYXRhLmpvYlR5cGVUZXh0fTwvcD5gOiBcIlwiO1xuICBzdGFydERhdGUgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcG9pbnRtZW50ZGF0ZVwiKS5pbm5lckhUTUwgPSBgPHA+PHN0cm9uZz5BcHBvaW50bWVudCBEYXRlOiA8L3N0cm9uZz4ke3N0YXJ0RGF0ZX08L3A+YDogXCJcIjtcbiAgZGF0YS5hZGRyZXNzRnVsbCA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWRkcmVzc1wiKS5pbm5lckhUTUwgPSBgPHA+PHN0cm9uZz5BZGRyZXNzOiA8L3N0cm9uZz4ke2RhdGEuYWRkcmVzc0Z1bGx9PC9wPmA6IFwiXCI7XG4gIGRhdGEuam9iQ29udGFjdE5hbWUgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpvYmNvbnRhY3RuYW1lXCIpLmlubmVySFRNTCA9IGRhdGEuam9iQ29udGFjdE5hbWUgOiBcIlwiO1xuICBkYXRhLmpvYkNvbnRhY3RFbWFpbCA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiam9iY29udGFjdGVtYWlsXCIpLmlubmVySFRNTCA9IGA8YSBocmVmPSdtYWlsdG86JHtkYXRhLmpvYkNvbnRhY3RFbWFpbH0nPiR7ZGF0YS5qb2JDb250YWN0RW1haWx9PC9hPmAgOiBcIlwiO1xuICBkYXRhLmpvYkNvbnRhY3ROdW1iZXIgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImpvYmNvbnRhY3RudW1iZXJcIikuaW5uZXJIVE1MID0gZGF0YS5qb2JDb250YWN0TnVtYmVyIDogXCJcIjtcblxuICAvLyBhZGQgZXkgcHJlZml4IHRvIFVSTFxuICBsZXQgaW5zb2w2TGluayA9IGRhdGEuY2FsbGJhY2s7XG4gIGxldCBpbmRleCA9IGluc29sNkxpbmsuaW5kZXhPZihcIi8vXCIpICsgMjtcbiAgaW5zb2w2TGluayA9IGluc29sNkxpbmsuc2xpY2UoMCwgaW5kZXgpICsgXCJleS5cIiArIGluc29sNkxpbmsuc2xpY2UoaW5kZXgpO1xuXG4gIC8vIHBvcHVsYXRlIGJ1dHRvbiB3aXRoIGxpbmsgdG8gSW5zb2w2IGNhc2UgZGV0YWlsc1xuXHQkKFwiLnRleHRibG9ja1wiKS5hcHBlbmQoXG4gICAgYDxidXR0b24gY2xhc3M9XCJidXR0b24gbW9yZS1pbmZvLWN0YSBjcmVkaXRvci1sb2dpbiBjdGFcIiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJ0ZXh0LWRlY29yYXRpb246IG5vbmVcIiBvbmNsaWNrPVwid2luZG93Lm9wZW4oJyR7aW5zb2w2TGlua30nLCAnX2JsYW5rJylcIj5cbiAgICAgIDxzcGFuPjxzdHJvbmc+VmlldyBkZXRhaWxzIGluIENyZWRpdG9yIFBvcnRhbDwvc3Ryb25nPjwvc3Bhbj5cbiAgICA8L2J1dHRvbj5gXG5cdCk7XG59XG5cbnZhciBwb3B1bGF0ZURvY3VtZW50cyA9IChmaWVsZF9jYXNlX2RvY3VtZW50KSA9PiB7XG4gIC8vIFNwbGl0IGFuZCByZW1vdmUgZW1wdHkgYXJyYXkgZWxlbWVudHMgY3JlYXRlZCBieSBzcGxpdC5cbiAgbGV0IGRvY3VtZW50QXJyYXkgPSBmaWVsZF9jYXNlX2RvY3VtZW50LnNwbGl0KFwiLCBcIikuZmlsdGVyKHIgPT4gciAhPT0gJycpO1xuICBsZXQgZmlsZUljb24gPSBcIi9pbWFnZXMvZmlsZS10ZXh0Mi5zdmdcIjtcblxuICAkKFwiI2RvY3VtZW50cy1zZWN0aW9uXCIpLmFwcGVuZChcbiAgICBgPGg1PjxzdHJvbmc+RG9jdW1lbnRzPC9zdHJvbmc+PC9oNT5gXG4gICAgKyAoKGRvY3VtZW50QXJyYXkubGVuZ3RoID4gMCkgP1xuICAgICAgYDxkaXYgY2xhc3M9XCJzZWFyY2gtbGlzdFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxuICAgICAgICAgICAgPHVsIGlkPVwiZG9jdW1lbnRzLWxpc3RcIiBzdHlsZT1cImxpc3Qtc3R5bGU6IG5vbmVcIj48L3VsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PmBcbiAgICAgIDpcbiAgICAgIGA8cD5ObyBkb2N1bWVudHMuPC9wPmApXG4gICk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkb2N1bWVudEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0IHRpdGxlID0gZG9jdW1lbnRBcnJheVtpXS5zcGxpdCgnOycpLnNoaWZ0KCkudHJpbSgpO1xuICAgIGxldCBmaWxlUGF0aCA9IGRvY3VtZW50QXJyYXlbaV0uc3BsaXQoJzsnKS5wb3AoKS50cmltKCk7XG4gICAgbGV0IGZpbGVFeHRlbnNpb24gPSBmaWxlUGF0aC5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuXG4gICAgaWYgKGZpbGVFeHRlbnNpb24gPT09ICdkb2MnIHx8IGZpbGVFeHRlbnNpb24gPT09ICdkb2N4Jykge1xuICAgICAgZmlsZUljb24gPSBcIi9pbWFnZXMvZmlsZS10ZXh0Mi5zdmdcIjtcbiAgICB9IGVsc2UgaWYgKGZpbGVFeHRlbnNpb24gPT09ICdwZGYnKSB7XG4gICAgICBmaWxlSWNvbiA9IFwiL2ltYWdlcy9maWxlLXBkZi5zdmdcIjtcbiAgICB9IGVsc2UgaWYgKGZpbGVFeHRlbnNpb24gPT09ICdjc3YnIHx8IGZpbGVFeHRlbnNpb24gPT09ICd4bHMnIHx8IGZpbGVFeHRlbnNpb24gPT09ICd4bHN4Jykge1xuICAgICAgZmlsZUljb24gPSBcIi9pbWFnZXMvdGFibGUuc3ZnXCI7XG4gICAgfVxuXG4gICAgJChcIiNkb2N1bWVudHMtbGlzdFwiKS5hcHBlbmQoXG4gICAgICBgPGxpIGNsYXNzPVwiaXRlbXNcIj5cbiAgICAgICAgPGltZyBjbGFzcz1cImZpbGUtaWNvblwiIHNyYz0ke2ZpbGVJY29ufT5cbiAgICAgICAgPGEgY2xhc3M9XCJsaW5rXCIgaHJlZj1cIiR7cHJvY2Vzcy5lbnYuUk9PVF9VUkx9JHtmaWxlUGF0aH1cIiB0YXJnZXQ9XCJfYmxhbmtcIiBkb3dubG9hZD48cCBjbGFzcz1cImRvY3VtZW50VGl0bGVcIj4ke3RpdGxlfTwvcD48L2E+XG4gICAgICA8L2xpPmBcbiAgICApXG4gIH1cbn1cblxuLyoqXG4gKiBPbmNlIHRoZSBkYXRhIGhhcyBiZWVuIHJlbmRlcmVkLCB0aGlzIGZ1bmN0aW9uIHJlbW92ZXMgdGhlIGxvYWRpbmcgaWNvbiBhbmQgc2hvd3MgdGhlIGNvbnRlbnQgb24gdGhlIHBhZ2UuXG4gKi9cbnZhciBzaG93RGF0YSA9ICgpID0+IHtcbiAgJCgnLmNvbnRhaW5lci1jYXNlLWRldGFpbHMnKS5zaG93KCk7XG4gICQoJy5mb290ZXItYm90dG9tJykuc2hvdygpO1xuICAkKCcuZm9vdGVyLXRvcCcpLnNob3coKTtcbiAgJCgnLmxvYWRlcicpLmhpZGUoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDYXNlRGV0YWlscztcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RydWN0b3JcbnZhciBDb250ZW50T3ZlcmxheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAkKCcuY29udGVudC1vdmVybGF5JykuY2xpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAkKCcub3ZlcmxheS1hY3RpdmUnKS5yZW1vdmVDbGFzcygnb3ZlcmxheS1hY3RpdmUnKTtcbiAgICAgICAgJCgnLm92ZXJsYXktYWN0aXZlLWZpbHRlcnMnKS5yZW1vdmVDbGFzcygnb3ZlcmxheS1hY3RpdmUtZmlsdGVycycpO1xuICAgIH0pXG5cbiAgICAkKGRvY3VtZW50KS5rZXl1cChmdW5jdGlvbiAoZSkge1xuICAgICAgICBpZiAoZS5rZXkgPT09IFwiRXNjYXBlXCIpIHsgLy8gZXNjYXBlIGtleSBtYXBzIHRvIGtleWNvZGUgYDI3YFxuICAgICAgICAgICAgJCgnLm92ZXJsYXktYWN0aXZlJykucmVtb3ZlQ2xhc3MoJ292ZXJsYXktYWN0aXZlJyk7XG4gICAgICAgICAgICAkKCcub3ZlcmxheS1hY3RpdmUtZmlsdGVycycpLnJlbW92ZUNsYXNzKCdvdmVybGF5LWFjdGl2ZS1maWx0ZXJzJyk7IFxuXG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ29udGVudE92ZXJsYXk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgRHJvcERvd25Cb3ggPSBmdW5jdGlvbiAoKSB7XG4gICAgJCgnYm9keScpLm9uKCdjbGljaycsICcuZHJvcC1kb3duLWJveC10b2dnbGUsIC5kcm9wLWRvd24tYm94LWNvbnRhaW5lciAuY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICgkKHRoaXMpLmNsb3Nlc3QoJy5kcm9wLWRvd24tYm94LWNvbnRhaW5lcicpLmZpbmQoJy5kcm9wLWRvd24tYm94JykuaGFzQ2xhc3MoJ292ZXJsYXktYWN0aXZlJykpIHtcbiAgICAgICAgICAgIC8vICQodGhpcykucmVtb3ZlQ2xhc3MoJ292ZXJsYXktYWN0aXZlJyk7XG4gICAgICAgICAgICAkKCcub3ZlcmxheS1hY3RpdmUnKS5yZW1vdmVDbGFzcygnb3ZlcmxheS1hY3RpdmUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoJ292ZXJsYXktYWN0aXZlJyk7XG4gICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5kcm9wLWRvd24tYm94LWNvbnRhaW5lcicpLmFkZENsYXNzKCdvdmVybGF5LWFjdGl2ZScpO1xuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuZHJvcC1kb3duLWJveC1jb250YWluZXInKS5maW5kKCcuZHJvcC1kb3duLWJveCcpLmFkZENsYXNzKCdvdmVybGF5LWFjdGl2ZScpO1xuICAgICAgICAgICAgJCgnLmNvbnRlbnQtb3ZlcmxheScpLmFkZENsYXNzKCdvdmVybGF5LWFjdGl2ZScpO1xuICAgICAgICAgICAgJCgnYm9keScpLmFkZENsYXNzKCdvdmVybGF5LWFjdGl2ZScpO1xuICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuZHJvcC1kb3duLWJveC1jb250YWluZXInKS5maW5kKCcuZm9jdXMtb24tb3BlbicpLmZvY3VzKCk7XG5cbiAgICAgICAgfVxuICAgIH0pXG5cblxuXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERyb3BEb3duQm94O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBDb25zdHJ1Y3Rvci5cbnZhciBGaXhMaW5rcyA9IGZ1bmN0aW9uKCkge1xuXG4gIGZ1bmN0aW9uIEZpeExpbmtzRnVuY3Rpb24gKCkge1xuICAgIC8vIFR1cm4gdGhlc2UgbGlua3MgaW4gdG8gQ01TIGFic29sdXRlIGxpbmtzLlxuICAgICQoXCJhW2hyZWZePScvc2l0ZXMvZGVmYXVsdC9maWxlcyddXCIpLmVhY2goZnVuY3Rpb24gKCl7IFxuICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICR0aGlzLmF0dHIoJ2hyZWYnLCB3aW5kb3cuaW5zb2x2ZW5jeV9jbXNfcm9vdF91cmxfbm9fc2xhc2ggKyAkdGhpcy5hdHRyKCdocmVmJykpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVhY3QgdG8gQWpheCBldmVudHMuXG4gIGlmICghRml4TGlua3MuaGFzX2FscmVhZHlfcnVuKSB7XG4gICAgJChkb2N1bWVudCkuYWpheENvbXBsZXRlKGZ1bmN0aW9uKCBldmVudCwgeGhyLCBzZXR0aW5ncyApIHtcbiAgICAgIEZpeExpbmtzRnVuY3Rpb24oKTtcbiAgICB9KTtcbiAgICBGaXhMaW5rcy5oYXNfYWxyZWFkeV9ydW4gPSB0cnVlO1xuICB9XG4gIFxuICAvLyBGaXJzdCB0aW1lIHJ1bi5cbiAgRml4TGlua3NGdW5jdGlvbigpO1xufTtcbi8vIEluaXRpYWxpc2Ugc3RhdGljIHZhcmlhYmxlLlxuRml4TGlua3MuaGFzX2FscmVhZHlfcnVuID0gZmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gRml4TGlua3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgRm9vdGVyQm90dG9tID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9ICdmb290ZXItYm90dG9tJztcblxuICBqUXVlcnkuYWpheCh7XG4gICAgdXJsOiBgJHtwcm9jZXNzLmVudi5ST09UX0FQSX1mb290ZXJgLFxuICAgIHR5cGU6IFwiZ2V0XCIsXG4gICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7XG4gICAgICBwb3B1bGF0ZURhdGEoZGF0YVswXSk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAkKFwiI2Zvb3RlcmJvZHlcIikuaHRtbChcIlVuYWJsZSB0byBsb2FkIGNvbnRlbnQuIFBsZWFzZSB0cnkgYWdhaW4uXCIpO1xuICAgICAgJChcIiNmb290ZXJib2R5XCIpLmNzcyhcImZvbnQtc2l6ZVwiLCBcIjEuMjVlbVwiKTtcbiAgICAgICQoXCIjZm9vdGVyYm9keVwiKS5jc3MoXCJ0ZXh0LWFsaWduXCIsIFwiY2VudGVyXCIpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyB0aGUgZm9vdGVyIGRhdGEgb24gdG8gdGhlIHBhZ2VcbiAqIFxuICogQHBhcmFtIGRhdGFPYmogVGhlIGZvb3RlciBvYmplY3QgdG8gYmUgcmVuZGVyZWRcbiAqL1xudmFyIHBvcHVsYXRlRGF0YSA9IChkYXRhT2JqKSA9PiB7XG4gICQoXCIjZm9vdGVyYm9keVwiKS5odG1sKGRhdGFPYmouYm9keSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRm9vdGVyQm90dG9tO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBDb25zdHJ1Y3RvclxudmFyIEZvb3RlclRvcCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSAnZm9vdGVyLXRvcCc7XG5cbiAgalF1ZXJ5LmFqYXgoe1xuICAgIHVybDogYCR7cHJvY2Vzcy5lbnYuUk9PVF9BUEl9Y29udGFjdC11c2AsXG4gICAgdHlwZTogXCJnZXRcIixcbiAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXtcbiAgICAgIHBvcHVsYXRlRGF0YShkYXRhWzBdKTtcbiAgICB9LFxuICAgIGVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICQoXCIjY29udGFjdHVzYm9keVwiKS5odG1sKFwiVW5hYmxlIHRvIGxvYWQgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi5cIik7XG4gICAgICAkKFwiI2NvbnRhY3R1c2JvZHlcIikuY3NzKFwiY29sb3JcIiwgXCJ3aGl0ZVwiKTtcbiAgICAgICQoXCIjY29udGFjdHVzYm9keVwiKS5jc3MoXCJmb250LXNpemVcIiwgXCIxLjI1ZW1cIik7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZW5kZXJzIHRoZSBmb290ZXIgZGF0YSBvbiB0byB0aGUgcGFnZVxuICogXG4gKiBAcGFyYW0gZGF0YU9iaiBUaGUgZm9vdGVyIG9iamVjdCB0byBiZSByZW5kZXJlZFxuICovXG52YXIgcG9wdWxhdGVEYXRhID0gKGRhdGFPYmopID0+IHtcbiAgJChcIiNjb250YWN0dXNib2R5XCIpLmh0bWwoZGF0YU9iai5ib2R5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGb290ZXJUb3A7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgTG9hZGVyID0gZnVuY3Rpb24gKCkge1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2FkZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgTG9naW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgJCgnLmNyZWRpdG9yLWxvZ2luLWN0YScpLmNsaWNrKGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICQoJy5vdmVybGF5LWFjdGl2ZScpLnJlbW92ZUNsYXNzKCdvdmVybGF5LWFjdGl2ZScpO1xuICAgICAgICAkKCcubG9naW4nKS50b2dnbGVDbGFzcygnb3ZlcmxheS1hY3RpdmUnKTtcblxuICAgICAgICAkKCcuY29udGVudC1vdmVybGF5JykuYWRkQ2xhc3MoJ292ZXJsYXktYWN0aXZlJyk7XG4gICAgICAgICQoJ2JvZHknKS5hZGRDbGFzcygnb3ZlcmxheS1hY3RpdmUnKTtcbiAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnb3ZlcmxheS1hY3RpdmUnKTtcbiAgICB9KVxuXG4gICAgJCgnLmxvZ2luIC5jbG9zZScpLmNsaWNrKGZ1bmN0aW9uICgkZXZlbnQpIHtcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICQoJy5vdmVybGF5LWFjdGl2ZScpLnJlbW92ZUNsYXNzKCdvdmVybGF5LWFjdGl2ZScpO1xuICAgIH0pXG5cbiAgICAkKCcubG9naW4gZm9ybScpLnN1Ym1pdChmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoJCgnLmxvZ2luIGZvcm0gaW5wdXQuZW1haWwnKS52YWwoKSAmJiAkKCcubG9naW4gZm9ybSBpbnB1dC5wYXNzd29yZCcpLnZhbCgpKSB7XG4gICAgICAgICAgICBpZiAoJCgnLmxvZ2luIGZvcm0gaW5wdXQuZW1haWwnKS52YWwoKSA9PT0gJ2F0bycpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICcvc2VjdXJlZC9hdG8vJ1xuICAgICAgICAgICAgfSBlbHNlIGlmICgkKCcubG9naW4gZm9ybSBpbnB1dC5lbWFpbCcpLnZhbCgpID09PSAnZmVnJykge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9zZWN1cmVkL2ZlZy8nXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCQoJy5sb2dpbiBmb3JtIGlucHV0LmVtYWlsJykudmFsKCkgPT09ICdhbnknKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaHR0cHM6Ly9leS5jcmVkaXRvcnMuYWNjb3VudGFudHMvQWNjb3VudC9Mb2dpbidcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJCgnLmxvZ2luIC5lcnJvcicpLmFkZENsYXNzKCdkaXNwbGF5Jyk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICQoJy5sb2dpbiAuZXJyb3InKS5yZW1vdmVDbGFzcygnZGlzcGxheScpO1xuXG4gICAgICAgICAgICAgICAgfSwgNTAwMClcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgJCgnLmxvZ2luIC5lcnJvcicpLmFkZENsYXNzKCdkaXNwbGF5Jyk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAkKCcubG9naW4gLmVycm9yJykucmVtb3ZlQ2xhc3MoJ2Rpc3BsYXknKTtcblxuICAgICAgICAgICAgfSwgNTAwMClcbiAgICAgICAgfVxuXG5cbiAgICB9KVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMb2dpbjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RydWN0b3JcbnZhciBSZWRpcmVjdCA9IGZ1bmN0aW9uKCkge1xuICAvLyBpZigkKCcucmVkaXJlY3QtdG8tcHVibGljJykubGVuZ3RoID4gMCkge1xuICAvLyAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJy9wb3J0YWwvJ1xuICAvLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBDb25zdHJ1Y3RvclxudmFyIFRlYW1zID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9ICdjb25uZWN0LndpdGgudXMnO1xuXG4gIC8vIGdldCBjb25uZWN0LXdpdGgtdXMgYm9keSB0ZXh0IGZyb20gQVBJXG4gIGpRdWVyeS5hamF4KHtcbiAgICB1cmw6IGAke3Byb2Nlc3MuZW52LlJPT1RfQVBJfWNvbm5lY3Qtd2l0aC11c2AsXG4gICAgdHlwZTogXCJnZXRcIixcbiAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgJChcIiNjb25uZWN0LXdpdGgtdXMtYm9keVwiKS5odG1sKGRhdGFbMF0uYm9keSk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAgICQoXCIjY29ubmVjdC13aXRoLXVzLWJvZHlcIikuYXBwZW5kKFwiPHAgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+VW5hYmxlIHRvIGxvYWQgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi48L3A+XCIpO1xuICAgIH1cbiAgfSk7IFxuXG4gIGpRdWVyeS5hamF4KHtcbiAgICB1cmw6IGAke3Byb2Nlc3MuZW52LlJPT1RfQVBJfWNvbm5lY3QtdXNgLFxuICAgIHR5cGU6IFwiZ2V0XCIsXG4gICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgIGxldCBjbGVhbmVkRGF0YSA9IG9yZ2FuaXNlRGF0YUJ5TG9jYXRpb24oZGF0YSk7XG4gICAgICAgIHBvcHVsYXRlRGF0YShjbGVhbmVkRGF0YSk7XG4gICAgICAgIHJlbmRlckNhcm91c2VsKGNsZWFuZWREYXRhKTtcbiAgICAgICAgc2hvd0RhdGEoKTtcbiAgICB9LFxuICAgIGVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgJChcIiN0ZWFtLWxpc3RpbmdcIikuYXBwZW5kKFwiPHAgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6IDEuMjVlbSc+VW5hYmxlIHRvIGxvYWQgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi48L3A+XCIpO1xuICAgICAgICBzaG93RGF0YSgpO1xuICAgIH1cbiAgfSk7IFxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCByZS1vcmdhbmlzZXMgdGhlIHBlb3BsZSBkYXRhIGludG8gYSBkaWN0aW9uYXJ5IHdoZXJlXG4gKiB0aGUga2V5IGlzIHRoZSBsb2NhdGlvbi5cbiAqIFxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBcbiAqIEByZXR1cm5zIEEgRGljdGlvbmFyeSB3aGVyZSB0aGUga2V5cyBhcmUgdGhlIGxvY2F0aW9ucyBhbmQgdGhlIGl0ZW1cbiAqIGlzIGFuIGFycmF5IG9mIHBlb3BsZSBiYXNlZCBhdCB0aGF0IGxvY2F0aW9uLlxuICovXG52YXIgb3JnYW5pc2VEYXRhQnlMb2NhdGlvbiA9IChkYXRhKSA9PiB7XG4gICAgbGV0IG9yZ2FuaXNlZERhdGEgPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHBlcnNvbiA9IGRhdGFbaV07XG4gICAgICAgIGlmIChwZXJzb24ubG9jYXRpb24gaW4gb3JnYW5pc2VkRGF0YSkge1xuICAgICAgICAgICAgb3JnYW5pc2VkRGF0YVtwZXJzb24ubG9jYXRpb25dLnB1c2gocGVyc29uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9yZ2FuaXNlZERhdGFbcGVyc29uLmxvY2F0aW9uXSA9IFtwZXJzb25dO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvcmdhbmlzZWREYXRhO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyB0aGUgVGVhbSBkYXRhIG9uIHRvIHRoZSBwYWdlLlxuICogXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBhcnJheSBvZiB0ZWFtIG1lbWJlciBvYmplY3RzIHRvIGJlIHJlbmRlcmVkIGNvbnRhaW5pbmcgYWxsIHRlYW0gbWVtYmVycyBhbmQgdGhlaXIgbG9jYXRpb25zLlxuICovXG52YXIgcG9wdWxhdGVEYXRhID0gKGRhdGEpID0+IHtcbiAgZm9yIChsZXQgbG9jYXRpb24gaW4gZGF0YSkge1xuICAgIGxldCB0ZWFtTWVtYmVycyA9IGBgO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVtsb2NhdGlvbl0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHBlcnNvbiA9IGRhdGFbbG9jYXRpb25dW2ldO1xuICAgICAgICBsZXQgaW1hZ2VBcnJheSA9IGRhdGFbbG9jYXRpb25dW2ldLmZpZWxkX3Byb2Zlc3Npb25hbF9oZWFkc2hvdC5zcGxpdChcIlxcXCJcIik7XG4gICAgICAgIGxldCBpbWFnZUVsZW1lbnQgPSBkYXRhW2xvY2F0aW9uXVtpXS5maWVsZF9wcm9mZXNzaW9uYWxfaGVhZHNob3Q7XG4gICAgICAgIGxldCBpbWFnZVNyYyA9IGltYWdlRWxlbWVudC5yZXBsYWNlKC8uKnNyYz1cIihbXlwiXSopXCIuKi8sICckMScpLnRyaW0oKTtcbiAgICAgICAgbGV0IGltYWdlQXR0ciA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGogPSAyOyBqIDwgaW1hZ2VBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKGogPT09IDcpIHtcbiAgICAgICAgICAgICAgICBpbWFnZUF0dHIgPSBpbWFnZUF0dHIuY29uY2F0KGBcIiR7aW1hZ2VBcnJheVtqXX1cImApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbWFnZUF0dHIgPSBpbWFnZUF0dHIuY29uY2F0KGltYWdlQXJyYXlbal0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRlYW1NZW1iZXJzICs9IFxuICAgICAgICBgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICAgIDxhIGhyZWY9XCIvcGVvcGxlLmh0bWw/aWQ9JHtwZXJzb24uaWR9XCI+PC9hPlxuICAgICAgICAgICAgPGltZyBjbGFzcz1cInBvcnRyYWl0XCIgc3JjPScke3Byb2Nlc3MuZW52LlJPT1RfVVJMfSR7aW1hZ2VTcmN9JyAke2ltYWdlQXR0cn1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtX19vdmVybGF5XCI+XG4gICAgICAgICAgICAgICAgPGgzPiR7cGVyc29uLm5hbWV9PC9oMz5cbiAgICAgICAgICAgICAgICA8cD4ke3BlcnNvbi5wb3NpdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1fX2JvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+JHtwZXJzb24uc2hvcnRfZGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgICAgICAgICA8cD4ke3BlcnNvbi5sb2NhdGlvbn08L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIGA7XG4gICAgfVxuXG4gICAgJChcIiN0ZWFtLWxpc3RpbmdcIikuYXBwZW5kKFxuICAgICAgICBgPGRpdiBjbGFzcz1cInRlYW0tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGgyPiR7bG9jYXRpb259PC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkXCI+XG4gICAgICAgICAgICAgICAgJHt0ZWFtTWVtYmVyc31cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgPC9kaXY+YFxuICAgICAgKVxuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZW5kZXJzIHRoZSBjYXJvdXNlbHMgZm9yIGVhY2ggbG9jYXRpb24uXG4gKiBcbiAqL1xudmFyIHJlbmRlckNhcm91c2VsID0gKGRhdGEpID0+IHtcbiAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJncmlkXCIpO1xuXG4gICAgbGV0IG51bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVsZW1baV0uY2xhc3NMaXN0LmFkZChgZ3JpZC0ke251bX1gKTtcbiAgICAgICAgbnVtICs9IDE7XG4gICAgfVxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWxlbS5sZW5ndGg7IGorKykgeyBcbiAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpIDwgNTAwKSB7XG4gICAgICAgICAgICAkKGAuZ3JpZC0ke2p9YCkuc2xpY2soe1xuICAgICAgICAgICAgICAgIHByZXZBcnJvdzogJzxidXR0b24gY2xhc3M9XCJzbGlkZS1hcnJvdyBwcmV2LWFycm93XCI+PC9idXR0b24+JyxcbiAgICAgICAgICAgICAgICBuZXh0QXJyb3c6ICc8YnV0dG9uIGNsYXNzPVwic2xpZGUtYXJyb3cgbmV4dC1hcnJvd1wiPjwvYnV0dG9uPicsXG4gICAgICAgICAgICAgICAgc2xpZGVzVG9TaG93OiAxLFxuICAgICAgICAgICAgICAgIHNsaWRlc1RvU2Nyb2xsOiAxLFxuICAgICAgICAgICAgICAgIHJvd3M6IDEsXG4gICAgICAgICAgICAgICAgYXJyb3dzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluZmluaXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhenlMb2FkOiAncHJvZ3Jlc3NpdmUnLFxuICAgICAgICAgICAgICAgIHNwZWVkOiA3MDAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDcwMCkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMoZGF0YSlbal0ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICQoYC5ncmlkLSR7an1gKS5zbGljayh7XG4gICAgICAgICAgICAgICAgICAgIHByZXZBcnJvdzogJzxidXR0b24gY2xhc3M9XCJzbGlkZS1hcnJvdyBwcmV2LWFycm93XCI+PC9idXR0b24+JyxcbiAgICAgICAgICAgICAgICAgICAgbmV4dEFycm93OiAnPGJ1dHRvbiBjbGFzcz1cInNsaWRlLWFycm93IG5leHQtYXJyb3dcIj48L2J1dHRvbj4nLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZXNUb1Nob3c6IDIsXG4gICAgICAgICAgICAgICAgICAgIHNsaWRlc1RvU2Nyb2xsOiAxLFxuICAgICAgICAgICAgICAgICAgICByb3dzOiAxLFxuICAgICAgICAgICAgICAgICAgICBhcnJvd3M6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGluZmluaXRlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBsYXp5TG9hZDogJ3Byb2dyZXNzaXZlJyxcbiAgICAgICAgICAgICAgICAgICAgc3BlZWQ6IDcwMCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKGRhdGEpW2pdLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICAkKGAuZ3JpZC0ke2p9YCkuc2xpY2soe1xuICAgICAgICAgICAgICAgICAgICBwcmV2QXJyb3c6ICc8YnV0dG9uIGNsYXNzPVwic2xpZGUtYXJyb3cgcHJldi1hcnJvd1wiPjwvYnV0dG9uPicsXG4gICAgICAgICAgICAgICAgICAgIG5leHRBcnJvdzogJzxidXR0b24gY2xhc3M9XCJzbGlkZS1hcnJvdyBuZXh0LWFycm93XCI+PC9idXR0b24+JyxcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVzVG9TaG93OiAzLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZXNUb1Njcm9sbDogMSxcbiAgICAgICAgICAgICAgICAgICAgcm93czogMSxcbiAgICAgICAgICAgICAgICAgICAgYXJyb3dzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBpbmZpbml0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbGF6eUxvYWQ6ICdwcm9ncmVzc2l2ZScsXG4gICAgICAgICAgICAgICAgICAgIHNwZWVkOiA3MDAsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtW2pdLmNsYXNzTGlzdC5hZGQoJ25vLWNhcm91c2VsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gICBcbiAgICAgICAgXG4gICAgfVxufVxuXG4vKipcbiAqIE9uY2UgdGhlIGRhdGEgaGFzIGJlZW4gcmVuZGVyZWQsIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgbG9hZGluZyBpY29uIGFuZCBzaG93cyB0aGUgY29udGVudCBvbiB0aGUgcGFnZS5cbiAqL1xudmFyIHNob3dEYXRhID0gKCkgPT4ge1xuICAgICQoJy5jb25uZWN0Jykuc2hvdygpO1xuICAgICQoJy5mb290ZXItYm90dG9tJykuc2hvdygpO1xuICAgICQoJy5mb290ZXItdG9wJykuc2hvdygpO1xuICAgICQoJy5sb2FkZXInKS5oaWRlKCk7XG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSBUZWFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RydWN0b3JcbnZhciBDdXJyZW50Q2FzZXMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5uYW1lID0gJ2N1cnJlbnQuY2FzZXMnO1xuXG5cdC8vIGdldCBjdXJyZW50IGNhc2VzIGRhdGFcblx0alF1ZXJ5LmFqYXgoe1xuXHRcdHVybDogYCR7cHJvY2Vzcy5lbnYuUk9PVF9JTlNPTDZfQVBJfVB1YmxpY0pvYnNGb3JQcmFjdGljZS9leWAsXG5cdFx0dHlwZTogXCJnZXRcIixcblx0XHRzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7XG5cdFx0XHRzZXRTZXNzaW9uU3RvcmFnZShkYXRhKTtcblx0XHRcdGNhc2VEYXRhID0gZGF0YTtcblx0XHRcdHBvcHVsYXRlRmlsdGVycygpO1xuXHRcdFx0cG9wdWxhdGVDYXNlcygpO1xuXHRcdFx0c2V0UGFnZUJ1dHRvblZpc2liaWxpdHkoJ2Nhc2VzJyk7XG5cdFx0XHQkKCcubG9hZGVyJykuaGlkZSgpO1xuXHRcdH0sXG5cdFx0ZXJyb3I6IGZ1bmN0aW9uKCkge1xuXHRcdFx0JChcIiNjYXNlcy1saXN0XCIpLmFwcGVuZChcIjxwIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+VW5hYmxlIHRvIGxvYWQgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi48L3A+XCIpO1xuXHRcdFx0JCgnLmxvYWRlcicpLmhpZGUoKTtcblx0XHR9XG5cdH0pO1xuXHRqUXVlcnkuYWpheCh7XG5cdFx0dXJsOiBgJHtwcm9jZXNzLmVudi5ST09UX0FQSX1kaXNjbGFpbWVyYCxcblx0XHR0eXBlOiBcImdldFwiLFxuXHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpe1xuXHRcdFx0cG9wdWxhdGVEaXNjbGFpbWVyKGRhdGFbMF0pO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gc2V0IGluaXRpYWwgcGFnZSBudW1iZXIgdG8gMVxuXHQkKFwiI2N1cnJlbnQtcGFnZS1udW1iZXJcIikuaHRtbChcIjFcIik7XG5cblx0Ly8gaW5pdGlhbGlzZSBhbGwgY2hlY2tib3hlcyBhcyBjaGVja2VkXG5cdCQoXCJpbnB1dFt0eXBlPSdjaGVja2JveCddXCIpLmVhY2goZnVuY3Rpb24oKXtcblx0XHQkKHRoaXMpLnByb3AoXCJjaGVja2VkXCIsIHRydWUpO1xuXHR9KTtcblxuXHQvLyBjaGVjay91bmNoZWNrIGFsbCBjaGVja2JveGVzIHdoZW4gU2VsZWN0IEFsbCBvcHRpb24gaXMgY2hlY2tlZFxuXHQkKFwiI2FsbGxvY2F0aW9uc1wiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2hlY2tlZCA9ICQodGhpcykuaXMoJzpjaGVja2VkJyk7XG5cdFx0aWYgKGNoZWNrZWQpIHtcblx0XHRcdCQoXCIubG9jYXRpb24tY2hlY2tib3hcIikuZWFjaChmdW5jdGlvbigpe1xuXHRcdFx0XHQkKHRoaXMpLnByb3AoXCJjaGVja2VkXCIsdHJ1ZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHQkKFwiLmxvY2F0aW9uLWNoZWNrYm94XCIpLmVhY2goZnVuY3Rpb24oKXtcblx0XHRcdFx0JCh0aGlzKS5wcm9wKFwiY2hlY2tlZFwiLGZhbHNlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0JChcIiNhbGx0eXBlc1wiKS5vbihcImNoYW5nZVwiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2hlY2tlZCA9ICQodGhpcykuaXMoJzpjaGVja2VkJyk7XG5cdFx0aWYgKGNoZWNrZWQpIHtcblx0XHRcdCQoXCIudHlwZS1jaGVja2JveFwiKS5lYWNoKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdCQodGhpcykucHJvcChcImNoZWNrZWRcIix0cnVlKTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdCQoXCIudHlwZS1jaGVja2JveFwiKS5lYWNoKGZ1bmN0aW9uKCl7XG5cdFx0XHRcdCQodGhpcykucHJvcChcImNoZWNrZWRcIixmYWxzZSk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHN0b3JlcyB0aGUgZGF0YSBvYmplY3QgKHByZXZpb3VzbHkgcmV0cmlldmVkIGZyb20gSW5zb2w2IEFQSSkgaW50byBzZXNzaW9uIHN0b3JhZ2UuXG4gKiBcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhIFRoZSBkYXRhIG9iamVjdCBiZWluZyBzdG9yZWQgaW4gc2Vzc2lvbiBzdG9yYWdlLlxuICovXG52YXIgc2V0U2Vzc2lvblN0b3JhZ2UgPSAoZGF0YSkgPT4ge1xuXHRzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFwiZGF0YVwiLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBkYXRhIHN0b3JlZCBpbiBzZXNzaW9uIHN0b3JhZ2UgYW5kIHBhcnNlcyBpdCBhcyBhIEpTT04gb2JqZWN0XG4gKiBcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgQ29ycmVzcG9uZHMgd2l0aCB0aGUgdmFsdWUgKGRhdGEpIHRoYXQgaXMgYmVpbmcgcmV0cmlldmVkXG4gKi9cbnZhciBnZXRTZXNzaW9uU3RvcmFnZSA9IChrZXkpID0+IHtcblx0cmV0dXJuIEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShrZXkpKTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbmRlcnMgMTAgY2FzZXMgb24gdG8gdGhlIHBhZ2UuXG4gKiBcbiAqL1xudmFyIHBvcHVsYXRlQ2FzZXMgPSAoKSA9PiB7XG5cdC8vIGdldCBkYXRhIGZyb20gc2Vzc2lvbiBzdG9yYWdlXG5cdGxldCBkYXRhID0gZ2V0U2Vzc2lvblN0b3JhZ2UoXCJkYXRhXCIpO1xuXHRsZXQgbG9jYXRpb25BcnJheSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJpbmZvMVwiKTtcblx0bGV0IHR5cGVBcnJheSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJpbmZvMlwiKTtcblxuXHQvLyBkaXNwbGF5IGEgcGFnZSBvZiBjYXNlc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGggJiYgaSA8IDEwOyBpKyspIHtcblx0XHQkKFwiI2Nhc2VzLWxpc3RcIikuYXBwZW5kKFxuXHRcdFx0YDxsaSBjbGFzcz1cIml0ZW1zIGFsbCAke2RhdGFbaV0uYWRkcmVzc1N0YXRlfVwiPlxuXHRcdFx0XHQ8YSBjbGFzcz1cImxpbmtcIiBvbmNsaWNrPVwiZGlzY2xhaW1lcigke2RhdGFbaV0uam9iSWR9KVwiPlxuXHRcdFx0XHRcdDxoNCBjbGFzcz1cInRpdGxlXCI+JHtkYXRhW2ldLmpvYm5hbWV9PC9oND5cblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaW5mb1wiPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJpbmZvMVwiPiR7ZGF0YVtpXS5hZGRyZXNzU3RhdGV9LCAke2RhdGFbaV0uYWRkcmVzc0NvdW50cnl9PC9zcGFuPlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJpbmZvMlwiPiR7ZGF0YVtpXS5qb2JUeXBlVGV4dH08L3NwYW4+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvYT5cblx0XHRcdDwvbGk+YFxuXHRcdCk7XG4gICAgfVxuXG5cdC8vIHByZXZlbnQgbnVsbCB2YWx1ZXMgZnJvbSBiZWluZyBkaXNwbGF5ZWRcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhdGlvbkFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKCFkYXRhW2ldLmFkZHJlc3NTdGF0ZSB8fCAhZGF0YVtpXS5hZGRyZXNzQ291bnRyeSkge1xuXHRcdFx0bG9jYXRpb25BcnJheVtpXS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cdFx0fVxuXHRcdGlmICghZGF0YVtpXS5qb2JUeXBlVGV4dCkge1xuXHRcdFx0dHlwZUFycmF5W2ldLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcblx0XHR9XG5cdH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbmRlcnMgdGhlIGRpc2NsYWltZXIgcG9wdXAuXG4gKiBcbiAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhT2JqIFRoZSBkaXNjbGFpbWVyIG9iamVjdCB0byBiZSByZW5kZXJlZC5cbiAqL1xudmFyIHBvcHVsYXRlRGlzY2xhaW1lciA9IChkYXRhT2JqKSA9PiB7XG5cdCQoXCIjZGlzY2xhaW1lcnRpdGxlXCIpLmh0bWwoZGF0YU9iai50aXRsZSk7XG5cdCQoXCIjZGlzY2xhaW1lcmJvZHlcIikuaHRtbChkYXRhT2JqLmJvZHkpO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyB0aGUgY2F0ZWdvcnkgZmlsdGVycyAobG9jYXRpb24gYW5kIGFwcG9pbnRtZW50IHR5cGUpXG4gKiBcbiAqL1xudmFyIHBvcHVsYXRlRmlsdGVycyA9ICgpID0+IHtcblx0Ly8gYWRkIGxvY2F0aW9uIGZpbHRlcnNcblx0bGV0IGRhdGEgPSBnZXRTZXNzaW9uU3RvcmFnZShcImRhdGFcIik7XG5cdGxldCBsb2NhdGlvbnMgPSBbXTtcblxuXHQvLyBhZGQgZWFjaCBsb2NhdGlvbiBjaGVja2JveFxuXHRmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoZGF0YVtpXS5hZGRyZXNzU3RhdGUgJiYgIWxvY2F0aW9ucy5pbmNsdWRlcyhkYXRhW2ldLmFkZHJlc3NTdGF0ZSkpIHtcblx0XHRcdGxvY2F0aW9ucy5wdXNoKGRhdGFbaV0uYWRkcmVzc1N0YXRlKTtcblx0XHRcdCQoXCIjbG9jYXRpb24tZmlsdGVyc1wiKS5hcHBlbmQoXG5cdFx0XHRcdGA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuXHRcdFx0XHRcdDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImxvY2F0aW9uLWNoZWNrYm94XCIgaWQ9XCIke2RhdGFbaV0uYWRkcmVzc1N0YXRlfVwiIHZhbHVlPVwiJHtkYXRhW2ldLmFkZHJlc3NTdGF0ZX1cIiBvbmNoYW5nZT1cImNoZWNrVW5jaGVjaygnbG9jYXRpb24nKVwiIGNoZWNrZWQ+XG5cdFx0XHRcdFx0PGxhYmVsIGZvcj1cIiR7ZGF0YVtpXS5hZGRyZXNzU3RhdGV9XCI+JHtkYXRhW2ldLmFkZHJlc3NTdGF0ZX08L2xhYmVsPlxuXHRcdFx0XHQ8L2Rpdj5gXG5cdFx0XHQpO1xuXHRcdH1cdFx0XG4gIFx0fVxuXHQvLyBhZGQgdGhlIGFwcGx5IGJ1dHRvblxuXHQkKFwiI2xvY2F0aW9uLWZpbHRlcnNcIikuYXBwZW5kKFxuXHRcdGA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuXHRcdFx0PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBvbmNsaWNrPVwiaGlkZUZpbHRlckJveCgpXCIgdmFsdWU9XCJBcHBseVwiPlxuXHRcdDwvZGl2PmBcblx0KTtcblx0XG5cdC8vIGFkZCBhcHBvaW50bWVudCB0eXBlIGZpbHRlcnNcblx0bGV0IGFwcG9pbnRtZW50VHlwZXMgPSBbXTtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0bGV0IGpvYlR5cGUgPSBkYXRhW2ldLmpvYlR5cGVUZXh0LnJlcGxhY2UoL1xccysvZywgJy0nKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGlmIChqb2JUeXBlICYmICFhcHBvaW50bWVudFR5cGVzLmluY2x1ZGVzKGpvYlR5cGUpKSB7XG5cdFx0XHRhcHBvaW50bWVudFR5cGVzLnB1c2goam9iVHlwZSk7XG5cdFx0XHQkKFwiI2FwcG9pbnRtZW50LWZpbHRlcnNcIikuYXBwZW5kKFxuXHRcdFx0XHRgPGRpdiBjbGFzcz1cIml0ZW1cIj5cblx0XHRcdFx0XHQ8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJ0eXBlLWNoZWNrYm94XCIgaWQ9XCIke2pvYlR5cGV9XCIgdmFsdWU9XCIke2RhdGFbaV0uam9iVHlwZVRleHR9XCIgb25jaGFuZ2U9XCJjaGVja1VuY2hlY2soJ3R5cGUnKVwiIGNoZWNrZWQ+XG5cdFx0XHRcdFx0PGxhYmVsIGZvcj1cIiR7am9iVHlwZX1cIj4ke2RhdGFbaV0uam9iVHlwZVRleHR9PC9sYWJlbD5cblx0XHRcdFx0PC9kaXY+YFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHQvLyBhZGQgdGhlIGFwcGx5IGJ1dHRvblxuXHQkKFwiI2FwcG9pbnRtZW50LWZpbHRlcnNcIikuYXBwZW5kKFxuXHRcdGA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuXHRcdFx0PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBvbmNsaWNrPVwiaGlkZUZpbHRlckJveCgpXCIgdmFsdWU9XCJBcHBseVwiPlxuXHRcdDwvZGl2PmBcblx0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDdXJyZW50Q2FzZXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBVdGlsaXRpZXMgPSByZXF1aXJlKCcuLi91dGlsaXRpZXMvdXRpbGl0aWVzJyk7XG52YXIgdXRpbGl0aWVzID0gbmV3IFV0aWxpdGllcygpO1xuXG4vLyBDb25zdHJ1Y3RvclxudmFyIEVycm9yUGFnZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSAnNDA0IGVycm9yJztcblxuICAvLyBTZWUgaWYgdGhlcmUgaXMgcmVkaXJlY3QgaW4gcGxhY2UgZmlyc3QuXG4gIGNvbnN0IGN1cnJlbnRfb3JfbWF0Y2hlZF9wYXRoID0gdXRpbGl0aWVzLmdldF9wYWdlX3BhdGhfZnJvbV9tYXliZV9jdXJyZW50X3JlZGlyZWN0ZWRfcGF0aCgpO1xuICBsZXQgdGVtcGxhdGVfbWFwcGluZyA9IHtcbiAgICAvLyBEcnVwYWwgY29udGVudCB0eXBlIHRvIGh0bWwgZmlsZS5cbiAgICAnYXJ0aWNsZSc6ICdhcnRpY2xlLmRldGFpbHMuaHRtbCcsXG4gICAgJ2NhbXBhaWduJzogJ2NhbXBhaWduLmRldGFpbHMuaHRtbCcsXG4gICAgJ3BhZ2UnOiAncGVvcGxlLmRldGFpbHMuaHRtbCdcbiAgfTtcblxuICAvLyBHZXQgRHJ1cGFsIHBhZ2UgYnkgSWQgYW5kIHJlZGlyZWN0IHRoZSBoYW5kbGluZyB0ZW1wbGF0ZS5cbiAgdmFyIGRydXBhbE1hdGNoUmVjb3JkID0gbnVsbDtcbiAgdmFyIGlzX3BhZ2VfcmVkaXJlY3RlZCA9IGZhbHNlO1xuICAvLyBQYXNzIHRoZSBcImFnZWQtY2FyZVwiIHBhdGggd2l0aG91dCBmb3J3YXJkIHNsYXNoIHByZWZpeCBmb3IgZXhhbXBsZSBpblxuICAvLyBzaXRlLmNvbS9hZ2VkLWNhcmUuXG4gIGlmIChkcnVwYWxNYXRjaFJlY29yZCA9IHV0aWxpdGllcy5nZXRfcGFnZV9tZXRhZGF0YV9ieV9wYXRoKGN1cnJlbnRfb3JfbWF0Y2hlZF9wYXRoKSkge1xuICAgIGxldCBodG1sX3BhZ2VfZmlsZSA9IG51bGw7XG4gICAgaWYgKGh0bWxfcGFnZV9maWxlID0gdGVtcGxhdGVfbWFwcGluZ1tkcnVwYWxNYXRjaFJlY29yZC5jb250ZW50X3R5cGVdKSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAvJHtodG1sX3BhZ2VfZmlsZX0/cGF0aD0ke2RydXBhbE1hdGNoUmVjb3JkLnBhdGh9YDtcbiAgICAgIGlzX3BhZ2VfcmVkaXJlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmICghaXNfcGFnZV9yZWRpcmVjdGVkKSB7XG4gICAgJCgnLmxvYWRlcicpLmhpZGUoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFcnJvclBhZ2U7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgRm9ybWFsSW5zb2x2ZW5jeSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSAnZm9ybWFsLWluc29sdmVuY3knO1xuXG4gIGpRdWVyeS5hamF4KHtcbiAgICB1cmw6IGAke3Byb2Nlc3MuZW52LlJPT1RfQVBJfWhvbWVwYWdlLWNvbnRlbnRgLFxuICAgIHR5cGU6IFwiZ2V0XCIsXG4gICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7XG4gICAgICBwb3B1bGF0ZURhdGEoZGF0YVswXSk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LWRlc2NyaXB0aW9uXCIpLmFwcGVuZChcIjxwIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+VW5hYmxlIHRvIGxvYWQgY29udGVudC4gUGxlYXNlIHRyeSBhZ2Fpbi48L3A+XCIpO1xuICAgICAgc2hvd0RhdGEoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbmRlcnMgdGhlICdGb3JtYWwgaW5zb2x2ZW5jeScgY29udGVudCBvbiB0byB0aGUgcGFnZS5cbiAqIFxuICogQHBhcmFtIHtBcnJheX0gZGF0YSBUaGUgJ0Zvcm1hbCBpbnNvbHZlbmN5JyBhcnJheSB0byBiZSByZW5kZXJlZC5cbiAqL1xudmFyIHBvcHVsYXRlRGF0YSA9IChkYXRhKSA9PiB7XG4gICQoXCIjZm9ybWFsLWluc29sdmVuY3ktdGl0bGVcIikuaHRtbChkYXRhLmZvcm1hbF9pbnNvbHZlbmN5X3RpdGxlKTtcbiAgJChcIiNmb3JtYWwtaW5zb2x2ZW5jeS1kZXNjcmlwdGlvblwiKS5odG1sKGRhdGEuZm9ybWFsX2luc29sdmVuY3lfZGVzY3JpcHRpb24pO1xuXG4gIGxldCBmb3JtYWxfaW5zb2x2ZW5jeV90YWJfdGl0bGVzID0gZGF0YS5mb3JtYWxfaW5zb2x2ZW5jeV90YWJfdGl0bGUuc3BsaXQoXCI7O1wiKTtcbiAgbGV0IGZvcm1hbF9pbnNvbHZlbmN5X3RhYl9kZXNjcmlwdGlvbnMgPSBkYXRhLmZvcm1hbF9pbnNvbHZlbmN5X3RhYl9kZXNjcmlwdGlvbi5zcGxpdChcIjs7LFwiKTtcbiAgbGV0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogOTIwcHgpXCIpLm1hdGNoZXM7XG5cbiAgLy8gUmVtb3ZlIHRyYWlsaW5nIDs7IGZyb20gbGFzdCBlbGVtZW50IGluIGFycmF5XG4gIGxldCBsYXN0X2VsZW0gPSBmb3JtYWxfaW5zb2x2ZW5jeV90YWJfZGVzY3JpcHRpb25zW2Zvcm1hbF9pbnNvbHZlbmN5X3RhYl9kZXNjcmlwdGlvbnMubGVuZ3RoIC0gMV07XG4gIGlmIChsYXN0X2VsZW0uc3Vic3RyaW5nKGxhc3RfZWxlbS5sZW5ndGggLSAyKSA9PT0gXCI7O1wiKSB7XG4gICAgZm9ybWFsX2luc29sdmVuY3lfdGFiX2Rlc2NyaXB0aW9uc1tmb3JtYWxfaW5zb2x2ZW5jeV90YWJfZGVzY3JpcHRpb25zLmxlbmd0aCAtIDFdID0gbGFzdF9lbGVtLnNsaWNlKDAsIC0yKTtcbiAgfVxuXG4gIC8vIFJlbmRlciBjb250ZW50XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZm9ybWFsX2luc29sdmVuY3lfdGFiX3RpdGxlcy5sZW5ndGg7IGkrKykge1xuICBcdGxldCBmb3JtYWxfaW5zb2x2ZW5jeV90YWJzX2NoZWNrZWQgPSAoaT09MCk/XCIgY2hlY2tlZFwiOlwiXCI7XG4gICAgICAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LXRhYnNcIikuYXBwZW5kKFxuICAgICAgXHRcdGA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJ0YWIke2krMX1cIiBuYW1lPVwidGFiLWNvbnRyb2xcIiR7Zm9ybWFsX2luc29sdmVuY3lfdGFic19jaGVja2VkfT5gXG4gICAgICApO1xuICB9XG4gIFxuICBpZiAoaXNNb2JpbGUpIHtcbiAgICAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LXRhYnNcIikuYXBwZW5kKGA8dWwgaWQ9XCJtb2JpbGUtYWNjb3JkaW9uXCI+PC91bD5gKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm1hbF9pbnNvbHZlbmN5X3RhYl90aXRsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBmb3JtYWxfaW5zb2x2ZW5jeV90YWJfZGVzY3JpcHRpb25fdmFsdWUgPSBmb3JtYWxfaW5zb2x2ZW5jeV90YWJfZGVzY3JpcHRpb25zW2ldLnJlcGxhY2UoLyBzcmM9XFxcIlxcL3NpdGVzXFwvZGVmYXVsdFxcL2ZpbGVzL2csYCBzcmM9XCIke3Byb2Nlc3MuZW52LlJPT1RfVVJMfXNpdGVzL2RlZmF1bHQvZmlsZXNgKTsgLy8gcmVwbGFjZSBhbGwgZW1iZWRkZWQgaW1hZ2UgdG8gYWJzb2x1dGUgVVJMXG4gICAgICBcbiAgICAgIGxldCB0YWJfdGl0bGVfb2JqID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImgzXCIpOyB0YWJfdGl0bGVfb2JqLmNsYXNzTmFtZSA9IFwiYWNjb3JkaW9uLXRpdGxlXCI7IHRhYl90aXRsZV9vYmoudGV4dENvbnRlbnQgPSBmb3JtYWxfaW5zb2x2ZW5jeV90YWJfdGl0bGVzW2ldO1xuICAgICAgbGV0IGFjY29yZGlvbkhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7IGFjY29yZGlvbkhvbGRlci5jbGFzc05hbWUgPSBcImFjY29yZGlvbi1ob2xkZXJcIjtcbiAgICAgIGxldCBhY2NvcmRpb25Db250ZW50SG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTsgYWNjb3JkaW9uQ29udGVudEhvbGRlci5jbGFzc05hbWUgPSBcImFjY29yZGlvbi1jb250ZW50LWhvbGRlclwiO1xuICAgICAgbGV0IHRhYl9kZXNjcmlwdGlvbl9vYmogPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKTsgdGFiX2Rlc2NyaXB0aW9uX29iai5jbGFzc05hbWUgPSBcImFjY29yZGlvbi1jb250ZW50XCI7IHRhYl9kZXNjcmlwdGlvbl9vYmouaW5uZXJIVE1MID0gZm9ybWFsX2luc29sdmVuY3lfdGFiX2Rlc2NyaXB0aW9uX3ZhbHVlO1xuICAgICAgXG4gICAgICAkKFwiI21vYmlsZS1hY2NvcmRpb25cIikuYXBwZW5kKGFjY29yZGlvbkhvbGRlcik7XG4gICAgICBhY2NvcmRpb25Ib2xkZXIuYXBwZW5kQ2hpbGQodGFiX3RpdGxlX29iaik7XG4gICAgICBhY2NvcmRpb25Ib2xkZXIuYXBwZW5kQ2hpbGQoYWNjb3JkaW9uQ29udGVudEhvbGRlcik7XG4gICAgICBhY2NvcmRpb25Db250ZW50SG9sZGVyLmFwcGVuZENoaWxkKHRhYl9kZXNjcmlwdGlvbl9vYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LXRhYnNcIikuYXBwZW5kKGA8dWwgaWQ9XCJmb3JtYWwtaW5zb2x2ZW5jeS10YWItdGl0bGVcIiBjbGFzcz1cInRhYi1saXN0XCI+PC91bD5gKTtcbiAgICAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LXRhYnNcIikuYXBwZW5kKGA8ZGl2IGlkPVwiZm9ybWFsLWluc29sdmVuY3ktdGFiLWRlc2NyaXB0aW9uXCIgY2xhc3M9XCJjb250ZW50XCI+PC9kaXY+YCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYWxfaW5zb2x2ZW5jeV90YWJfdGl0bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgZm9ybWFsX2luc29sdmVuY3lfdGFiX3RpdGxlX3ZhbHVlID0gZm9ybWFsX2luc29sdmVuY3lfdGFiX3RpdGxlc1tpXTtcbiAgICAgIGxldCBmb3JtYWxfaW5zb2x2ZW5jeV90YWJfZGVzY3JpcHRpb25fdmFsdWUgPSBmb3JtYWxfaW5zb2x2ZW5jeV90YWJfZGVzY3JpcHRpb25zW2ldLnJlcGxhY2UoLyBzcmM9XFxcIlxcL3NpdGVzXFwvZGVmYXVsdFxcL2ZpbGVzL2csYCBzcmM9XCIke3Byb2Nlc3MuZW52LlJPT1RfVVJMfXNpdGVzL2RlZmF1bHQvZmlsZXNgKTsgLy8gcmVwbGFjZSBhbGwgZW1iZWRkZWQgaW1hZ2UgdG8gYWJzb2x1dGUgVVJMXG4gICAgICAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LXRhYi10aXRsZVwiKS5hcHBlbmQoXG4gICAgICAgIGA8bGkgY2xhc3M9XCJ0YWJcIiB0aXRsZT1cIiR7Zm9ybWFsX2luc29sdmVuY3lfdGFiX3RpdGxlX3ZhbHVlfVwiPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJ0YWIke2krMX1cIiByb2xlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICA8c3Bhbj4ke2Zvcm1hbF9pbnNvbHZlbmN5X3RhYl90aXRsZV92YWx1ZX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD4gXG4gICAgICAgIDwvbGk+YCk7XG4gICAgICAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LXRhYi1kZXNjcmlwdGlvblwiKS5hcHBlbmQoXG4gICAgICAgIGA8c2VjdGlvbj4gXG4gICAgICAgICAgJHtmb3JtYWxfaW5zb2x2ZW5jeV90YWJfZGVzY3JpcHRpb25fdmFsdWV9XG4gICAgICAgIDwvc2VjdGlvbj5gKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgbGluayBidXR0b25zXG4gIGxldCBmb3JtYWxfaW5zb2x2ZW5jeV9saW5rID0gZGF0YS5mb3JtYWxfaW5zb2x2ZW5jeV9saW5rLnNwbGl0KFwiOztcIik7XG4gICQoXCIjZm9ybWFsLWluc29sdmVuY3ktbGlua1wiKS5hcHBlbmQoYDxkaXYgaWQ9XCJmb3JtYWwtaW5zb2x2ZW5jeS1saW5rLXRtcFwiPmApO1xuICAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LWxpbmstdG1wXCIpLmhpZGUoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYWxfaW5zb2x2ZW5jeV9saW5rLmxlbmd0aDsgaSsrKSB7XG4gICAgJChcIiNmb3JtYWwtaW5zb2x2ZW5jeS1saW5rLXRtcFwiKS5hcHBlbmQoZm9ybWFsX2luc29sdmVuY3lfbGlua1tpXSk7XG4gICAgbGV0IGxpbmtfdGl0bGUgPSAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LWxpbmstdG1wXCIpLmNoaWxkcmVuKCkubGFzdCgpLnRleHQoKTtcbiAgICBsZXQgbGlua191cmwgPSAkKFwiI2Zvcm1hbC1pbnNvbHZlbmN5LWxpbmstdG1wXCIpLmNoaWxkcmVuKCkubGFzdCgpLnByb3AoXCJocmVmXCIpO1xuICAgICQoXCIjZm9ybWFsLWluc29sdmVuY3ktbGlua1wiKS5hcHBlbmQoYDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJ3aW5kb3cub3BlbignJHtsaW5rX3VybH0nLCAnX2JsYW5rJylcIiBjbGFzcz1cImJ1dHRvbiBpbnNvbDYtYnRuXCI+PHNwYW4gY2xhc3M9XCJidG4tbGFiZWxcIj48c3Ryb25nPiR7bGlua190aXRsZX08L3N0cm9uZz48L3NwYW4+PC9idXR0b24+YCk7XG4gIH1cblxuICAvLyBhZGQgbG9naWMgb2Ygb3BlbiBhbmQgY29sbGFwc2UgYWNjb3JkaW9uc1xuICBsZXQgYWNjb3JkaW9uVGl0bGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnYWNjb3JkaW9uLXRpdGxlJyk7XG5cbiAgZm9yICggaSA9IDA7IGkgPCBhY2NvcmRpb25UaXRsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFjY29yZGlvblRpdGxlc1tpXS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmNsYXNzTGlzdC50b2dnbGUoJ2FjY29yZGlvbi10aXRsZS1vcGVuJyk7XG4gICAgICAgIHRoaXMubmV4dFNpYmxpbmcuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJyk7XG4gICAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1hbEluc29sdmVuY3k7IiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBDb25zdHJ1Y3RvclxudmFyIEhvbWVwYWdlQmFubmVyID0gZnVuY3Rpb24oKSB7XG4gICQoJy5ob21lcGFnZS1iYW5uZXIgLmxlZnQsIC5ob21lcGFnZS1iYW5uZXIgLnJpZ2h0JykubWF0Y2hIZWlnaHQoKTtcblxuICBqUXVlcnkuYWpheCh7XG4gICAgdXJsOiBgJHtwcm9jZXNzLmVudi5ST09UX0FQSX1ob21lcGFnZS1jb250ZW50YCxcbiAgICB0eXBlOiBcImdldFwiLFxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBwb3B1bGF0ZURhdGEoZGF0YVswXSk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAkKFwiI2hvbWUtYm9keVwiKS5hcHBlbmQoXCI8cCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPlVuYWJsZSB0byBsb2FkIGJhbm5lciBjb250ZW50LiBQbGVhc2UgdHJ5IGFnYWluLjwvcD5cIik7XG4gICAgICAkKFwiLndyYXBwZXJcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG4gICAgICBzaG93RGF0YSgpO1xuICAgIH1cbiAgfSk7XG4gIGpRdWVyeS5hamF4KHtcbiAgICB1cmw6IGAke3Byb2Nlc3MuZW52LlJPT1RfQVBJfWFydGljbGUtbGlzdGAsXG4gICAgdHlwZTogXCJnZXRcIixcbiAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgcG9wdWxhdGVGZWF0dXJlQXJ0aWNsZXMoZGF0YSk7XG4gICAgICAgIHJlbmRlckNhcm91c2VsKCk7XG4gICAgICAgIHNob3dEYXRhKCk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAkKFwiI2hvbWUtYm9keVwiKS5hcHBlbmQoXCI8cCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPlVuYWJsZSB0byBsb2FkIGJhbm5lciBjb250ZW50LiBQbGVhc2UgdHJ5IGFnYWluLjwvcD5cIik7XG4gICAgICAkKFwiLndyYXBwZXJcIikuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG4gICAgICBzaG93RGF0YSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZW5kZXJzIHRoZSBmZWF0dXJlZCBhcnRpY2xlcyBjYXJvdXNlbC5cbiAqXG4gKi9cbnZhciByZW5kZXJDYXJvdXNlbCA9ICgpID0+IHtcbiAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICQoJy5jYXJvdXNlbC1jb250YWluZXInKS5hdHRyKFwic3R5bGVcIixcImRpc3BsYXk6IGJsb2NrXCIpO1xuXG4gICAgJCgnLmFydGljbGUtY2Fyb3VzZWwnKS5zbGljayh7XG4gICAgICBkb3RzOiB0cnVlLFxuICAgICAgaW5maW5pdGU6IHRydWUsXG4gICAgICBzcGVlZDogNzAwLFxuICAgICAgYXV0b3BsYXk6IGZhbHNlLFxuICAgICAgYXJyb3dzOiB0cnVlLFxuICAgICAgc2xpZGVzVG9TaG93OiAxLFxuICAgICAgc2xpZGVzVG9TY3JvbGw6IDEsXG4gICAgICByb3dzOiAxLFxuICAgICAgbGF6eUxvYWQ6ICdwcm9ncmVzc2l2ZScsXG4gICAgICBkb3RzQ2xhc3M6ICdzbGljay1kb3RzJyxcbiAgICAgIHByZXZBcnJvdzogJzxidXR0b24gY2xhc3M9XCJzbGlkZS1hcnJvdyBwcmV2LWFycm93XCI+PC9idXR0b24+JyxcbiAgICAgIG5leHRBcnJvdzogJzxidXR0b24gY2xhc3M9XCJzbGlkZS1hcnJvdyBuZXh0LWFycm93XCI+PC9idXR0b24+JyxcbiAgICAgIHJlc3BvbnNpdmU6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIGJyZWFrcG9pbnQ6IDYwMCxcbiAgICAgICAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgIGluaXRpYWxTbGlkZTogMSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgfSwgMCk7XG4gICQod2luZG93KS5vbigncmVzaXplJywgZnVuY3Rpb24gKCkge1xuICAgICAgJCgnLmhvbWVwYWdlIC5ob21lcGFnZS1iYW5uZXIgLmNvbnRhaW5lci1vdXRlciAud3JhcHBlciB1bCcpLnNsaWNrKCdyZXNpemUnKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZW5kZXJzIHRoZSBmZWF0dXJlZCBhcnRpY2xlcyBpbiB0aGUgY2Fyb3VzZWxcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YSBUaGUgZmVhdHVyZWQgYXJ0aWNsZXMgZGF0YSB0byBiZSByZW5kZXJlZC5cbiAqL1xudmFyIHBvcHVsYXRlRmVhdHVyZUFydGljbGVzID0gKGRhdGEpID0+IHtcbiAgbGV0IG1heF9hcnRpY2xlcyA9IDM7XG4gIGxldCBpID0gMDtcblxuICB3aGlsZSAoaSA8IGRhdGEubGVuZ3RoICYmIGkgPCBtYXhfYXJ0aWNsZXMpIHtcbiAgICBsZXQgaW1hZ2VfcmF3X2FycmF5ID0gZGF0YVtpXS5pbWFnZS5zcGxpdChcIlxcXCJcIik7XG4gICAgLy8gU2luY2UgJ2xhenknIGluIHRoZSBkb20sIGZpbmQgdXJsIGF0dHIgZHluYW1pY2FsbHkgYXMgZmluZCBpdCBhbmQgdGhlblxuICAgIC8vIHJldHVybmluZyBhZnRlciBpdC5cbiAgICBsZXQgaW1hZ2Vfc3JjID0gaW1hZ2VfcmF3X2FycmF5LmZpbmQoZnVuY3Rpb24gKHZhbCwgaSkge1xuICAgICAgaWYgKCh0eXBlb2YgaW1hZ2VfcmF3X2FycmF5W2kgLSAxXSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICYmIChpbWFnZV9yYXdfYXJyYXlbaSAtIDFdLmluZGV4T2YoJ3NyYz0nKSAhPT0gLTEpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIGxldCBpbWFnZV9hdHRyID0gXCJcIjtcbiAgICBsZXQgc2xpZGUgPSBcIiNmZWF0dXJlZC1hcnRpY2xlXCIgKyAoaSsxKS50b1N0cmluZygpO1xuXG4gICAgbGV0IGFydGljbGVTdWJ0aXRsZSA9IGRhdGFbaV0uYm9keV90aXRsZS5yZXBsYWNlKC88W14+XSs+L2csICcnKTtcblxuICAgIGZvciAobGV0IGogPSAyOyBqIDwgaW1hZ2VfcmF3X2FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoaiA9PT0gNykge1xuICAgICAgICAgIGltYWdlX2F0dHIgPSBpbWFnZV9hdHRyLmNvbmNhdChgXCIke2ltYWdlX3Jhd19hcnJheVtqXX1cImApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbWFnZV9hdHRyID0gaW1hZ2VfYXR0ci5jb25jYXQoaW1hZ2VfcmF3X2FycmF5W2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaXNNb2JpbGUgPSB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA4MDBweClcIikubWF0Y2hlcztcblxuICAgIGlmIChpc01vYmlsZSkge1xuICAgICAgJChzbGlkZSkuYXBwZW5kKFxuICAgICAgICBgPGEgaHJlZj1cIi9hcnRpY2xlLmRldGFpbHMuaHRtbD9pZD0ke2RhdGFbaV0uaWR9XCIgY2xhc3M9XCJtb2JpbGVMaW5rXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1vYmlsZS1jYXJkXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmQtaW1nXCI+XG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtwcm9jZXNzLmVudi5ST09UX1VSTH0ke2ltYWdlX3NyY31cIiBjbGFzcz1cIm1vYmlsZS1pbWFnZVwiPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9iaWxlLWNhcmQtaW5mb1wiPlxuICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2JpbGUtYXJ0aWNsZS10eXBlXCI+Q2FzZSBTdHVkeTwvaDQ+XG4gICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vYmlsZS1jYXJkLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgJHtkYXRhW2ldLnRpdGxlfVxuICAgICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgICAgYFxuICAgICAgKTtcblxuICAgIH0gZWxzZSB7XG4gICAgICAkKHNsaWRlKS5hcHBlbmQoXG4gICAgICAgIGA8ZGl2IGNsYXNzPVwibGVmdFwiPlxuICAgICAgICAgICAgPGg0IGNsYXNzPVwiZmVhdHVyZWQtdHlwZVwiPkNhc2UgU3R1ZHk8L2g0PlxuICAgICAgICAgICAgPC9icj5cbiAgICAgICAgICAgIDxoNCBjbGFzcz1cImZlYXR1cmVkLXRpdGxlXCI+XG4gICAgICAgICAgICAgIDxhIGhyZWY9XCIvYXJ0aWNsZS5kZXRhaWxzLmh0bWw/aWQ9JHtkYXRhW2ldLmlkfVwiIGNsYXNzPVwidGl0bGVMaW5rXCI+JHtkYXRhW2ldLnRpdGxlfTwvYT5cbiAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICA8cD4ke2FydGljbGVTdWJ0aXRsZX08L3A+XG4gICAgICAgICAgICA8cD4ke2RhdGFbaV0ucmVhZF90aW1lfTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2Fyb3VzZWwtaW1nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGEgaHJlZj1cIi9hcnRpY2xlLmRldGFpbHMuaHRtbD9pZD0ke2RhdGFbaV0uaWR9XCI+XG4gICAgICAgICAgICAgIDxpbWcgc3JjPVwiJHtwcm9jZXNzLmVudi5ST09UX1VSTH0ke2ltYWdlX3NyY31cIiBjbGFzcz1cImNhcm91c2VsLWltYWdlXCI+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIGBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZW5kZXJzIHRoZSBob21lcGFnZSBiYW5uZXIgY29udGVudCBvbiB0byB0aGUgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGF0YU9iaiBUaGUgaG9tZXBhZ2UgYmFubmVyIGRhdGEgb2JqZWN0IHRvIGJlIHJlbmRlcmVkLlxuICovXG52YXIgcG9wdWxhdGVEYXRhID0gKGRhdGFPYmopID0+IHtcbiAgJChcIiNob21lLXRpdGxlXCIpLmh0bWwoZGF0YU9iai50aXRsZSk7XG4gICQoXCIjaG9tZS1ib2R5XCIpLmh0bWwoZGF0YU9iai5ib2R5KTtcbiAgJChcIiNiYW5uZXItdGV4dFwiKS5odG1sKGRhdGFPYmouYmFubmVyX3RleHQpO1xuICAkKFwiI2Jhbm5lci1zbWFsbC10ZXh0XCIpLmh0bWwoZGF0YU9iai5iYW5uZXJfc21hbGxfdGV4dCk7XG59XG5cbi8qKlxuICogT25jZSB0aGUgZGF0YSBoYXMgYmVlbiByZW5kZXJlZCwgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBsb2FkaW5nIGljb24gYW5kIHNob3dzIHRoZSBjb250ZW50IG9uIHRoZSBwYWdlLlxuICovXG4gdmFyIHNob3dEYXRhID0gKCkgPT4ge1xuICAkKCcuaG9tZXBhZ2UtYmFubmVyJykuc2hvdygpO1xuICAkKCcub3VyLWxhdGVzdC10aGlua2luZycpLnNob3coKTtcbiAgJCgnLmhvdy1jYW4td2UtaGVscCcpLnNob3coKTtcbiAgJCgnLnRoZS10ZWFtJykuc2hvdygpO1xuICAkKCcuZm9vdGVyLWJvdHRvbScpLnNob3coKTtcbiAgJCgnLmZvb3Rlci10b3AnKS5zaG93KCk7XG4gICQoJy5sb2FkZXInKS5oaWRlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG9tZXBhZ2VCYW5uZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgSG93Q2FuV2VIZWxwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9ICdob3ctY2FuLXdlLWhlbHAnO1xuXG4gIGpRdWVyeS5hamF4KHtcbiAgICB1cmw6IGAke3Byb2Nlc3MuZW52LlJPT1RfQVBJfWhvbWVwYWdlLWNvbnRlbnRgLFxuICAgIHR5cGU6IFwiZ2V0XCIsXG4gICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7XG4gICAgICBwb3B1bGF0ZURhdGEoZGF0YVswXSk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAkKFwiI2hlbHAtZGVzY3JpcHRpb25cIikuYXBwZW5kKFwiPHAgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyJz5VbmFibGUgdG8gbG9hZCBjb250ZW50LiBQbGVhc2UgdHJ5IGFnYWluLjwvcD5cIik7XG4gICAgICBzaG93RGF0YSgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyB0aGUgJ0hvdyBDYW4gV2UgSGVscCcgY29udGVudCBvbiB0byB0aGUgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSAnSG93IENhbiBXZSBIZWxwJyBhcnJheSB0byBiZSByZW5kZXJlZC5cbiAqL1xudmFyIHBvcHVsYXRlRGF0YSA9IChkYXRhKSA9PiB7XG4gICQoXCIjaGVscC10aXRsZVwiKS5odG1sKGRhdGEuaGVscF90aXRsZSk7XG4gICQoXCIjaGVscC1kZXNjcmlwdGlvblwiKS5odG1sKGRhdGEuaGVscF9kZXNjcmlwdGlvbik7XG5cbiAgbGV0IGltYWdlX3Jhd19hcnJheSA9IGRhdGEuaGVscF9pY29uLnNwbGl0KFwiLFwiKTtcbiAgbGV0IGRldGFpbHNfc3RyaW5nID0gZGF0YS5oZWxwX2ljb25fZGV0YWlscztcblxuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgaW1hZ2VfcmF3X2FycmF5Lmxlbmd0aCkge1xuXG4gICAgbGV0IGltYWdlX3NyY19hcnJheSA9IGltYWdlX3Jhd19hcnJheVtpXS5zcGxpdChcIlxcXCJcIik7XG4gICAgLy8gU2luY2UgJ2xhenknIGluIHRoZSBkb20sIGZpbmQgdXJsIGF0dHIgZHluYW1pY2FsbHkgYXMgZmluZCBpdCBhbmQgdGhlblxuICAgIC8vIHJldHVybmluZyBhZnRlciBpdC5cbiAgICBsZXQgaW1hZ2Vfc3JjID0gcHJvY2Vzcy5lbnYuUk9PVF9VUkwgKyBpbWFnZV9zcmNfYXJyYXkuZmluZChmdW5jdGlvbiAodmFsLCBpKSB7XG4gICAgICBpZiAoKHR5cGVvZiBpbWFnZV9zcmNfYXJyYXlbaSAtIDFdICE9PSAndW5kZWZpbmVkJylcbiAgICAgICAgJiYgKGltYWdlX3NyY19hcnJheVtpIC0gMV0uaW5kZXhPZignc3JjPScpICE9PSAtMSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gICAgbGV0IGltYWdlX2F0dHIgPSBcIlwiO1xuICAgIGZvciAobGV0IGogPSAyOyBqIDwgaW1hZ2Vfc3JjX2FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChqID09PSAzKSB7XG4gICAgICAgICAgICBpbWFnZV9hdHRyID0gaW1hZ2VfYXR0ci5jb25jYXQoYFwiJHtpbWFnZV9zcmNfYXJyYXlbal19XCJgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltYWdlX2F0dHIgPSBpbWFnZV9hdHRyLmNvbmNhdChpbWFnZV9zcmNfYXJyYXlbal0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGRldGFpbHNfYXJyYXkgPSBkZXRhaWxzX3N0cmluZy5zcGxpdChcIlxcclxcbixcIilcbiAgICBsZXQgZGV0YWlscyA9IGRldGFpbHNfYXJyYXlbaV0udHJpbSgpO1xuXG4gICAgJChcIiNoZWxwLWxpc3RcIikuYXBwZW5kKFxuICAgICAgYDxsaT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCIke2ltYWdlX3NyY31cIiAke2ltYWdlX2F0dHJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHA+JHtkZXRhaWxzfTwvcD5cbiAgICAgIDwvbGk+YFxuICAgICk7XG4gIGkrKztcbiAgfVxuXG4gIC8vIEFkZCB0YWdzIHRvIHRoZSBcIkhvdyBFWSBjYW4gaGVscFwiIHNlY3Rpb25cbiAgbGV0IHRhZ190aXRsZV9hcnJheSA9IGRhdGEuaGVscF90YWdfdGl0bGUuc3BsaXQoXCI7O1wiKTtcbiAgbGV0IHRhZ19kZXNjcmlwdGlvbl9hcnJheSA9IGRhdGEuaGVscF90YWdfZGVzY3JpcHRpb24uc3BsaXQoXCI7O1wiKTtcblxuICBpID0gMDtcbiAgd2hpbGUgKGkgPCB0YWdfdGl0bGVfYXJyYXkubGVuZ3RoKSB7XG4gICAgbGV0IHRhZ190aXRsZSA9IHRhZ190aXRsZV9hcnJheVtpXS50cmltKCk7XG4gICAgbGV0IHRhZ19kZXNjcmlwdGlvbiA9IHRhZ19kZXNjcmlwdGlvbl9hcnJheVtpXS50cmltKCk7XG5cbiAgICAkKFwiI2luZm8tcGFuZWwtc2VjdGlvblwiKS5hcHBlbmQoXG4gICAgICBgPGRpdiBjbGFzcz1cImluZm8tcGFuZWxcIj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAgPGgyIGNsYXNzPVwiaW5mby1oZWFkaW5nXCI+JHt0YWdfdGl0bGV9PC9oMj5cbiAgICAgICAgICA8c3Ryb25nIGNsYXNzPVwicGx1cy1pY29uXCI+KyAgPC9zdHJvbmc+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPHAgY2xhc3M9XCJpbmZvLXBhcmFncmFwaFwiPiR7dGFnX2Rlc2NyaXB0aW9ufTwvcD5cbiAgICAgIDwvZGl2PmBcbiAgICApO1xuICAgIGkrKztcbiAgfVxuXG4gIGxldCBpc1RhYmxldCA9IHdpbmRvdy5tYXRjaE1lZGlhKFwib25seSBzY3JlZW4gYW5kICgobWluLXdpZHRoOiA1NDZweCkgYW5kIChtYXgtd2lkdGg6IDc2MHB4KSlcIikubWF0Y2hlcztcbiAgbGV0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNTQ1cHgpXCIpLm1hdGNoZXM7XG4gIGxldCBjbG9zZWRIZWlnaHQgPSBcIjYwcHhcIjtcbiAgbGV0IG9wZW5IZWlnaHQgPSBcIjE4MHB4XCI7XG5cbiAgaWYgKGlzVGFibGV0KSB7XG4gICAgICBjbG9zZWRIZWlnaHQgPSBcIjQ1cHhcIjtcbiAgICAgIG9wZW5IZWlnaHQgPSBcIjE0MHB4XCI7XG4gIH1cbiAgaWYgKGlzTW9iaWxlKSB7XG4gICAgICBjbG9zZWRIZWlnaHQgPSBcIjQwcHhcIjtcbiAgICAgIG9wZW5IZWlnaHQgPSBcIjEyMHB4XCI7XG4gIH1cblxuICB2YXIgcGFuZWxzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImluZm8tcGFuZWxcIik7XG5cbiAgdmFyIG9wZW5DbG9zZVBhbmVscyA9ICgpID0+IHtcbiAgICBmb3IgKCBpID0gMDsgaSA8IHBhbmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29udGVudCA9IHBhbmVsc1tpXS5jaGlsZHJlblsxXTtcbiAgICAgICAgaWYgKGNvbnRlbnQuc3R5bGUuZGlzcGxheSA9PT0gXCJibG9ja1wiKSB7XG4gICAgICAgICAgICBwYW5lbHNbaV0uc3R5bGUuaGVpZ2h0ID0gY2xvc2VkSGVpZ2h0O1xuICAgICAgICAgICAgY29udGVudC5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYW5lbHNbaV0uc3R5bGUuaGVpZ2h0ID0gb3BlbkhlaWdodDtcbiAgICAgICAgICAgIGNvbnRlbnQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIlxuICAgICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGZvciAoIGkgPSAwOyBpIDwgcGFuZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYW5lbHNbaV0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvcGVuQ2xvc2VQYW5lbHMsIGZhbHNlKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhvd0NhbldlSGVscDtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RydWN0b3JcbnZhciBPdXJMYXRlc3RUaGlua2luZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAkKCcub3VyLWxhdGVzdC10aGlua2luZyBsaScpLm1hdGNoSGVpZ2h0KCk7XG5cbiAgICBqUXVlcnkuYWpheCh7XG4gICAgICAgIHVybDogYCR7cHJvY2Vzcy5lbnYuUk9PVF9BUEl9YXJ0aWNsZS1saXN0YCxcbiAgICAgICAgdHlwZTogXCJnZXRcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oZGF0YSl7XG4gICAgICAgICAgICBwb3B1bGF0ZUFydGljbGVzKGRhdGEpO1xuICAgICAgICAgICAgc2hvd0RhdGEoKTtcbiAgICAgICAgICAgIHNldFRpbGVIZWlnaHRzKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQoXCIjbGlzdFwiKS5hcHBlbmQoXCI8YnI+PHAgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyBmb250LXNpemU6IDEuMjVlbSc+VW5hYmxlIHRvIGxvYWQgYXJ0aWNsZSBjb250ZW50LiBQbGVhc2UgdHJ5IGFnYWluLjwvcD5cIik7XG4gICAgICAgICAgICBzaG93RGF0YSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyBhcnRpY2xlcyBvbiB0byB0aGUgcGFnZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBhcnJheSBvZiBhcnRpY2xlcyBvYmplY3RzIHRvIGJlIHJlbmRlcmVkLlxuICovXG52YXIgcG9wdWxhdGVBcnRpY2xlcyA9IChkYXRhKSA9PiB7XG4gICAgbGV0IGlzTWVkaXVtU2NyZWVuID0gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogMTAyNXB4KSBhbmQgKG1heC13aWR0aDogMTQwNHB4KVwiKS5tYXRjaGVzO1xuXG4gICAgbGV0IG1heF9hcnRpY2xlcyA9IDQ7XG4gICAgaWYgKGlzTWVkaXVtU2NyZWVuKSB7XG4gICAgICAgIG1heF9hcnRpY2xlcyA9IDM7XG4gICAgfVxuXG4gICAgbGV0IGkgPSAwO1xuXG4gICAgLy8gbGltaXQgbnVtYmVyIG9mIGFydGljbGVzIHNob3duIHRvIDggKDQgb24gbW9iaWxlKVxuICAgIHdoaWxlIChpIDwgZGF0YS5sZW5ndGggJiYgaSA8IG1heF9hcnRpY2xlcykge1xuICAgICAgICAvLyBleHRyYWN0IGltYWdlIHNyY1xuICAgICAgICBsZXQgaW1hZ2VfcmF3X2FycmF5ID0gZGF0YVtpXS5pbWFnZS5zcGxpdChcIlxcXCJcIik7XG4gICAgICAgIC8vIFNpbmNlICdsYXp5JyBpbiB0aGUgZG9tLCBmaW5kIHVybCBhdHRyIGR5bmFtaWNhbGx5IGFzIGZpbmQgaXQgYW5kIHRoZW5cbiAgICAgICAgLy8gcmV0dXJuaW5nIGFmdGVyIGl0LlxuICAgICAgICBsZXQgaW1hZ2Vfc3JjID0gaW1hZ2VfcmF3X2FycmF5LmZpbmQoZnVuY3Rpb24gKHZhbCwgaSkge1xuICAgICAgICAgICAgaWYgKCh0eXBlb2YgaW1hZ2VfcmF3X2FycmF5W2kgLSAxXSAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgJiYgKGltYWdlX3Jhd19hcnJheVtpIC0gMV0uaW5kZXhPZignc3JjPScpICE9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBpbWFnZV9hdHRyID0gXCJcIjtcbiAgICAgICAgZm9yIChsZXQgaiA9IDI7IGogPCBpbWFnZV9yYXdfYXJyYXkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChqID09PSA3KSB7XG4gICAgICAgICAgICAgICAgaW1hZ2VfYXR0ciA9IGltYWdlX2F0dHIuY29uY2F0KGBcIiR7aW1hZ2VfcmF3X2FycmF5W2pdfVwiYCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGltYWdlX2F0dHIgPSBpbWFnZV9hdHRyLmNvbmNhdChpbWFnZV9yYXdfYXJyYXlbal0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIEhUTUwgdGFncyBmcm9tIGFydGljbGUgZGVzY3JpcHRpb25cbiAgICAgICAgbGV0IGFydGljbGVfZGVzYyA9IGRhdGFbaV0uYm9keV90aXRsZS5yZXBsYWNlKC88XFwvP1tePl0rKD58JCkvZywgXCJcIik7XG5cbiAgICAgICAgLy8gb25seSBkaXNwbGF5IHRoZSBmaXJzdCBhdXRob3JcbiAgICAgICAgbGV0IGF1dGhvcl9hcnJheSA9IGRhdGFbaV0uYXV0aG9yX25hbWUuc3BsaXQoXCIsXCIpO1xuICAgICAgICBsZXQgZmlyc3RfYXV0aG9yID0gYXV0aG9yX2FycmF5WzBdO1xuICAgICAgICBsZXQgcmVhZF90aW1lID0gZGF0YVtpXS5yZWFkX3RpbWU7XG5cbiAgICAgICAgJChcIiNsaXN0XCIpLmFwcGVuZChcbiAgICAgICAgICAgIGA8bGk+XG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cIi9hcnRpY2xlLmRldGFpbHMuaHRtbD9pZD0ke2RhdGFbaV0uaWR9XCIgY2xhc3M9XCJpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1nLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIke3Byb2Nlc3MuZW52LlJPT1RfVVJMfSR7aW1hZ2Vfc3JjfVwiIGNsYXNzPVwiaW1hZ2VcIiAke2ltYWdlX2F0dHJ9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJ0aXRsZVwiPiR7ZGF0YVtpXS50aXRsZX08L2g1PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uXCI+JHthcnRpY2xlX2Rlc2N9PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZVwiPiR7ZGF0YVtpXS5wdWJsaXNoZWRfZGF0ZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRob3JcIj4ke2ZpcnN0X2F1dGhvcn08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWFkLXRpbWVcIj4ke3JlYWRfdGltZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5gXG4gICAgICAgICk7XG4gICAgICAgIGkrKztcbiAgICB9XG59XG5cbi8qKlxuICogT25jZSB0aGUgZGF0YSBoYXMgYmVlbiByZW5kZXJlZCwgdGhpcyBmdW5jdGlvbiByZW1vdmVzIHRoZSBsb2FkaW5nIGljb24gYW5kIHNob3dzIHRoZSBjb250ZW50IG9uIHRoZSBwYWdlLlxuICovXG52YXIgc2hvd0RhdGEgPSAoKSA9PiB7XG4gICAgJCgnLm91ci1sYXRlc3QtdGhpbmtpbmcnKS5zaG93KCk7XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBtYXhpbXVtIGhlaWdodCBvdXQgb2YgdGhlIHRpbGVzIG9uc2NyZWVuIGFuZCBzZXRzIGFsbCB0aWxlcyB0byB0aGlzIGhlaWdodC5cbiAqL1xudmFyIHNldFRpbGVIZWlnaHRzID0gKCkgPT4ge1xuICAgIGxldCBpc01vYmlsZSA9IHdpbmRvdy5tYXRjaE1lZGlhKFwib25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2MHB4KVwiKS5tYXRjaGVzO1xuXG4gICAgLy8gb25seSByZXNpemUgaGVpZ2h0IG9mIHRpbGVzIGlmIG5vdCBvbiBtb2JpbGVcbiAgICBpZiAoIWlzTW9iaWxlKSB7XG4gICAgICAgIGxldCBtYXggPSAtMTtcbiAgICAgICAgLy8gZmluZCBtYXggdGlsZSBoZWlnaHRcbiAgICAgICAgJChcIi5vdXItbGF0ZXN0LXRoaW5raW5nIC50aWxlcyBsaVwiKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgbGV0IGhlaWdodCA9ICQodGhpcykuaGVpZ2h0KCk7XG4gICAgICAgICAgICBtYXggPSBoZWlnaHQgPiBtYXggPyBoZWlnaHQgOiBtYXg7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBzZXQgaGVpZ2h0IG9mIGFsbCB0aWxlcyB0byBtYXRjaFxuICAgICAgICAkKFwiLm91ci1sYXRlc3QtdGhpbmtpbmcgLnRpbGVzIGxpXCIpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKHRoaXMpLmhlaWdodChtYXgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT3VyTGF0ZXN0VGhpbmtpbmc7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIENvbnN0cnVjdG9yXG52YXIgVGhlVGVhbSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLm5hbWUgPSAndGhlLXRlYW0nO1xuXG4gIGpRdWVyeS5hamF4KHtcbiAgICB1cmw6IGAke3Byb2Nlc3MuZW52LlJPT1RfQVBJfWJpby1saXN0YCxcbiAgICB0eXBlOiBcImdldFwiLFxuICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgcG9wdWxhdGVEYXRhKGRhdGEpO1xuICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgc2hvd0RhdGEoKTtcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5oYXNoKSB7XG4gICAgICAgICAgbGlua1RvU2VjdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LCA1MDApO1xuICAgIH0sXG4gICAgZXJyb3I6IGZ1bmN0aW9uKCkge1xuICAgICAgJChcIiNwZW9wbGUtbGlzdFwiKS5hcHBlbmQoXCI8cCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7IGZvbnQtc2l6ZTogMS4yNWVtJz5VbmFibGUgdG8gbG9hZCB0ZWFtIGNvbnRlbnQuIFBsZWFzZSB0cnkgYWdhaW4uPC9wPlwiKTtcbiAgICB9XG4gIH0pOyBcbn07XG5cbi8qKlxuICogSWYgdGhlcmUgaXMgYSAnIycgaW4gdGhlIFVSTCwgdGhpcyBmdW5jdGlvbiB3aWxsIHNjcm9sbCB0byB0aGUgc3BlY2lmaWVkIHNlY3Rpb24gb24gdGhlIHBhZ2UuXG4gKiBcbiAqL1xudmFyIGxpbmtUb1NlY3Rpb24gPSAoKSA9PiB7XG4gIGxldCBzZWN0aW9uID0gd2luZG93LmxvY2F0aW9uLmhhc2g7XG4gIGxldCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgJHtzZWN0aW9ufWApO1xuICBsZXQgaGVhZGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2hlYWRlcicpO1xuICBsZXQgcGFkZGluZyA9IGhlYWRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gKyAoaGVhZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSowLjE1KTtcbiAgbGV0IHlQb3NpdGlvbiA9IGVsZW1lbnQub2Zmc2V0VG9wIC0gcGFkZGluZzsgXG4gIHdpbmRvdy5zY3JvbGxUbyh7YmVoYXZpb3I6ICdzbW9vdGgnLCB0b3A6IHlQb3NpdGlvbn0pO1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmVuZGVycyB0ZWFtIGRhdGEgb24gdG8gdGhlIHBhZ2UuXG4gKiBcbiAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgVGhlIGFycmF5IG9mIHRlYW0gbWVtYmVyIG9iamVjdHMgdG8gYmUgcmVuZGVyZWQuXG4gKi9cbnZhciBwb3B1bGF0ZURhdGEgPSAoZGF0YSkgPT4ge1xuICBsZXQgaSA9IDA7XG4gIC8vIGxpbWl0IG51bWJlciBvZiB0aWxlcyBzaG93biB0byAyMFxuICB3aGlsZSAoaSA8IGRhdGEubGVuZ3RoICYmIGkgPCAyMCkge1xuICAgIC8vIGV4dHJhY3QgaW1hZ2Ugc3JjXG4gICAgbGV0IGltYWdlUmF3QXJyYXkgPSBkYXRhW2ldLmltYWdlLnNwbGl0KFwiXFxcIlwiKTtcbiAgICBsZXQgaW1hZ2VFbGVtZW50ID0gZGF0YVtpXS5pbWFnZTtcbiAgICBsZXQgaW1hZ2VTcmMgPSBpbWFnZUVsZW1lbnQucmVwbGFjZSgvLipzcmM9XCIoW15cIl0qKVwiLiovLCAnJDEnKS50cmltKCk7XG4gICAgbGV0IGltYWdlQXR0ciA9IFwiXCI7XG4gICAgZm9yIChsZXQgaiA9IDI7IGogPCBpbWFnZVJhd0FycmF5Lmxlbmd0aDsgaisrKSB7XG4gICAgICBpZiAoaiA9PT0gNykge1xuICAgICAgICBpbWFnZUF0dHIgPSBpbWFnZUF0dHIuY29uY2F0KGBcIiR7aW1hZ2VSYXdBcnJheVtqXX1cImApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW1hZ2VBdHRyID0gaW1hZ2VBdHRyLmNvbmNhdChpbWFnZVJhd0FycmF5W2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAkKFwiI3Blb3BsZS1saXN0XCIpLmFwcGVuZChcbiAgICAgIGA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxuICAgICAgICA8YSBocmVmPVwiL3Blb3BsZS5odG1sP2lkPSR7ZGF0YVtpXS5pZH1cIj48L2E+XG4gICAgICAgIDxpbWcgY2xhc3M9XCJwb3J0cmFpdFwiIHNyYz0nJHtwcm9jZXNzLmVudi5ST09UX1VSTH0ke2ltYWdlU3JjfScgJHtpbWFnZUF0dHJ9PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1fX292ZXJsYXlcIj5cbiAgICAgICAgICA8aDM+JHtkYXRhW2ldLm5hbWV9PC9oMz5cbiAgICAgICAgICA8cD4ke2RhdGFbaV0ucG9zaXRpb259PC9wPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtX19ib2R5XCI+XG4gICAgICAgICAgICA8cD4ke2RhdGFbaV0uc2hvcnRfZGVzY3JpcHRpb259PC9wPlxuICAgICAgICAgICAgPHA+JHtkYXRhW2ldLmxvY2F0aW9ufTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIGBcbiAgICApO1xuICAgIGkrKztcbiAgfVxufVxuXG4vKipcbiAqIE9uY2UgdGhlIGRhdGEgaGFzIGJlZW4gcmVuZGVyZWQsIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgbG9hZGluZyBpY29uIGFuZCBzaG93cyB0aGUgY29udGVudCBvbiB0aGUgcGFnZS5cbiAqL1xudmFyIHNob3dEYXRhID0gKCkgPT4ge1xuICAkKCcuaG9tZXBhZ2UtYmFubmVyJykuc2hvdygpO1xuICAkKCcub3VyLWxhdGVzdC10aGlua2luZycpLnNob3coKTtcbiAgJCgnLmhvdy1jYW4td2UtaGVscCcpLnNob3coKTtcbiAgJCgnLnRoZS10ZWFtJykuc2hvdygpO1xuICAkKCcuZm9vdGVyLWJvdHRvbScpLnNob3coKTtcbiAgJCgnLmZvb3Rlci10b3AnKS5zaG93KCk7XG4gICQoJy5sb2FkZXInKS5oaWRlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGhlVGVhbTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RydWN0b3JcbnZhciBMZWdhbEFuZFByaXZhY3kgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5uYW1lID0gJ2xlZ2FsLWFuZC1wcml2YWN5JztcblxuICBqUXVlcnkuYWpheCh7XG4gICAgdXJsOiBgJHtwcm9jZXNzLmVudi5ST09UX0FQSX1sZWdhbC1hbmQtcHJpdmFjeWAsXG4gICAgdHlwZTogXCJnZXRcIixcbiAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKXtcbiAgICAgIHBvcHVsYXRlRGF0YShkYXRhWzBdKTtcbiAgICAgIHNob3dEYXRhKCk7XG4gICAgfSxcbiAgICBlcnJvcjogZnVuY3Rpb24oKSB7XG4gICAgICAkKFwiI3RleHQtc2VjdGlvblwiKS5hcHBlbmQoXCI8cCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7IGZvbnQtc2l6ZTogMS4yNWVtJz5VbmFibGUgdG8gbG9hZCBjb250ZW50LiBQbGVhc2UgdHJ5IGFnYWluLjwvcD5cIik7XG4gICAgICBzaG93RGF0YSgpO1xuICAgIH1cbiAgfSk7IFxufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbmRlcnMgdGhlIGxlZ2FsIGFuZCBwcml2YWN5IGRhdGEgb24gdG8gdGhlIHBhZ2VcbiAqIFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGEgVGhlIGxlZ2FsIGFuZCBwcml2YWN5IG9iamVjdCB0byBiZSByZW5kZXJlZC5cbiAqL1xudmFyIHBvcHVsYXRlRGF0YSA9IChkYXRhKSA9PiB7XG4gICQoXCIjbGVnYWwtdGl0bGVcIikuaHRtbChkYXRhLnRpdGxlKTtcbiAgJChcIiN0ZXh0LXNlY3Rpb25cIikuaHRtbChkYXRhLmJvZHkpO1xufVxuXG4vKipcbiAqIE9uY2UgdGhlIGRhdGEgaGFzIGJlZW4gcmVuZGVyZWQsIHRoaXMgZnVuY3Rpb24gcmVtb3ZlcyB0aGUgbG9hZGluZyBpY29uIGFuZCBzaG93cyB0aGUgY29udGVudCBvbiB0aGUgcGFnZS5cbiAqL1xudmFyIHNob3dEYXRhID0gKCkgPT4ge1xuICAkKCcubGVnYWwtYW5kLXByaXZhY3knKS5zaG93KCk7XG4gICQoJy5mb290ZXItYm90dG9tJykuc2hvdygpO1xuICAkKCcuZm9vdGVyLXRvcCcpLnNob3coKTtcbiAgJCgnLmxvYWRlcicpLmhpZGUoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBMZWdhbEFuZFByaXZhY3k7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVXRpbGl0aWVzID0gcmVxdWlyZSgnLi4vdXRpbGl0aWVzL3V0aWxpdGllcycpO1xudmFyIHV0aWxpdGllcyA9IG5ldyBVdGlsaXRpZXMoKTtcblxuLy8gQ29uc3RydWN0b3JcbnZhciBQZW9wbGVEZXRhaWxzID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9ICdwZW9wbGUuZGV0YWlscyc7XG5cbiAgbGV0IGNvbnRlbnRUeXBlTG9hZEFwaVBhdGggPSAnYmlvLWRldGFpbHMnO1xuXG4gIHV0aWxpdGllcy5sb2FkUGFnZUNvbnRlbnQoXG4gICAgY29udGVudFR5cGVMb2FkQXBpUGF0aCxcbiAgICBsb2FkUGFnZUNvbnRlbnRBamF4U3VjY2Vzc0NhbGxiYWNrLFxuICAgIGxvYWRQYWdlQ29udGVudEFqYXhFcnJvckNhbGxiYWNrXG4gICk7XG59XG5cbmZ1bmN0aW9uIGxvYWRQYWdlQ29udGVudEFqYXhTdWNjZXNzQ2FsbGJhY2soZGF0YSkge1xuICBwb3B1bGF0ZURhdGEoZGF0YVswXSk7XG4gIHNob3dEYXRhKCk7XG59XG5cbmZ1bmN0aW9uIGxvYWRQYWdlQ29udGVudEFqYXhFcnJvckNhbGxiYWNrKCkge1xuICAvLyBOb29wLCBub3Qgc3VyZSB3aHkuXG59XG5cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlbmRlcnMgcGVyc29uIGJpbyBkYXRhIG9uIHRvIHRoZSBwYWdlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRhdGEgVGhlIHRlYW0gbWVtYmVyIG9iamVjdCB0byBiZSByZW5kZXJlZC5cbiAqL1xuZnVuY3Rpb24gcG9wdWxhdGVEYXRhKGRhdGFPYmopIHtcbiAgLy8gYWRkIG1haW4gY29udGVudFxuICAkKFwiI3RleHRcIikuYXBwZW5kKFxuICAgIGA8aDEgaWQ9XCJwZXJzb24tbmFtZVwiPiR7ZGF0YU9iai5uYW1lfTwvaDE+XG4gICAgICA8aDQgY2xhc3M9XCJwb3NpdGlvblwiPiR7ZGF0YU9iai5wb3NpdGlvbn08L2g0PlxuICAgICAgPGg0IGNsYXNzPVwic2hvcnQtZGVzY3JpcHRpb25cIj4ke2RhdGFPYmouc2hvcnRfZGVzY3JpcHRpb259PC9oND5cbiAgICAgIDxwIGlkPVwiYm9keVwiPiR7ZGF0YU9iai5ib2R5fTwvcD5cbiAgICAgIDxoMyBpZD1cInBlb3BsZS1oZWxwLXRpdGxlXCI+JHtkYXRhT2JqLmhlbHBfdGl0bGV9PC9oMz5cbiAgICAgIDxwIGlkPVwicGVvcGxlLWhlbHAtZGVzY3JpcHRpb25cIj4ke2RhdGFPYmouaGVscF9kZXNjcmlwdGlvbn08L3A+XG4gICAgYFxuICApO1xuXG4gIC8vIGFkZCBzaWRlYmxvY2sgY29udGVudFxuICAkKFwiI3NpZGVcIikuYXBwZW5kKFxuICAgIGA8dWwgaWQ9XCJ0YWctc2VjdGlvblwiIGNsYXNzPVwidGFnc1wiPjxzcGFuIGNsYXNzPVwidGl0bGVcIj5BcmVhIG9mIGZvY3VzPC9zcGFuPjwvdWw+XG4gICAgICA8aHIgY2xhc3M9XCJzZXBlcmF0b3JcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJhZGRyZXNzXCI+PHNwYW4gY2xhc3M9XCJ0aXRsZVwiPk9mZmljZTwvc3Bhbj48c3BhbiBpZD1cInBlcnNvbi1sb2NhdGlvblwiPiR7ZGF0YU9iai5sb2NhdGlvbn08L3NwYW4+PC9kaXY+XG4gICAgICA8ZGl2IGlkPVwiY29udGFjdHNcIiBjbGFzcz1cInNoYXJlXCI+PC9kaXY+XG4gICAgICA8aHIgY2xhc3M9XCJzZXBhcmF0b3JcIj5cbiAgICBgXG4gICk7XG5cbiAgLy8gcG9zaXRpb24gdGhlIHByb2ZpbGUgaW1hZ2UgaW4gZWl0aGVyIG1haW4gdGV4dGJsb2NrIG9yIHNpZGVibG9jayBkZXBlbmRpbmcgb24gc2NyZWVuIHNpemVcbiAgbGV0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpXCIpLm1hdGNoZXM7XG5cbiAgaWYgKGlzTW9iaWxlKSB7XG4gICAgJChcIiN0ZXh0XCIpLnByZXBlbmQoYDxkaXYgaWQ9XCJwZXJzb24taW1hZ2VcIiBjbGFzcz1cImltYWdlXCI+PC9kaXY+YCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgJChcIiNzaWRlXCIpLnByZXBlbmQoYDxkaXYgaWQ9XCJwZXJzb24taW1hZ2VcIiBjbGFzcz1cImltYWdlXCI+PC9kaXY+YCk7XG4gIH1cblxuICAvLyBzZXQgaW1hZ2VcbiAgbGV0IGltYWdlRWxlbWVudCA9IGRhdGFPYmouaW1hZ2U7XG4gIGxldCBpbWFnZVNyYyA9IGltYWdlRWxlbWVudC5yZXBsYWNlKC8uKnNyYz1cIihbXlwiXSopXCIuKi8sICckMScpLnRyaW0oKTtcblxuICAkKFwiI3BlcnNvbi1pbWFnZVwiKS5hdHRyKFwic3R5bGVcIiwgYGJhY2tncm91bmQtaW1hZ2U6dXJsKCcke3Byb2Nlc3MuZW52LlJPT1RfVVJMfSR7aW1hZ2VTcmN9JylgKTtcblxuICAvLyBwb3B1bGF0aW5nIHRhZ3NcbiAgbGV0IHRhZ0FycmF5ID0gZGF0YU9iai50YWdzLnNwbGl0KFwiLCBcIik7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdGFnQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAkKCcjdGFnLXNlY3Rpb24nKS5hcHBlbmQoXG4gICAgICBgPGxpPlxuICAgICAgICA8YSBjbGFzcz1cInRhZ1wiPiR7dGFnQXJyYXlbaV19PC9hPlxuICAgICAgPC9saT5gXG4gICAgKTtcbiAgfVxuXG4gIC8vIGFkZCBjb250YWN0IGRldGFpbHNcbiAgaWYgKGRhdGFPYmoubGlua2VkaW5fdXJsIHx8IGRhdGFPYmouZW1haWwgfHwgZGF0YU9iai5maWVsZF9waG9uZSkge1xuICAgICQoXCIjY29udGFjdHNcIikuYXBwZW5kKCc8c3BhbiBjbGFzcz1cInRpdGxlXCI+Q29udGFjdDwvc3Bhbj4nKTtcbiAgfSBlbHNlIHtcbiAgICAkKFwiI2NvbnRhY3RzXCIpLmhpZGUoKTtcbiAgfVxuXG4gIGlmIChkYXRhT2JqLmVtYWlsKSB7XG4gICAgJChcIiNjb250YWN0c1wiKS5hcHBlbmQoXG4gICAgICBgPGEgaHJlZj1cIm1haWx0bzoke2RhdGFPYmouZW1haWx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiL2ltYWdlcy9lbWFpbC5zdmdcIj5cbiAgICAgIDwvYT5gXG4gICAgKTtcbiAgfVxuXG4gIGlmIChkYXRhT2JqLmZpZWxkX3Bob25lKSB7XG4gICAgJChcIiNjb250YWN0c1wiKS5hcHBlbmQoYFxuICAgICAgPGEgY2xhc3M9XCJ0b29sdGlwXCIgaHJlZj1cInRlbDoke2RhdGFPYmouZmllbGRfcGhvbmV9XCI+XG4gICAgICAgIDxpbWcgc3JjPVwiL2ltYWdlcy9waG9uZS5zdmdcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dFwiPjxwPiR7ZGF0YU9iai5maWVsZF9waG9uZX08L3A+PC9zcGFuPlxuICAgICAgPC9hPmBcbiAgICApO1xuICB9XG5cbiAgaWYgKGRhdGFPYmoubGlua2VkaW5fdXJsKSB7XG4gICAgJChcIiNjb250YWN0c1wiKS5hcHBlbmQoYFxuICAgICAgPGEgaHJlZj1cIiR7ZGF0YU9iai5saW5rZWRpbl91cmx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgIDxpbWcgc3JjPVwiL2ltYWdlcy9saW5rZWRpbi5zdmdcIj5cbiAgICAgIDwvYT5gXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG93RGF0YSgpIHtcbiAgJCgnLnBlb3BsZS1kZXRhaWxzJykuc2hvdygpO1xuICAkKCcuZm9vdGVyLWJvdHRvbScpLnNob3coKTtcbiAgJCgnLmZvb3Rlci10b3AnKS5zaG93KCk7XG4gICQoJy5sb2FkZXInKS5oaWRlKCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUGVvcGxlRGV0YWlscztcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RydWN0b3JcbnZhciBTaXRlTWFwID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMubmFtZSA9ICdzaXRlLW1hcCc7XG4gIFxuICAkKCcubG9hZGVyJykuaGlkZSgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaXRlTWFwOyIsIid1c2Ugc3RyaWN0JztcblxuLy8gQ29uc3RydWN0b3JcbnZhciBVdGlsaXRpZXMgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMubmFtZSA9ICd1dGlsaXRpZXMnO1xuXG4gIHRoaXMuYXBpX3BhdGhfZ2V0X25vZGVfaWRzX2J5X3BhdGggPSAnZ2V0LW5vZGUtaWRzLWJ5LXBhdGgnO1xuXG4gIHRoaXMubG9hZFBhZ2VDb250ZW50ID0gKGNvbnRlbnRUeXBlTG9hZEFwaVBhdGgsIGFqYXhTdWNjZXNzQ2FsbGJhY2tOZXcsIGFqYXhFcnJvckNhbGxiYWNrTmV3KSA9PiB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoO1xuICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocXVlcnlTdHJpbmcpO1xuICAgIC8vIEdldCBEcnVwYWwgbm9kZSBJRCBmcm9tIFVSTC5cbiAgICB2YXIgZHJ1cGFsTWF0Y2hSZWNvcmQgPSBudWxsO1xuICAgIHZhciBkcnVwYWxOb2RlSWQgPSBudWxsO1xuICAgIC8vIFByZWZlciBwYXRoLCBpZiBpdCdzIHRoZXJlLlxuICAgIGlmIChkcnVwYWxNYXRjaFJlY29yZCA9IHRoaXMuZ2V0X3BhZ2VfbWV0YWRhdGFfYnlfY3VycmVudF9wYXRoX3BhcmFtKCkpIHtcbiAgICAgIGRydXBhbE5vZGVJZCA9IGRydXBhbE1hdGNoUmVjb3JkLmlkO1xuICAgIH1cbiAgICBpZiAoIWRydXBhbE5vZGVJZCkge1xuICAgICAgZHJ1cGFsTm9kZUlkID0gdXJsUGFyYW1zLmdldCgnaWQnKTtcbiAgICB9XG5cbiAgICAvLyBSZXRyaWV2ZSBjb250ZW50IGZyb20gYmFja2VuZCBBUEkgYW5kIHJlbmRlciBvbnRvIHRoZSBwYWdlLlxuICAgIGpRdWVyeS5hamF4KHtcbiAgICAgIHVybDogYCR7cHJvY2Vzcy5lbnYuUk9PVF9BUEl9JHtjb250ZW50VHlwZUxvYWRBcGlQYXRofT9pZD0ke2RydXBhbE5vZGVJZH1gLFxuICAgICAgdHlwZTogXCJnZXRcIixcbiAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgIGFqYXhTdWNjZXNzQ2FsbGJhY2tOZXcoZGF0YSk7XG5cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xuICAgICAgICBhamF4RXJyb3JDYWxsYmFja05ldygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcGFnZSBtZXRhZGF0IHJlY29yZCBmb3JtIHRoZSBjdXJyZW50IHBhdGggcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcmV0dXJucyBudWxsfGFycmF5IHRoZSByZWNvcmQgb2YgTlVMTC5cbiAgICovXG4gIHRoaXMuZ2V0X3BhZ2VfbWV0YWRhdGFfYnlfY3VycmVudF9wYXRoX3BhcmFtID0gKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5U3RyaW5nKTtcbiAgICByZXR1cm4gdGhpcy5nZXRfcGFnZV9tZXRhZGF0YV9ieV9wYXRoKHVybFBhcmFtcy5nZXQoJ3BhdGgnKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBwYWdlIG1ldGFkYXQgcmVjb3JkIGZvcm0gdGhlIGN1cnJlbnQgcGF0aCBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIG51bGx8YXJyYXkgdGhlIHJlY29yZCBvZiBOVUxMLlxuICAgKi9cbiAgdGhpcy5nZXRfcGFnZV9tZXRhZGF0YV9ieV9wYXRoID0gKGRydXBhbE5vZGVQYXRoKSA9PiB7XG4gICAgdmFyIGRydXBhbE1hdGNoUmVjb3JkID0gbnVsbDtcblxuICAgIGpRdWVyeS5hamF4KHtcbiAgICAgIHVybDogYCR7cHJvY2Vzcy5lbnYuUk9PVF9BUEl9JHt0aGlzLmFwaV9wYXRoX2dldF9ub2RlX2lkc19ieV9wYXRofWAsXG4gICAgICB0eXBlOiBcImdldFwiLFxuICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlY29yZHMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlY29yZHNbaV0ucGF0aCA9PT0gZHJ1cGFsTm9kZVBhdGgpIHtcbiAgICAgICAgICAgIGRydXBhbE1hdGNoUmVjb3JkID0gcmVjb3Jkc1tpXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBmdW5jdGlvbiAoKSB7XG4gICAgICB9LFxuICAgICAgYXN5bmM6IGZhbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGRydXBhbE1hdGNoUmVjb3JkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCByZWRpcmVjdGVkIHBhZ2UgcGF0aCBvciB0aGUgY3VycmVudCBvbmUgaWYgbm90IHJlZGlyZWN0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHN0cmluZ1xuICAgKiAgIFRoZSBwYWdlIHBhdGgsIGZvciBleGFtcGxlIFwiYWdlZC1jYXJlXCIuXG4gICAqL1xuICB0aGlzLmdldF9wYWdlX3BhdGhfZnJvbV9tYXliZV9jdXJyZW50X3JlZGlyZWN0ZWRfcGF0aCA9ICgpID0+IHtcbiAgICAvLyBHZXQgdGhlIFwiYWdlZC1jYXJlXCIgcGF0aCB3aXRob3V0IGZvcndhcmQgc2xhc2ggcHJlZml4IGZvciBleGFtcGxlIGluXG4gICAgLy8gc2l0ZS5jb20vYWdlZC1jYXJlLlxuICAgIGxldCBjdXJyZW50X29yX21hdGNoZWRfcGF0aCA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSk7XG5cbiAgICBqUXVlcnkuYWpheCh7XG4gICAgICB1cmw6IGAke3Byb2Nlc3MuZW52LlJPT1RfQVBJfXJlZGlyZWN0c2AsXG4gICAgICB0eXBlOiBcImdldFwiLFxuICAgICAgc3VjY2VzczogZnVuY3Rpb24gKHJlY29yZHMpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHJlY29yZHNbaV0uZnJvbV9wYXRoID09PSBjdXJyZW50X29yX21hdGNoZWRfcGF0aCkge1xuICAgICAgICAgICAgY3VycmVudF9vcl9tYXRjaGVkX3BhdGggPSByZWNvcmRzW2ldLnRvX3BhdGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZnVuY3Rpb24gKCkge1xuICAgICAgfSxcbiAgICAgIGFzeW5jOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiBjdXJyZW50X29yX21hdGNoZWRfcGF0aDtcbiAgfVxuXG4gIC8qKlxuICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgSFRNTCBzdHJ1Y3R1cmUgYW5kIENTUyBzdHlsaW5nIG9mIGltYWdlcyBpbiB0aGUgRE9NXG4gICpcbiAgKiBAcGFyYW0ge09iamVjdH0gZGF0YU9iaiBBIGRhdGEgb2JqZWN0IHJldHJpZXZlZCBmcm9tIHRoZSBiYWNrZW5kIEFQSVxuICAqL1xuICB0aGlzLmhhbmRsZUlubGluZUltYWdlcyA9IChodG1sKSA9PiB7XG4gICAgbGV0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgIGxldCBzb3VyY2VfZWxlbWVudHMgPSB0ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzb3VyY2UnKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZV9lbGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHNvdXJjZV9lbGVtZW50c1tpXS5zcmNzZXQpIHtcbiAgICAgICAgc291cmNlX2VsZW1lbnRzW2ldLnNyY3NldCA9IHNvdXJjZV9lbGVtZW50c1tpXS5zcmNzZXQucmVwbGFjZSgvXFwvc2l0ZXNcXC9kZWZhdWx0XFwvZmlsZXMvZywgYCR7cHJvY2Vzcy5lbnYuUk9PVF9VUkx9c2l0ZXMvZGVmYXVsdC9maWxlc2ApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoYW5nZSB0aGUgc3JjIFVSTCBvZiBhbGwgaW5saW5lIGltYWdlc1xuICAgIGxldCBpbWFnZXMgPSB0ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGltYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGlubGluZUltYWdlID0gaW1hZ2VzW2ldLnNyYy5zcGxpdCgnLycpO1xuICAgICAgbGV0IGltYWdlQ2xhc3MgPSBcIlwiO1xuICAgICAgaW5saW5lSW1hZ2VbMl0gPSBgJHtwcm9jZXNzLmVudi5ST09UX1VSTF9OT19TTEFTSH1gO1xuICAgICAgaW5saW5lSW1hZ2UgPSBpbmxpbmVJbWFnZS5zbGljZSgyKS5qb2luKCcvJyk7XG4gICAgICB0ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKVtpXS5zcmMgPSBpbmxpbmVJbWFnZTtcblxuICAgICAgLy8gUmVzcG9uc2l2ZSBpbWFnZXMuXG4gICAgICBpZiAoaW1hZ2VzW2ldLnNyY3NldCkge1xuICAgICAgICBpbWFnZXNbaV0uc3Jjc2V0ID0gaW1hZ2VzW2ldLnNyY3NldC5yZXBsYWNlKC9cXC9zaXRlc1xcL2RlZmF1bHRcXC9maWxlcy9nLCBgJHtwcm9jZXNzLmVudi5ST09UX1VSTH1zaXRlcy9kZWZhdWx0L2ZpbGVzYCk7XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBDU1Mgc3R5bGluZyB0byBtYXRjaCB0aGUgc3R5bGluZyBpbiB0aGUgQ01TXG4gICAgICBpZiAodGVtcERpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJylbaV0ucGFyZW50RWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmlndXJlXCIpIHtcbiAgICAgICAgLy8gSGFuZGxlIGltYWdlcyBXSVRIIGNhcHRpb25zXG4gICAgICAgIGltYWdlQ2xhc3MgPSB0ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpbWcnKVtpXS5wYXJlbnRFbGVtZW50LmNsYXNzTmFtZTtcbiAgICAgICAgaWYgKGltYWdlQ2xhc3MuaW5jbHVkZXMoXCJhbGlnbi1yaWdodFwiKSkge1xuICAgICAgICAgIHRlbXBEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpW2ldLnBhcmVudEVsZW1lbnQuc3R5bGUuY3NzVGV4dCArPSAoXCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1sZWZ0OiA0MHB4OyBtYXJnaW4tdG9wOiAxNXB4OyBtYXJnaW4tYm90dG9tOiAxNXB4O1wiKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZUNsYXNzLmluY2x1ZGVzKFwiYWxpZ24tbGVmdFwiKSkge1xuICAgICAgICAgIHRlbXBEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpW2ldLnBhcmVudEVsZW1lbnQuc3R5bGUuY3NzVGV4dCArPSAoXCJmbG9hdDogbGVmdDsgbWFyZ2luLXJpZ2h0OiA0MHB4OyBtYXJnaW4tdG9wOiAxNXB4OyBtYXJnaW4tYm90dG9tOiAxNXB4O1wiKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZUNsYXNzLmluY2x1ZGVzKFwiYWxpZ24tY2VudGVyXCIpKSB7XG4gICAgICAgICAgdGVtcERpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJylbaV0ucGFyZW50RWxlbWVudC5zdHlsZS5jc3NUZXh0ICs9IChcIm1hcmdpbjogYXV0bzsgZGlzcGxheTogYmxvY2s7XCIpXG4gICAgICAgIH1cbiAgICAgICAgdGVtcERpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJylbaV0ucGFyZW50RWxlbWVudC5zdHlsZS5jc3NUZXh0ICs9IChcInRleHQtYWxpZ246IGNlbnRlcjtcIilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhbmRsZSBpbWFnZXMgV0lUSE9VVCBjYXB0aW9uc1xuICAgICAgICBpbWFnZUNsYXNzID0gdGVtcERpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJylbaV0uY2xhc3NOYW1lO1xuICAgICAgICBpZiAoaW1hZ2VDbGFzcy5pbmNsdWRlcyhcImFsaWduLXJpZ2h0XCIpKSB7XG4gICAgICAgICAgdGVtcERpdi5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW1nJylbaV0uc3R5bGUuY3NzVGV4dCArPSAoXCJmbG9hdDogcmlnaHQ7IG1hcmdpbi1sZWZ0OiA0MHB4OyBtYXJnaW4tdG9wOiAxNXB4OyBtYXJnaW4tYm90dG9tOiAxNXB4O1wiKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbWFnZUNsYXNzLmluY2x1ZGVzKFwiYWxpZ24tbGVmdFwiKSkge1xuICAgICAgICAgIHRlbXBEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpW2ldLnN0eWxlLmNzc1RleHQgKz0gKFwiZmxvYXQ6IGxlZnQ7IG1hcmdpbi1yaWdodDogNDBweDsgbWFyZ2luLXRvcDogMTVweDsgbWFyZ2luLWJvdHRvbTogMTVweDtcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoaW1hZ2VDbGFzcy5pbmNsdWRlcyhcImFsaWduLWNlbnRlclwiKSkge1xuICAgICAgICAgIHRlbXBEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ltZycpW2ldLnN0eWxlLmNzc1RleHQgKz0gKFwibWFyZ2luOiBhdXRvOyBkaXNwbGF5OiBibG9jaztcIilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGVtcERpdi5pbm5lckhUTUw7XG4gIH1cbn1cblxuXG5tb2R1bGUuZXhwb3J0cyA9IFV0aWxpdGllcztcbiIsIi8vIE1haW4gamF2YXNjcmlwdCBlbnRyeSBwb2ludFxuLy8gU2hvdWxkIGhhbmRsZSBib290c3RyYXBwaW5nL3N0YXJ0aW5nIGFwcGxpY2F0aW9uXG5cbid1c2Ugc3RyaWN0JztcbndpbmRvdy5jaGFydHNfY29sbGVjdGlvbiA9IHt9OyAvLyBDb250YWlucyBhbGwgdGhlIHRoZSBjaGFydCBvYmplY3RzXG5cbndpbmRvdy5pbnNvbHZlbmN5X2Ntc19yb290X3VybCA9IGAke3Byb2Nlc3MuZW52LlJPT1RfVVJMfWA7XG53aW5kb3cuaW5zb2x2ZW5jeV9jbXNfcm9vdF91cmxfbm9fc2xhc2ggPSBgJHtwcm9jZXNzLmVudi5ST09UX1VSTF9OT19TTEFTSH1gO1xud2luZG93Lmluc29sdmVuY3lfY21zX3Jvb3RfYXBpID0gYCR7cHJvY2Vzcy5lbnYuUk9PVF9BUEl9YDtcblxuLy8gdmFyICQgPSByZXF1aXJlKCdqcXVlcnknKTtcbi8vIGluY2x1ZGluZyBtb2R1bGUgZnJvbSB0aGUgZGFzaGJvYXJkIHBvcnRhbFxuLy8gVE9ETzogTW92ZSB0aGVzZSBjb21tb24gbW9kdWxlcyBvdXRzaWRlIHRoZSBwcm9qZWN0IGluXG4vLyBhIGNvbW1vbiBmb2xkZXJcbnZhciBEcm9wRG93bkJveCA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2NvbW1vbi9kcm9wLWRvd24tYm94L2Ryb3AtZG93bi1ib3gnKTtcbnZhciBDb250ZW50T3ZlcmxheSA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2NvbW1vbi9jb250ZW50LW92ZXJsYXkvY29udGVudC1vdmVybGF5Jyk7XG5cbi8vLS1cblxudmFyIFJlZGlyZWN0ID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvY29tbW9uL3JlZGlyZWN0L3JlZGlyZWN0Jyk7XG52YXIgSG9tZXBhZ2VCYW5uZXIgPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9ob21lcGFnZS9ob21lcGFnZS1iYW5uZXIvaG9tZXBhZ2UtYmFubmVyJyk7XG52YXIgSG93Q2FuV2VIZWxwID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvaG9tZXBhZ2UvaG93LWNhbi13ZS1oZWxwL2hvdy1jYW4td2UtaGVscCcpO1xudmFyIEZvcm1hbEluc29sdmVuY3kgPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9ob21lcGFnZS9mb3JtYWwtaW5zb2x2ZW5jeS9mb3JtYWwtaW5zb2x2ZW5jeScpO1xudmFyIE91ckxhdGVzdFRoaW5raW5nID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvaG9tZXBhZ2Uvb3VyLWxhdGVzdC10aGlua2luZy9vdXItbGF0ZXN0LXRoaW5raW5nJyk7XG52YXIgVGhlVGVhbSA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2hvbWVwYWdlL3RoZS10ZWFtL3RoZS10ZWFtJyk7XG52YXIgTG9naW4gPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9jb21tb24vbG9naW4vbG9naW4nKTtcbnZhciBDYXNlRGV0YWlscyA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2Nhc2UuZGV0YWlscy9jYXNlLmRldGFpbHMnKTtcbnZhciBGb290ZXJCb3R0b20gPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9jb21tb24vZm9vdGVyL2Zvb3Rlci1ib3R0b20vZm9vdGVyLWJvdHRvbScpO1xudmFyIEZvb3RlclRvcCA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2NvbW1vbi9mb290ZXIvZm9vdGVyLXRvcC9mb290ZXItdG9wJyk7XG52YXIgQXJ0aWNsZXMgPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9hcnRpY2xlcy9hcnRpY2xlcycpO1xudmFyIEFydGljbGVEZXRhaWxzID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvYXJ0aWNsZS5kZXRhaWxzL2FydGljbGUuZGV0YWlscycpO1xudmFyIENhbXBhaWduRGV0YWlscyA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2NhbXBhaWduLmRldGFpbHMvY2FtcGFpZ24uZGV0YWlscycpO1xudmFyIEN1cnJlbnRDYXNlcyA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2N1cnJlbnQuY2FzZXMvY3VycmVudC5jYXNlcycpO1xudmFyIFBlb3BsZURldGFpbHMgPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9wZW9wbGUuZGV0YWlscy9wZW9wbGUuZGV0YWlscycpO1xudmFyIENvbm5lY3RXaXRoVXMgPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9jb25uZWN0LndpdGgudXMvY29ubmVjdC53aXRoLnVzJyk7XG52YXIgTGVnYWxBbmRQcml2YWN5ID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvbGVnYWwvbGVnYWwtYW5kLXByaXZhY3knKTtcbnZhciBMb2FkZXIgPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9jb21tb24vbG9hZGVyL2xvYWRlcicpO1xudmFyIFNpdGVNYXAgPSByZXF1aXJlKCcuLi9fbW9kdWxlcy9zaXRlLm1hcC9zaXRlLm1hcCcpO1xudmFyIEZpeExpbmtzID0gcmVxdWlyZSgnLi4vX21vZHVsZXMvY29tbW9uL2ZpeC1saW5rcy9maXgtbGlua3MnKTtcbnZhciBFcnJvciA9IHJlcXVpcmUoJy4uL19tb2R1bGVzL2Vycm9yL2Vycm9yJyk7XG5cbiQoZnVuY3Rpb24gKCkge1xuICAgIC8vIEFkZCB0byBBamF4IGNvbXBsZXRlLlxuICAgIG5ldyBGaXhMaW5rcygpO1xuXG4gICAgLy8gTW9kdWxlcyBzaGFyZWQgYWNyb3NzIGFsbCBwYWdlc1xuICAgIG5ldyBSZWRpcmVjdCgpOyAvLyBMb2FkIHRoZSBwdWJsaWMgd2Vic2l0ZVxuICAgIG5ldyBMb2dpbigpO1xuICAgIG5ldyBEcm9wRG93bkJveCgpO1xuICAgIG5ldyBDb250ZW50T3ZlcmxheSgpO1xuICAgIG5ldyBGb290ZXJUb3AoKTtcbiAgICBuZXcgRm9vdGVyQm90dG9tKCk7XG4gICAgbmV3IExvYWRlcigpO1xuXG4gICAgaWYgKCQoJy5ob21lcGFnZScpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3IEhvbWVwYWdlQmFubmVyKCk7XG4gICAgICAgIG5ldyBIb3dDYW5XZUhlbHAoKTtcbiAgICAgICAgbmV3IEZvcm1hbEluc29sdmVuY3koKTtcbiAgICAgICAgbmV3IE91ckxhdGVzdFRoaW5raW5nKCk7XG4gICAgICAgIG5ldyBUaGVUZWFtKCk7XG4gICAgfSBlbHNlIGlmICgkKCcuYXJ0aWNsZS1kZXRhaWxzJykubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXcgT3VyTGF0ZXN0VGhpbmtpbmcoKTtcbiAgICAgICAgbmV3IEFydGljbGVEZXRhaWxzKCk7XG4gICAgfSBlbHNlIGlmICgkKCcjYXJ0aWNsZXMtcGFnZScpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3IEFydGljbGVzKCk7XG4gICAgfSBlbHNlIGlmICgkKCcuY29ubmVjdCcpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3IENvbm5lY3RXaXRoVXMoKTtcbiAgICB9IGVsc2UgaWYgKCQoJy5jdXJyZW50LWNhc2VzJykubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXcgQ3VycmVudENhc2VzKCk7XG4gICAgfSBlbHNlIGlmICgkKCcuY2FzZS1kZXRhaWxzJykubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXcgQ2FzZURldGFpbHMoKTtcbiAgICB9IGVsc2UgaWYgKCQoJy5sYXlvdXQtY29udGFpbmVyLmNhbXBhaWduLWRldGFpbHMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIG5ldyBDYW1wYWlnbkRldGFpbHMoKTtcbiAgICB9IGVsc2UgaWYgKCQoJy5sZWdhbC1hbmQtcHJpdmFjeScpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3IExlZ2FsQW5kUHJpdmFjeSgpO1xuICAgIH0gZWxzZSBpZiAoJCgnLnBlb3BsZS1kZXRhaWxzJykubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXcgUGVvcGxlRGV0YWlscygpO1xuICAgICAgICBuZXcgVGhlVGVhbSgpO1xuICAgIH0gZWxzZSBpZiAoJCgnLnNpdGUtbWFwJykubGVuZ3RoID4gMCkge1xuICAgICAgICBuZXcgU2l0ZU1hcCgpO1xuICAgIH0gZWxzZSBpZiAoJCgnLmxheW91dC1jb250YWluZXIuZXJyb3ItcGFnZScpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbmV3IEVycm9yKCk7XG4gICAgfVxuICAgIC8vIFJ1biBhZ2FpbiB0byBjYXRjaCBhbnkgbGlua3MgbWlzc2VkLlxuICAgIG5ldyBGaXhMaW5rcygpO1xufSk7XG4iXX0="}